log4net配置

      log4net是一款第三方日志框架,引用log4net的dll,再配置些基本参数即可,帮助程序员把日志信息输出到各种不同的目标,常见的有文本、数据库、windows日志、邮件、内存缓冲区等目标

 

在使用log4net之前必须要先把log4net.dll文件加到文件的根目录下面,再添加log4net.dll引用(注意log4net与.Net Framework的版本号)

 

log4net配置文件:

<?xml version="1.0"?>
<configuration>
<!--
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
-->
<configSections>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<!--站点日志配置部分-->
<log4net>
<root>
<!--控制级别,由低到高:ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
<!--比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录-->
<!--如果没有定义LEVEL的值,则缺省为DEBUG-->
<level value="ALL"/>
<appender-ref ref="ConsoleAppender"/>
<appender-ref ref="RollingFileAppender"/>
</root>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] - %m%n"/>
</layout>
</appender>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<!--日志文件路径-->
<param name="File" value="D:\项目相关文件\KnowledgePointTest\KnowledgePointTest\Log\"/>
<!--多线程时采用最小锁-->
<lockingModel type="log4net.Appender.FileAppender+MinimaILock"/>
<!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
<datePattern value="yyyy-MM-dd&quot;.log&quot;"/>
<!--是否追加到文件,默认为true,通常无需设置-->
<param name="AppendToFile" value="true"/>
<!--创建新文件的方式,这种情况下每天只有一个日志-->
<!--<param name="RollingStyle" value="Date" />-->
<!--创建新文件的方式按文件大小-->
<!--<param name="RollingStyle" value="Size" />-->
<!--创建新文件的方式,每启动一次创建一个文件-->
<!--<param name="RollingStyle" value="Once" />-->
<!--创建新文件方式按日期及文件大小,默认为Composite-->
<param name="RollingStyle" value="Composite" />
<!--每天记录的日志文件个数,与maximumFileSize配合使用-->
<param name="MaxSizeRollBackups" value="10"/>
<!--每个日志文件的最大大小-->
<!--可用的单位:KB|MB|GB-->
<!--不要使用小数,否则会一直写入当前日志-->
<maximumFileSize value="2MB"/>
<!--日志格式-->

<!--StaticLogFileName:True/false,默认为true。为true时,RollingStyle的date值将无效。且为true时,需要在file里指定文件名,所有日志都会记录在这个文件里。-->
<param name="StaticLogFileName" value="false"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p - %m %c[line %L]%n"/>
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
</layout>
</appender>
</log4net>
</configuration>

 

后台代码:

 

web项目:

在AssemblyInfo.cs文件中加一句话:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

在.cs文件:

public partial class WebForm1 : System.Web.UI.Page
{
private static readonly log4net.ILog logger = log4net.LogManager.GetLogger("WebForm1");
protected void Page_Load(object sender, EventArgs e)
{
logger.Info("测试Log4Net日志是否写入");
}
}

运行结果:

2016-07-21 15:48:33,440 [7]INFO  WebForm1 - 测试Log4Net日志是否写入

 

控制台程序:

注意:(1)配置文件的名称一定为"项目名称.exe.config"(2)配置文件必须放在bin/Debug文件下

在.cs文件:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using log4net;
using log4net.Appender;
using log4net.Config;
using System.Configuration;

[assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
//记录错误日志
log.Error("error", new Exception("发生了一个异常"));
//记录严重错误
log.Fatal("fatal", new Exception("发生了一个致命错误"));
//记录一般信息
log.Info("info");
//记录调试信息
log.Debug("debug");
//记录警告信息
log.Warn("warn");
Console.WriteLine("日志记录完毕。");
Console.Read();
}
}
}

运行结果:

2016-07-21 17:11:31,656 [9] ERROR ConsoleApplication1.Program [(null)] - error
System.Exception: 发生了一个异常
2016-07-21 17:11:31,686 [9] FATAL ConsoleApplication1.Program [(null)] - fatal
System.Exception: 发生了一个致命错误
2016-07-21 17:11:31,686 [9] INFO ConsoleApplication1.Program [(null)] - info
2016-07-21 17:11:31,686 [9] DEBUG ConsoleApplication1.Program [(null)] - debug
2016-07-21 17:11:31,696 [9] WARN ConsoleApplication1.Program [(null)] - warn

 

ConversionPattern的value的注解:

%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:输出语句所在的文件名 
%-数字:表示该项的最小长度,如果不够,则用空格填充

posted @ 2016-07-21 17:24  Zbu  阅读(192)  评论(0编辑  收藏  举报