一、共享日志项目建立
-
首先,在解决方案中,新建一个类库项目中,命名为Log,新建一个配置文件,具体方法为右击项目->添加->新建项->应用程序配置文件
并将其命名为log4net.config。也可以直接将App.config赋值后更名为log4net.config。
-
(关键)右击该配置文件,属性->复制到输出目录->始终复制
完成后如下:
在Class1.cs(可自行命名)中对log4net进行封装,以便可以在其它项目中使用。
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
namespace Log
{
public static class LogHelper
{
static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
public static void WriteDebug(string message)
{
log.Debug(message);
}
public static void WriteError(string message)
{
log.Error(message);
}
}
}
在需要使用日志类的项目中引用上面的Log项目即可。
至此就可以使用相同的配置文件来配置log4net并在解决方案中共享了。
二、配置文件的参考
以下配置文件,将Debug和Error等级的日志分散到不同的文件夹,且以时间格式命名日志文件。可根据需要进行修改
注意:
日志的文件名的命名中不变的部分以单引号封装,如下面的log.txt部分
<datePattern value="yy\_MM\_dd\_'log.txt'"/>
配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<!--定义输出到文件中-->
<appender name="RollingLogDebugFileAppender" type="log4net.Appender.RollingFileAppender">
<!--定义文件存放位置-->
<file value="log\\Debug\\"/>
<appendToFile value="true"/>
<rollingStyle value="Date"/>
<datePattern value="yyyyMM\\yyyyMMdd'.txt'"/>
<staticLogFileName value="false"/>
<!--定义文件最大个数,超过按顺序删除-->
<param name="MaxSizeRollBackups" value="100"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<maximumFileSize value="10MB" />
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="Debug" />
<levelMax value="Debug" />
</filter>
<layout type="log4net.Layout.PatternLayout">
<!--每条日志末尾的文字说明-->
<!--输出格式-->
<!--样例:2008-03-26 13:42:32,111 [10] INFO Log4NetDemo.MainClass [(null)] - info-->
<conversionPattern value="%newline %n%date: %message%newline %n"/>
</layout>
</appender>
<appender name="RollingLogErrorFileAppender" type="log4net.Appender.RollingFileAppender">
<!--定义文件存放位置-->
<file value="log\\Error\\"/>
<appendToFile value="true"/>
<rollingStyle value="Date"/>
<datePattern value="yyyyMM\\yyyyMMdd'.txt'"/>
<staticLogFileName value="false"/>
<!--定义文件最大个数,超过按顺序删除-->
<param name="MaxSizeRollBackups" value="100"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<maximumFileSize value="10MB" />
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="Error" />
<levelMax value="Error" />
</filter>
<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="ALL"/>
<!--文件形式记录日志-->
<appender-ref ref="RollingLogErrorFileAppender"/>
<appender-ref ref="RollingLogDebugFileAppender"/>
</root>
</log4net>
</configuration>
三、使用log4net的一般使用步骤
- 配置log4net配置文件
具体参考二
- 程序集特性设置
在每个要使用日志的命名空间上加上
[assembly: log4net.Config.XmlConfigurator(ConfigFile ="log4net.config",Watch = true)]
- 创建Logger
在Logger中,log4net提供了一个名为LogManager的类给我们用于获取或者创建一个Logger。LogManager提供了方法GetLogger(),该方法接收一个string类型的参数,用于指定Logger的名称:
log4net.ILog log = log4net.LogManager.GetLogger("Logger_Name");
当指定名称的Logger不存在时,LogManager将自动创建一个。通常情况下,都是使用Logger所在类的名称来作为Logger的名称,即GetLogger方法的参数可以是typeof(ClassName)。也可以使用如下的方法来传递该参数:
log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
尽管上面的代码比typeof(ClassName)要长的多,但是这样做可以在任何一个类中使用相同的方法传递参数,从而减少出错的机率。
创建了logger后,就可以使用log来记录日志了
log.Debug("debug info");//记录Debug级别的日志
log.Error("error info");//记录Error级别的日志