1、根据网上的配置说明,该配置将记录Error 级别的错误,按照月份分文件夹,按照天来分文件进行日志的记录,
完成了配置如下:
<configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net, Version=1.2.11.0, Culture=neutral, PublicKeyToken=1B44E1D426115821" /> </configSections> <log4net> <root> <!--<level value="DEBUG"/>--> <level value="ERROR"/> <!--根据log级别记录到不同的日志文件--> <!--<appender-ref ref="DebugLog" />--> <appender-ref ref="ErrorLog" /> </root> <appender name="ErrorLog" type="log4net.Appender.RollingFileAppender"> <!-- 最后放开注释--><span style="font-family: Arial, Helvetica, sans-serif;"> <!--<lockingModel type="命名空间.MinimalLockDeleteEmpty" />--></span> <param name="File" value="Log\" /> <param name="AppendToFile" value="true" /> <param name="RollingStyle" value="Date" /> <param name="DatePattern" value="yyyy-MM\\yyyy-MM-dd.'log'" /> <param name="StaticLogFileName" value="false" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> </layout> <securityContext type="log4net.Util.WindowsSecurityContext"> <credentials value="Process" /> </securityContext> <filter type="log4net.Filter.LevelRangeFilter"> <levelMin value="ERROR" /> <levelMax value="ERROR" /> </filter> </appender> </log4net> </configuration>
2、运行上面的(除红色)的设置后,发现就算没有抛出异常,log4net每天同样会创建一个空的日志文件。
3、查找搜索了下国内网站,未发现解决的方法,只是想到如果log4net不支持的化,可以在网站运行后
创建一个定时器,每隔一天检查一下对应的日志文件是否有空,有则删除;
4、google搜索到国外的网站,发现可以继承
FileAppender.MinimalLock 类 重写ReleaseLock 方法 来实现写日志完成后检查空文件并删除的功能
网址(http://stackoverflow.com/questions/2533403/how-to-disable-creation-of-empty-log-file-on-app-start)
using log4net.Appender; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; namespace 命名空间 { public class MinimalLockDeleteEmpty : FileAppender.MinimalLock { public override void ReleaseLock() { base.ReleaseLock(); var logFile = new FileInfo(CurrentAppender.File); if (logFile.Exists && logFile.Length <= 0) { logFile.Delete(); } } } }
5、最后在配置文件中将类插入完成调用
<lockingModel type="命名空间.MinimalLockDeleteEmpty" />