Asp.net2.0 配置log4net 具体方法
step1: 当然是下载了,具体地址http://logging.apache.org/log4net/download.html (正式版已发布)那就下载1.2.10.zip版 的吧,解压后得到net里的2.0的.
step2: 在你想要用日志的工程里添加引用即可.
step3: 在web.config里加入以下代码:
- <!--配置log4net-->
- <configSections>
- <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
- </configSections>
- <log4net>
- <!--日志记录器logger,可以有多个-->
- <logger name="AppLogger">
- <level value="INFO" />
- <appender-ref ref="LogFileAppender" />
- <appender-ref ref="ConsoleAppender" />
- </logger>
- <logger name="Form1">
- <level value="DEBUG" />
- <appender-ref ref="LogFileAppender" />
- </logger>
- <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
- <param name="File" value="App.txt" />
- <param name="AppendToFile" value="true" />
- <layout type="log4net.Layout.PatternLayout">
- <param name="Header" value="[Header]\r\n" />
- <param name="Footer" value="[Footer]\r\n" />
- <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] %X{auth} - %m%n" />
- </layout>
- <filter type="log4net.Filter.LevelRangeFilter">
- <param name="LevelMin" value="DEBUG" />
- <param name="LevelMax" value="FATAL" />
- </filter>
- </appender>
- <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
- <layout type="log4net.Layout.PatternLayout">
- <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] %X{auth} - %m%n" />
- </layout>
- </appender>
- </log4net>
- <!--结束配置log4net-->
对以上代码解释:
- 你可以直接将上面的文本拷贝到任何程序中使用,但是最好还是能够理解配置文件是怎样构成的。 只有当你需要在应用程序配置文件中使用log4net配置时,才需要在<configSection>标签中加入<section>配置节点入口。对于其他的单独文件,只有<log4net>标签内的文本才是必需的,这些标签的顺序并不是固定的。下面我们依次讲解各个标签内文本的含义:
- 3.1.1 <root>
- <root>
- <level value="WARN" />
- <appender-ref ref="LogFileAppender" />
- <appender-ref ref="ConsoleAppender" />
- </root>
- 在框架的体系里,所有的日志对象都是根日志(root logger)的后代。 因此如果一个日志对象没有在配置文件里显式定义,则框架使用根日志中定义的属性。在<root>标签里,可以定义level级别值和Appender的列表。如果没有定义LEVEL的值,则缺省为DEBUG。可以通过<appender-ref>标签定义日志对象使用的Appender对象。<appender-ref>声明了在其他地方定义的Appender对象的一个引用。在一个logger对象中的设置会覆盖根日志的设置。而对Appender属性来说,子日志对象则会继承父日志对象的Appender列表。这种缺省的行为方式也可以通过显式地设定<logger>标签的additivity属性为false而改变。
- <logger name="testApp.Logging" additivity="false">
- </logger>
- Additivity的值缺省是true.
- 3.1.2 <Logger>
- <logger name="testApp.Logging">
- <level value="DEBUG"/>
- </logger>
- <logger> 元素预定义了一个具体日志对象的设置。然后通过调用LogManager.GetLogger(“testAPP.Logging”)函数,你可以检索具有该名字的日志。如果LogManager.GetLogger(…)打开的不是预定义的日志对象,则该日志对象会继承根日志对象的属性。知道了这一点,我们可以说,其实<logger>标签并不是必须的。
- 3.1.3 <appender>
- <appender name="LogFileAppender"
- type="log4net.Appender.FileAppender" >
- <param name="File" value="log-file.txt" />
- <param name="AppendToFile" value="true" />
- <layout type="log4net.Layout.PatternLayout">
- <param name="Header" value="[Header]\r\n" />
- <param name="Footer" value="[Footer]\r\n"/>
- <param name="ConversionPattern"
- value="%d [%t] %-5p %c - %m%n"
- />
- </layout>
- <filter type="log4net.Filter.LevelRangeFilter">
- <param name="LevelMin" value="DEBUG" />
- <param name="LevelMax" value="WARN" />
- </filter>
- </appender>
- 在<root>标签或单个的<logger>标签里的Appender对象可以用<appender>标签定义。<appender>标签的基本形式如上面所示。它定义了appender的名字和类型。 另外比较重要的是<appender>标签内部的其他标签。不同的appender有不同的<param>标签。在这里,为了使用FileAppender,你需要一个文件名作为参数。另外还需要一个在<appender>标签内部定义一个Layout对象。Layout对象定义在它自己的<layout>标签内。<layout>标签的type属性定义了Layout的类型(在本例里是PatternLayout),同时也确定了需要提供的参数值。Header和Footer标签提供了一个日志会话(logging session)开始和结束时输出的文字。有关每种appender的具体配置的例子,可以在log4net\doc\manual\example-config-appender.html中得到。
- 3.1.4 log4net.Layout.PatternLayout中的转换模式(ConversionPattern)
- %m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息
- %n(new line):换行
- %d(datetime):输出当前语句运行的时刻
- %r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数
- %t(thread id):当前语句所在的线程ID
- %p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等
- %c(class):当前日志对象的名称,例如:
- 模式字符串为:%-10c -%m%n
- 代码为:
- ILog log=LogManager.GetLogger(“Exam.Log”);
- log.Debug(“Hello”);
- 则输出为下面的形式:
- Exam.Log - Hello
- %L:输出语句所在的行号
- %F:输出语句所在的文件名
- %-数字:表示该项的最小长度,如果不够,则用空格填充
- 例如,转换模式为%r [%t]%-5p %c - %m%n 的 PatternLayout 将生成类似于以下内容的输出:
- 176 [main] INFO org.foo.Bar - Located nearest gas station.
- 3.1.5 <filter>
- 最后,让我们看看在Appender元素里的<filter>标签。它定义了应用到Appender对象的过滤器。本例中,我们使用了LevelRangeFilter过滤器,它可以只记录LevelMin和LevelMax参数指定的日志级别之间的日志事件。可以在一个Appender上定义多个过滤器(Filter),这些过滤器将会按照它们定义的顺序对日志事件进行过滤。其他过滤器的有关信息可以在log4net的SDK文档中找到。
step4: 在程序中加入Global.asax文件在文件加入以下代码
- void Application_Start(object sender, EventArgs e)
- {
- // 在应用程序启动时运行的代码
- string path = string.Format(AppDomain.CurrentDomain.BaseDirectory + "{0}", "web.config");
- System.IO.FileInfo configFile = new System.IO.FileInfo(path);
- log4net.Config.XmlConfigurator.Configure(configFile);
- }
step5: 在应用的地方引用logger,测试你以上综合4步的结果
- //前提 引用空间
- using log4net;
- //一个按钮的事件
- protected void Button1_Click(object sender, EventArgs e)
- {
- ILog LOGGER = LogManager.GetLogger("AppLogger");
- //写入信息
- LOGGER.Info("测试信息");
- }
大功告成。。。。。哈
总结