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 + "\r\n");

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");

 

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

【分析】

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

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

这是怎么回事那?

 

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

 

【解决方法】

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

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

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

再运行程序的时候,就有lo*生了。

上一篇:解决log4net多进程日志文件被占用


下一篇:老老实实学习WCF[第二篇] 配置wcf