log4net 2.0.8不能将log txt作为日志的扩展名的原因

使用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]&#13;&#10;" />
 <footer value="[Footer]&#13;&#10;" />
 <conversionPattern value="%date [%thread] %-5level %logger [%ndc] &lt;%property{auth}&gt; - %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看看就知道了!

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值