Log4net在类库中的用法
一、使用Log4net
具体流程如下:
第一步:引用类库
使用VS的nuget包管理器引用log4net
第二步:创建配置文件
方法一、独立配置文件
在类库中添加一个log4net的配置文件,起名:log4net.config,设置此文件的属性复制到输出目录为:始终复制。注意这一项很重要。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> </configSections> <log4net> <!--根配置--> <root> <!--日志级别:可选值: ERROR > WARN > INFO > DEBUG --> <level value="ERROR"/> <level value="WARN"/> <level value="INFO"/> <level value="DEBUG"/> <appender-ref ref="ErrorLog" /> <appender-ref ref="WarnLog" /> <appender-ref ref="InfoLog" /> <appender-ref ref="DebugLog" /> </root> <!-- 错误 Error.log--> <appender name="ErrorLog" type="log4net.Appender.RollingFileAppender"> <!--目录路径,可以是相对路径或绝对路径--> <param name="File" value="App_Data/Logs"/> <!--文件名,按日期生成文件夹--> <param name="DatePattern" value="/yyyy-MM-dd/'Error.log&'"/> <!--追加到文件--> <appendToFile value="true"/> <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]--> <rollingStyle value="Composite"/> <!--写到一个文件--> <staticLogFileName value="false"/> <!--单个文件大小。单位:KB|MB|GB--> <maximumFileSize value="200MB"/> <!--最多保留的文件数,设为"-1"则不限--> <maxSizeRollBackups value="-1"/> <!--日志格式--> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="时间:%date 描述:%message 异常:%exception %n" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="ERROR" /> <param name="LevelMax" value="ERROR" /> </filter> </appender> <!-- 警告 Warn.log--> <appender name="WarnLog" type="log4net.Appender.RollingFileAppender"> <!--目录路径,可以是相对路径或绝对路径--> <param name="File" value="App_Data/Logs"/> <!--文件名,按日期生成文件夹--> <param name="DatePattern" value="/yyyy-MM-dd/'Warn.log'"/> <!--追加到文件--> <appendToFile value="true"/> <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]--> <rollingStyle value="Composite"/> <!--写到一个文件--> <staticLogFileName value="false"/> <!--单个文件大小。单位:KB|MB|GB--> <maximumFileSize value="200MB"/> <!--最多保留的文件数,设为"-1"则不限--> <maxSizeRollBackups value="-1"/> <!--日志格式--> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="时间:%date 描述:%message %n" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="WARN" /> <param name="LevelMax" value="WARN" /> </filter> </appender> <!-- 信息 Info.log--> <appender name="InfoLog" type="log4net.Appender.RollingFileAppender"> <!--目录路径,可以是相对路径或绝对路径--> <param name="File" value="App_Data/Logs"/> <!--文件名,按日期生成文件夹--> <param name="DatePattern" value="/yyyy-MM-dd/'Info.log'"/> <!--追加到文件--> <appendToFile value="true"/> <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]--> <rollingStyle value="Composite"/> <!--写到一个文件--> <staticLogFileName value="false"/> <!--单个文件大小。单位:KB|MB|GB--> <maximumFileSize value="200MB"/> <!--最多保留的文件数,设为"-1"则不限--> <maxSizeRollBackups value="-1"/> <!--日志格式--> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="时间:%date 描述:%message %n" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="INFO" /> <param name="LevelMax" value="INFO" /> </filter> </appender> <!-- 调试 Debug.log--> <appender name="DebugLog" type="log4net.Appender.RollingFileAppender"> <!--目录路径,可以是相对路径或绝对路径--> <param name="File" value="App_Data/Logs"/> <!--文件名,按日期生成文件夹--> <param name="DatePattern" value="/yyyy-MM-dd/'Debug.log'"/> <!--追加到文件--> <appendToFile value="true"/> <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]--> <rollingStyle value="Composite"/> <!--写到一个文件--> <staticLogFileName value="false"/> <!--单个文件大小。单位:KB|MB|GB--> <maximumFileSize value="200MB"/> <!--最多保留的文件数,设为"-1"则不限--> <maxSizeRollBackups value="-1"/> <!--日志格式--> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="时间:%date 描述:%message 异常:%exception %newline" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="DEBUG" /> <param name="LevelMax" value="DEBUG" /> </filter> </appender> </log4net> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> </configuration>
方法二:系统配置文件
需要配置相关的配置文件App.config或Web.config,普通应用的配置文件 为App.config,asp.net的配置文件为Web.config。
有关log的配置如下:
<configuration>
<configSections>
<!-- log4net的定义 -->
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<!-- Console部分log输出格式的设定 -->
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger %ndc - %message%newline" />
</layout>
</appender>
<!-- 日志文件部分log输出格式的设定 -->
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="具体的log文件路径名" />
<appendToFile value="true" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="1MB" />
<rollingStyle value="Size" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<header value="[Header] " />
<footer value="[Footer] " />
<ConversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
</layout>
</appender>
<!-- Setup the root category, add the appenders and set the default level -->
<root>
<level value="ALL" />
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="RollingLogFileAppender" />
</root>
</log4net>
</configuration>
第三步:添加引用到程序集
在Global.asax的Application_Start事件中加入初始化代码:
protected void Application_Start(object sender, EventArgs e) { log4net.Config.XmlConfigurator.Configure((new System.IO.FileInfo("log4net.config")); }
项目的AssemblyInfo.cs里面加上[assembly: log4net.Config.XmlConfigurator()],这样项目工程和log4net就 建立了关联。【其中app.config应当放在解决方案的根目录下!】
如果不放在跟目录下,或独立配置文件,应当用这种方式:(在WPF中测试失效)
[assembly:log4net.Config.XmlConfigurator(ConfigFileExtension=@"c:/app.config",Watch=true)]
第四步:实例演示
以下例子是先实例化Ilog,在Application_Error方法中写日志:
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); protected void Application_Error(Object sender, EventArgs e) { log.Info("/r/n客户机IP:"+ Request.UserHostAddress +"/r/n<BR>错误地址:"+ Request.Url, Server.GetLastError()); }
第五步、封装静态类LogHelper
LogHepler.cs代码
using System; using log4net; namespace XXXX.Services { /// <summary> /// 日志类 /// </summary> public abstract class LogHelper { //系统框架日志 private static ILog Logger => LogManager.GetLogger("MMISLogger"); //框架内部方法 #region 调试信息 /// <summary> /// 调试信息 /// </summary> /// <param name="message">描述信息</param> /// <param name="exception">异常信息</param> public static void Debug(object message, Exception exception = null) { Logger.Debug(message, exception); } public static void DebugFormat(string format, params object[] args) { Logger.DebugFormat(format, args); } public static void DebugFormat(Exception exception, string format, params object[] args) { Logger.DebugFormat(format, args, exception); } public static void DebugFormat(IFormatProvider formatProvider, string format, params object[] args) { Logger.DebugFormat(formatProvider, format, args); } public static void DebugFormat(Exception exception, IFormatProvider formatProvider, string format, params object[] args) { Logger.DebugFormat(formatProvider, format, args, exception); } #endregion #region 一般信息 /// <summary> /// 一般信息 /// </summary> /// <param name="message">描述信息</param> /// <param name="exception">异常信息</param> public static void Info(object message, Exception exception = null) { Logger.Info(message, exception); } public static void InfoFormat(string format, params object[] args) { Logger.InfoFormat(format, args); } public static void InfoFormat(Exception exception, string format, params object[] args) { Logger.InfoFormat(format, args, exception); } public static void InfoFormat(IFormatProvider formatProvider, string format, params object[] args) { Logger.InfoFormat(formatProvider, format, args); } public static void InfoFormat(Exception exception, IFormatProvider formatProvider, string format, params object[] args) { Logger.InfoFormat(formatProvider, format, args, exception); } #endregion #region 警告 /// <summary> /// 警告 /// </summary> /// <param name="message">描述信息</param> /// <param name="exception">异常信息</param> public static void Warn(object message, Exception exception = null) { Logger.Warn(message, exception); } public static void WarnFormat(string format, params object[] args) { Logger.WarnFormat(format, args); } public static void WarnFormat(Exception exception, string format, params object[] args) { Logger.WarnFormat(format, args, exception); } public static void WarnFormat(IFormatProvider formatProvider, string format, params object[] args) { Logger.WarnFormat(formatProvider, format, args); } public static void WarnFormat(Exception exception, IFormatProvider formatProvider, string format, params object[] args) { Logger.WarnFormat(formatProvider, format, args, exception); } #endregion #region 一般错误 /// <summary> /// 一般错误 /// </summary> /// <param name="message">描述信息</param> /// <param name="exception">异常信息</param> public static void Error(object message, Exception exception = null) { Logger.Error(message, exception); } public static void ErrorFormat(string format, params object[] args) { Logger.ErrorFormat(format, args); } public static void ErrorFormat(Exception exception, string format, params object[] args) { Logger.ErrorFormat(format, args, exception); } public static void ErrorFormat(IFormatProvider formatProvider, string format, params object[] args) { Logger.ErrorFormat(formatProvider, format, args); } public static void ErrorFormat(Exception exception, IFormatProvider formatProvider, string format, params object[] args) { Logger.ErrorFormat(formatProvider, format, args, exception); } #endregion #region 致命错误 /// <summary> /// 致命错误 /// </summary> /// <param name="message">描述信息</param> /// <param name="exception">异常信息</param> public static void Fatal(object message, Exception exception = null) { Logger.Fatal(message, exception); } public static void FatalFormat(string format, params object[] args) { Logger.FatalFormat(format, args); } public static void FatalFormat(Exception exception, string format, params object[] args) { Logger.FatalFormat(format, args, exception); } public static void FatalFormat(IFormatProvider formatProvider, string format, params object[] args) { Logger.FatalFormat(formatProvider, format, args); } public static void FatalFormat(Exception exception, IFormatProvider formatProvider, string format, params object[] args) { Logger.FatalFormat(formatProvider, format, args, exception); } #endregion } }
使用示例
//记录错误日志 LogHelper.Info("Info", new Exception("THIS IS HOME")); LogHelper.Warn("Warn", new Exception("THIS IS HOME")); LogHelper.Debug("Debug", new Exception("THIS IS HOME")); LogHelper.Error("error", new Exception("THIS IS HOME"));
使用log4net.config,写日志后,会自动创建当天日期的文件夹和四个不同类型的日志文件(具体根据配置生成)
官方文档:http://logging.apache.org/log4net/release/manual/introduction.html
同时推荐几篇文章:
Log4Net使用详解(续)
https://blog.csdn.net/zhoufoxcn/article/details/6029021
.NET环境下log处理解决方案(Log4Net)
https://blog.csdn.net/zyc21st/article/details/639820
log4net不输出日志的原因及解决方案
https://blog.csdn.net/sgmcumt/article/details/83021616?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control
DEBUG调试方法
在即时窗口,打印 ILog Logger,看看isXX属性是否true

浙公网安备 33010602011771号