Log4net的不能产生Log文件的问题

【问题】

用如下的步骤应用了Log4Net:

  1. 建立了一个公用的项目, 在里面引入了Log4net的Nuget package.
  2. 在公用的项目中建立了一个类,加上了Log4net的attribute.

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

namespace MyNamespace.Common

{

public class LogHelper

{

static LogHelper()

{

var logCfg = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config");

XmlConfigurator.ConfigureAndWatch(logCfg);

}

public static void WriteError(Type t, Exception ex)

{

log4net.ILog log = log4net.LogManager.GetLogger(t);

log.Error("", ex);

}

 

public static void WriteLog(Type t, string msg)

{

log4net.ILog log = log4net.LogManager.GetLogger(t);

//log.Info(msg + " ");

log.Info(msg);

}

 

 

}

}

 

  1. 建立了一个新项目,然后引用这个公用项目。
  2. 在这个新项目中加入了log4net.config文件。

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<configSections>

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>

</configSections>

 

<log4net>

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">

<!--日志路径-->

<param name= "File" value= "Log/"/>

<!--是否是向文件中追加日志-->

<param name= "AppendToFile" value= "true"/>

<!--log保留天数-->

<param name= "MaxSizeRollBackups" value= "10"/>

<!--日志文件名是否是固定不变的-->

<param name= "StaticLogFileName" value= "false"/>

<!--日志文件名格式为:2008-08-31.log-->

<param name= "DatePattern" value= "yyyy-MM-dd&quot;.log&quot;"/>

<!--日志根据日期滚动-->

<param name= "RollingStyle" value= "Date"/>

<layout type="log4net.Layout.PatternLayout">

<param name="ConversionPattern" value="%n%date{HH:mm:ss,fff} [%-5level] %m" />

</layout>

</appender>

 

<!-- 控制台前台显示日志 -->

<appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">

<mapping>

<level value="ERROR" />

<foreColor value="Red, HighIntensity" />

</mapping>

<mapping>

<level value="Info" />

<foreColor value="Green" />

</mapping>

<layout type="log4net.Layout.PatternLayout">

<conversionPattern value="%n%date{HH:mm:ss,fff} [%-5level] %m" />

</layout>

 

<filter type="log4net.Filter.LevelRangeFilter">

<param name="LevelMin" value="Info" />

<param name="LevelMax" value="Fatal" />

</filter>

</appender>

 

<root>

<!--() OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL () -->

<level value="all" />

<!--<appender-ref ref="ColoredConsoleAppender"/>-->

<appender-ref ref="RollingLogFileAppender"/>

</root>

</log4net>

</configuration>

 

  1. 在新项目的文件中记Log.

LogHelper.WriteLog(typeof(MyClass), "here");

 

进行了上述的步骤后,程序运行的时候,并没有 Log产生。

【分析】

调试了一下,发现在实际运行的时候,Loger各个级别的输出都成false了。

这是怎么回事那?

 

最后发现程序输出路径下并没有log4net.config,这样的结果就是log4net无法找到配置文件,所以就默认都禁止输出了。

 

【解决方法】

在程序中将log4net.config设置为总是拷贝到输出目录。

这样,每次编译的时候,log4net.config就会被拷贝到程序的输出目录。

再运行程序的时候,就有log产生了。

原文地址:https://www.cnblogs.com/time-is-life/p/8403617.html