在项目中,经常需要记录日志,复杂一点想事物日志,操作日志,错误日志。在实际项目中,我能想到的目前有几点:
- 产量日志——
output log
,诸如每台机器在生产中,每日的产量或者累计产量情况
- 错误日志——
error log
,在实际项目中,诸如抛料等错误的情况 - 操作日志——
operation log
,记录在项目运行后,登陆账号,连接客户端,关键参数被修改的情况
- 错误日志——
这里由于需要记录多种日志,并且输出到多个文件中,采用的多logger配置响应的appender。
也可以采用多个appender
配置不同的文件输出,通过Filter过滤
操作步骤:
1 加入dll
引用【log4net.dll
】
2 在项目中添加一个【Application Configration File
】,命名为【log4net.config
】;或者直接拷贝配置好的模板
3 创建使用
创建一个产量日志,利用logger
名字获取lLog
string path = Application.StartupPath;
var logCfg = new FileInfo(path.Substring(0, path.Length-9)+ "\\log4net.config");
XmlConfigurator.Configure(logCfg);
ILog output = LogManager.GetLogger("output Logger");
详解配置:
下面是大概的配置。一个【logger】添加多个【appender】,【appender】配置日志输出路径,格式,文件名等等信息。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<log4net>
<root>
...
</root>
<logger name="debug Logger">
<level value="ALL" />
<appender-ref ref="debug"/>
</logger>
<appender name="debug" type="log4net.Appender.RollingFileAppender">
...
</appender>
</log4net>
</configuration>
详解【appender】
<appender name="debug" type="log4net.Appender.RollingFileAppender, log4net">
<!--日志文件名路径和开头-->
<file value="..\bin\debug_"/>
<!--使用动态的名字-->
<staticLogFileName value="false"/>
<!--按日期更换名字-->
<RollingStyle value="Date"/>
<!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
<datePattern value="yyyy-MM-dd'.log'"/>
<!--多线程时采用最小锁定,防止多线程时不能写Log,即线程非安全-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<!--是否追加到文件,默认为true,通常无需设置-->
<appendToFile value="true"/>
<!--日志格式-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%t]%-5p %c - %m%n"/>
</layout>
</appender>
详解【logger】
<logger name="debug Logger">
<!--如果没有定义LEVEL的值,则缺省为DEBUG-->
<level value="ALL" />
<!--将日志以回滚文件的形式写到文件中-->
<appender-ref ref="debug"/>
</logger>
关于日志级别
控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF
比如:定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录
ConversionPattern 解释
%m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息
%n(new line):換行
%d(datetime):输出当前语句运行的时刻
%r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数
%t(thread id):当前语句所在的线程ID
%p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等
%c(class):当前日志对象的名称
%L:输出语句所在的行号
%F:输出语句所在的文件名
%-数字:表示该项的最小长度,如果不够,科技网,则用空格填充
另一种方法
在【root】节点下配置多个【appender-ref】
然后配置响应的【appender】,这里不同的【appender】,配置文件名,文件路径,文件大小,文件产生方式,文件添加方式等等信息不同
…
为了使不同的日志信息输出到不同的文件中,我们使用过滤器【 filter】,过滤某种特定日志,输出到绑定到该【appender】中