配置文件说明:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <!--必须紧跟在configuration节点的下方才不会报错--> <!--配置系统完全分析配置文件以收集配置信息,当遇到在 configSections 节中没有相应条目的配置节时引发异常。 对于那些不是由 System.Configuration 类型处理的节,提供了新的包装类型 IgnoreSection。这是为了避免配置文件分析异常。 出于兼容目的,还提供了 IgnoreSectionHandler--> <section name="log4net" type="System.Configuration.IgnoreSectionHandler" /> </configSections> <log4net> RollingFileAppender将日志以回滚文件的形式写到文件中。 <appender name="ApplicationLogFileAppender" type="log4net.Appender.RollingFileAppender"> <!--输出日志文件的路径--> <file value="ApplicationLog.log" /> <!--输出日志文件的编码格式--> <encoding value="Shift_JIS" /> <!--输出日志时自动向后追加--> <appendToFile value="true" /> <!--防止多线程时不能写Log,官方说线程非安全,但实际使用时,本地测试正常,部署后有不能写日志的情况--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <!--置为true,当前最新日志文件名永远为file节中的名字--> <staticLogFileName value="false" /> <!--日志以大小作为备份样式,还有一种方式是Date(日期)--> <rollingStyle value="size" /> <countDirection value="-1" /> <!--单个日志的最大容量,(可用的单位:KB|MB|GB)不要使用小数,否则会一直写入当前日志--> <maximumFileSize value="1MB" /> <!--日志最大个数,都是最新的--> <maxSizeRollBackups value="10" /> <datePattern value='"."yyyy-MM-dd".log"' /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%d{yyyy/MM/dd,HH:mm:ss.fff},[%-5level],%message%newline" /> </layout> </appender> <appender name="ErrorLogFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="ErrorLog.log" /> <encoding value="Shift_JIS" /> <appendToFile value="true" /> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <staticLogFileName value="false" /> <rollingStyle value="size" /> <countDirection value="-1" /> <maximumFileSize value="1MB" /> <maxSizeRollBackups value="10" /> <datePattern value='"."yyyy-MM-dd".log"' /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%d{yyyy/MM/dd,HH:mm:ss.fff},[%-5level],%message%newline" /> </layout> </appender> <logger name="ApplicationLog"> <!-- 如果没有定义LEVEL的值,则缺省为DEBUG --> <level value="ALL" /> <!--定义了appender的NAME及TYPE属性,以及使用param为其指定参数后(也可以没有参数),一个appender就建立了,你可以使用他的名字在LOGGER的<appender-ref中去 引用它,那么,引用它的LOGGER在写入日志时,就是写到了APPENDER中定义的介质中去了--> <appender-ref ref="ApplicationLogFileAppender" /> </logger> <logger name="ErrorLog" > <level value="ERROR" /> <appender-ref ref="ErrorLogFileAppender" /> </logger> </log4net> </configuration>
使用:
1.配置文件App.config:注意以下加粗名称
<?xml version="1.0"?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> </configSections> <log4net> <!--定义输出到文件中--> <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <!--定义文件存放位置--> <file value="log\\"/> <appendToFile value="true"/> <rollingStyle value="Date"/> <datePattern value="yyyy\\yyyyMM\\yyyyMMdd'.txt'"/> <staticLogFileName value="false"/> <param name="MaxSizeRollBackups" value="100"/> <layout type="log4net.Layout.PatternLayout"> <!--每条日志末尾的文字说明--> <!--输出格式--> <!--样例:2008-03-26 13:42:32,111 [10] INFO Log4NetDemo.MainClass [(null)] - info--> <conversionPattern value="%newline %n记录时间:%date %n线程ID:[%thread] %n日志级别: %-5level %n出错类:%logger property: [%property{NDC}] - %n错误描述:%message%newline %n"/> </layout> </appender> <root> <level value="ERROR"/> <!--文件形式记录日志--> <appender-ref ref="RollingLogFileAppender"/> </root> </log4net> </configuration>
2.写一个通用类,以便在多个类中使用log4net
using System; using System.Collections.Generic; using System.Linq; using System.Text; [assembly: log4net.Config.XmlConfigurator(Watch = true)] namespace TestLog4Net { public class LogHelper { /// <summary> /// 输出日志到Log4Net /// </summary> /// <param name="t"></param> /// <param name="ex"></param> #region static void WriteLog(Type t, Exception ex) public static void WriteLog(Type t, Exception ex) { log4net.ILog log = log4net.LogManager.GetLogger(t); log.Error("Error", ex); } #endregion /// <summary> /// 输出日志到Log4Net /// </summary> /// <param name="t"></param> /// <param name="msg"></param> #region static void WriteLog(Type t, string msg) public static void WriteLog(Type t, string msg) { log4net.ILog log = log4net.LogManager.GetLogger(t); log.Error(msg); } #endregion } }
3.使用示例
using System; using System.Collections.Generic; using System.Linq; using System.Text; [assembly: log4net.Config.XmlConfigurator(Watch = true)] namespace TestLog4Net { public class LogHelper { /// <summary> /// 输出日志到Log4Net /// </summary> /// <param name="t"></param> /// <param name="ex"></param> #region static void WriteLog(Type t, Exception ex) public static void WriteLog(Type t, Exception ex) { log4net.ILog log = log4net.LogManager.GetLogger(t); log.Error("Error", ex); } #endregion /// <summary> /// 输出日志到Log4Net /// </summary> /// <param name="t"></param> /// <param name="msg"></param> #region static void WriteLog(Type t, string msg) public static void WriteLog(Type t, string msg) { log4net.ILog log = log4net.LogManager.GetLogger(t); log.Error(msg); } #endregion } }
官方配置说明:
https://logging.apache.org/log4net/release/config-examples.html
备注:对于:最多保留30天日志这样的设置貌似不支持
更详细中文配置:https://blog.csdn.net/hddd2009/article/details/47344737