使用log4net配置的方法,有个网友说log4net不能使用txt作为日志文件的扩展名。
我查阅了下源码找到原因!
1、App.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler" />
</configSections>
<appSettings>
<!-- To enable internal log4net logging specify the following appSettings key -->
<!-- <add key="log4net.Internal.Debug" value="true"/> -->
</appSettings>
<log4net>
<appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
<file value="Log\\Error\\" />
<appendToFile value="true" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="100" />
<DatePattern value="yyyyMMdd.LOG" /> 这里不能使用log或者txt为扩展名,但是大写可以
<rollingStyle value="Date" />
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value ="ERROR" />
<param name="LevelMax" value="FATAL" />
</filter>
</appender>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<file value="Log\\Info\\log_file.txt" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<header value="[Header] " />
<footer value="[Footer] " />
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] <%property{auth}> - %message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value ="INFO" />
<param name="LevelMax" value="WARN" />
</filter>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="ErrorAppender" />
<appender-ref ref="LogFileAppender" />
</root>
</log4net>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
</configuration>
2. 加载 [assembly: log4net.Config.XmlConfigurator(Watch = true)]
3. 使用
private static readonly ILog _log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
_log.Error("test");
看看效果!
上面的配置,在ERROR FATAL写入一个日志文件。INFO WARN写入一个文件。他是通过 <filter ....控制的
调试代码发现在,在RollingFileAppender.cs中的GetNextOutputFileName函数中,
protected string GetNextOutputFileName(string fileName)
{
if (!m_staticLogFileName)
{
fileName = fileName.Trim();
if (m_rollDate)
{
fileName = CombinePath(fileName, m_now.ToString(m_datePattern, System.Globalization.DateTimeFormatInfo.InvariantInfo)); //这句话的问题
}
if (m_countDirection >= 0)
{
fileName = CombinePath(fileName, "." + m_curSizeRollBackups);
}
}
return fileName;
}
当然这也不是bug,或者就是习惯问题。
m_now.ToString(m_datePattern,xxxx....)这句返回的字符串就出现了多余的字符或者乱码了。
因为t g都是格式字符串。参照msdn看看就知道了!