log4net日志记录 轻松上手
log4net 简介
log4net是一个功能著名的开源日志记录组件。利用log4net可以方便地将日志信息记录到文件、控制台、Windows事件日志和数据库(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite)中。并且我们还可以记载控制要记载的日志级别,可以记载的日志类别包括:FATAL(致命错误)、ERROR(一般错误)、WARN(警告)、INFO(一般信息)、DEBUG(调试信息)。
步骤一:通过Nuget安装log4net
在菜单栏中选择工具->Nuget 包管理器->管理解决方案的Nuget 包管理器,在浏览中的搜索框中输入log4net进行安装
步骤二:新建log4net.config配置文件
将以下的内容全部覆盖到新建的配置文件中
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<root>
<level value="DEBUG" />
<!--Info消息记录-->
<appender-ref ref="InfoLogFileAppender"/>
<!--Debug消息记录-->
<appender-ref ref="DebugLogFileAppender"/>
<!--Error消息记录-->
<appender-ref ref="ErrorLogFileAppender"/>
</root>
<!--定义输出到文件中-->
<appender name="InfoLogFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="RollingStyle" value="Composite"/>
<file value="Logs\info\"/>
<param name="DatePattern" value="yyyyMM"\\"yyyyMMdd".log""/>
<appendToFile value="true"/>
<staticLogFileName value="false"/>
<param name="MaximumFileSize" value="10MB"/>
<param name="CountDirection" value="-1"/>
<maxSizeRollBackups value="1000"/>
<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"/>
<param name="Footer" value="-------------------------------------------------------------- \r\n"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="INFO" />
</filter>
<!--最小锁定模型以允许多个进程可以写入同一个文件-->
<param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
</appender>
<!--定义输出到文件中-->
<appender name="DebugLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--创建新文件的方式,可选为Size(按文件大小),Date(按日期),Once(每启动一次创建一个文件),
Composite(按日期及文件大小),默认为Composite-->
<param name="RollingStyle" value="Composite"/>
<!--Log文件路径,如果RollingStyle为Composite或Date,则这里设置为目录,文件名在DatePattern里设置,
其他则这里要有文件名。已经扩展支持虚拟目录-->
<file value="Logs\debug\"/>
<param name="DatePattern" value="yyyyMM"\\"yyyyMMdd".log""/>
<!--当文件存在时,是否在原文件上追加内容。-->
<appendToFile value="true"/>
<!--为true时,RollingStyler的date值将无效。且需要在file里指定文件名,所有日志都会记录在这个文件里。-->
<staticLogFileName value="false"/>
<!--当RollingStyle为Composite或Size,这里设置最大文件大小(可以KB,MB,GB为单位,默认为字节)-->
<param name="MaximumFileSize" value="10MB"/>
<!--当文件超过MaximumFileSize的大小时,如果要创建新的文件来存储日志,会根据CountDirection的值来重命名文件。
大于-1的值时,file里指定的文件名会依次加上.0,.1,.2递增。
个人理解就是log文件正序,倒序的问题,-1为倒序(最新消息在log文件名称最小的文件中),大于-1为正序(最新消息在log文件名称最大的文件中)-->
<param name="CountDirection" value="-1"/>
<!--最大Log文件备份数-->
<maxSizeRollBackups value="1000"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="记录时间:%date %n调试输出:%message %newline %n"/>
<param name="Footer" value="[Footer]\r\n"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="DEBUG" />
<param name="LevelMax" value="DEBUG" />
</filter>
<param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
</appender>
<!--定义输出到文件中-->
<appender name="ErrorLogFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="RollingStyle" value="Composite"/>
<file value="Logs\error\"/>
<param name="DatePattern" value="yyyyMM"\\"yyyyMMdd".log""/>
<appendToFile value="true"/>
<staticLogFileName value="false"/>
<param name="MaximumFileSize" value="1MB"/>
<param name="CountDirection" value="-1"/>
<maxSizeRollBackups value="1000"/>
<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"/>
<param name="Footer" value="-------------------------------------------------------------- \r\n"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="ERROR" />
<param name="LevelMax" value="ERROR" />
</filter>
<!--最小锁定模型以允许多个进程可以写入同一个文件-->
<param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
</appender>
</log4net>
</configuration>
步骤三:新建LogHelper静态类
/*
log4net默认关联的是应用程序的配置文件App.config(BS程序是Web.config),可以使用程序集自定义属性来进行设置。下面来介绍一下这个自定义属性:log4net.Config.XmlConifguratorAttribute。
XmlConfiguratorAttribute有3个属性:
ConfigFile: 配置文件的名字,文件路径相对于应用程序目录
(AppDomain.CurrentDomain.BaseDirectory)。ConfigFile属性不能和ConfigFileExtension属性一起使用。
ConfigFileExtension: 配置文件的扩展名,文件路径相对于应用程序的目录。ConfigFileExtension属性不能和ConfigFile属性一起使用。
Watch: 如果将Watch属性设置为true,就会监视配置文件。当配置文件发生变化的时候,就会重新加载。
如果ConfigFile和ConfigFileExtension都没有设置,则使用应用程序的配置文件App.config(Web.config)。
*/
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
namespace WebApplication4
{
public static class LogHelper
{
#region 方法 输出致命错误
/// <summary>
/// 输出致命错误
/// </summary>
/// <param name="t">发生错误的类的类型</param>
/// <param name="ex">错误信息</param>
public static void WriteErrorLog(Type t, Exception ex)
{
var log = log4net.LogManager.GetLogger(t);
log.Error("Error", ex);
}
#endregion
}
}
恭喜你成功配置log4net
把下面示例代码添加到你的启动程序中,当执行后,可以在解决方案目录下找到Logs文件夹
LogHelper.WriteErrorlLog(typeof(_Default), new Exception("模拟发生错误"));
后记:
在具体写日志时,一般可以这样理解日志等级:
FATAL(致命错误):记录系统中出现的能使用系统完全失去功能,服务停止,系统崩溃等使系统无法继续运行下去的错误。例如,数据库无法连接,系统出现死循环。
ERROR(一般错误):记录系统中出现的导致系统不稳定,部分功能出现混乱或部分功能失效一类的错误。例如,数据字段为空,数据操作不可完成,操作出现异常等。
WARN(警告):记录系统中不影响系统继续运行,但不符合系统运行正常条件,有可能引起系统错误的信息。例如,记录内容为空,数据内容不正确等。
INFO(一般信息):记录系统运行中应该让用户知道的基本信息。例如,服务开始运行,功能已经开户等。
DEBUG (调试信息):记录系统用于调试的一切信息,内容或者是一些关键数据内容的输出。
上一篇: 在保护模式下编写程序
下一篇: 日志篇-SLF4J快速上手