Log4net配置与使用简要说明
log4net详细配置:
http://logging.apache.org/log4net/
本文描述如有错误,以官网的说明为准;p
一:先来看看log4net中的几个概念:
1. log4net继承机制
log4net通过logger的名字与"."符号来体现继承层次,类似于c#的命名空间,例如:
var loggerA=LogManager.GetLogger("a");
var loggerB=LogManager.GetLogger("a.b");
那么,loggerB继承了loggerA,如果没有为loggerB指定appender或者level,将会使用loggerB的appender或者level. by the way,另一个获取logger的方法:GetLogger(typeof(SomeClass))会新建一个名为"SomeClass"的logger
2. appender
appender:负责将log写入何处。log4net中内置了很多种appnder:
FileAppender:将log写入文件中。
RollingFileAppender:将log写入到文件中,并可以按某些条件(例如按日期或者按文件大小)来划分不同文件,例如希望每天一个log文件,或者每个文件1M等等。
AdoNetAppender:将log通过ado.net写入到数据库。
ConsoleAppender:将log输出到console中。
log4net中内置了非常多的appender,详细请参考:
http://logging.apache.org/log4net/release/manual/introduction.html
3. Level
level是指日志级别,日志级别从低到高分为:
ALL
DEBUG --调试
INFO --信息
WARN --警告
ERROR --错误
FATAL --致命
OFF
一个logger只会记录级别比这个logger设定的级别要大的log,例如,一个logger的级别为ERROR(如何设定logger的日志级别会在下面提及),当 logger.Info("this's a log of info level")时,log将不会被记录,因为logger以Info()方法记录该log,意味着该log的级别是INFO,但logger的级别是ERROR,大于INFO,所以不会记录该log。但logger.Error("this's a log of error level")或者logger.Fatal("this's a log of fatal level")时,则会记录该log。
4. Filter
filter代表appender的过滤器,可以设置appender以某种方式过滤(不记录)日志。例如,LevelMatchFilter用于设定只记录某个级别的日志,StringMatchFilter用于设定只记录日志里包含某些字眼的日志。
如何设置Filter将会在下面提及,但更多的Filter用法请参考:http://logging.apache.org/log4net/release/manual/configuration.html
5. Layout
layout用于设置日志的排版格式。(这个通常用默认的,比较少自己配置,不懂~ 具体请看:http://logging.apache.org/log4net/release/manual/configuration.html)
二: 如何配置log4net
log4net支持在代码中设定logger(appender,level,filter等),但推荐通过配置文件来进行配置。
配置文件的方式也分为2种:
1.在项目的配置文件中(web.config,app.config)中添加配置节来实现
2.指定一个独立的配置文件的方式来配置。
在项目配置文件中进行配置和使用步骤:
a.先在项目配置文件中定义一个配置节:
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
b.然后在项目配置文件中添加"log4net"配置节:
<log4net>
<appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log\\LogError\\" />
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="100" />
<param name="ConversionPattern" value="%n异常时间:%d [%t] %n异常级别:%-5p %n异 常 类:%c [%x] %n%m %n " />
</layout>
</appender>
<root>
<level value="ERROR" />
<appender-ref ref="ErrorAppender" />
</root>
</log4net>
c.调用 XmlConfigurator.Configure()方法启用配置,或者使用[assembly: log4net.Config.XmlConfigurator()] 特性来启用配置(log4net推荐使用程序集特性的方式来进行配置。只需要在项目的Properties/AssemblyInfo.cs中添加该程序集特性即可)
指定一个独立的配置文件步骤:
a.在项目根目录中(根目录是默认位置,但可以指定其他位置,这里不作说明;p)新建一个任意文件名的xml文件,例如"log4net.config"。
b.在该xml文件中进行配置,xml文件的内容和上一种配置方式的log4net配置节一样,只是单独放到一个xml文件中而已。
c.调用XmlConfigurator.ConfigureAndWatch()方法启用配置,或者使用[assembly: log4net.Config.XmlConfigurator()] 特性来启用配置。
三:配置文件大概解释(只是常用的,大概的描述,具体的请参考官网)
<log4net>
<appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log\\LogError\\" /> <!--基于应用的根目录-->
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="100" />
<param name="MaxFileSize" value="10240" />
<param name="StaticLogFileName" value="false" />
<param name="DatePattern" value="yyyy-MM-dd.log" /><!--日志文件的风格,例如这个就是'2017-02-21.log'-->
<param name="RollingStyle" value="Date" />
<param name="Encoding" value="UTF-8" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%n异常时间:%d [%t] %n异常级别:%-5p %n异 常 类:%c [%x] %n%m %n " /><!--日志内容的显示排版风格,但不好意思,各个参数我也没去研究是什么意思,我自己都是用惯这样的排版-->
</layout>
</appender>
<appender name="MyConsoleAppender" type="log4net.Appender.ConsoleAppender" ><!--这里定义一个名叫"MyConsoleAppender"的,类型为ConsoleAppender的appender,可以被下边的logger所使用-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
</layout>
<filter type="log4net.Filter.StringMatchFilter"><!--过滤器,匹配包含某些字符的log-->
<stringToMatch value="stringToMatch" />
</filter>
</appender>
<root><!--设定log4net继承层次中的根logger,相似于c#中的object,所有的logger会继承root的配置-->
<level value="INFO" />
<appender-ref ref="ConsoleAppender" /><!--指定根logger默认使用"MyConsoleAppender"-->
</root>
<logger name="SomeLoggerFoo"><!--未某个具体名字的logger进行配置,例如在代码中 LogManager.GetLogger("SomeLoggerFoo"),那么该logger就会使用这个配置-->
<level value="INFO" />
<appender-ref ref="ConsoleAppender" /> <!--指定使用哪个appnder-->
</logger>
<logger name="myErrorAppender">
<level value="ERROR" />
<appender-ref ref="ErrorAppender" />
</logger>
</log4net>
以上是log4net比较粗略的配置和使用说明,如果需要更详细的信息,请参考log4net官网:
http://logging.apache.org/log4net/
水平有限难免有误敬请指正
Log4net配置与使用简要说明的更多相关文章
- Common.Logging log4net Common.Logging.Log4Net 配置
1.log4net 单独配置 log4net支持多种格式的日志输出,我这里只配置输出到本地的txt文件这种格式. <log4net> <root> <appender-r ...
- Log4Net 配置StmpAppender
目录 Log4Net 配置StmpAppender 1 1.前言 1 2.详细配置 1 1.StmpAppender配置 1 2.Root 配置 2 3.更多选项 ...
- C# Log4Net配置
Log4Net是用来记录日志的,可以将程序运行过程中的信息输出到一些地方(文件.数据库.EventLog等),日志就是程序的黑匣子,可以通过日志查看系统的运行过程,从而发现系统的问题.日志的作用:将运 ...
- MVC Log4Net 配置
1.引用log4net.dll 2.在项目根目录下增加log4.config文件 <?xml version="1.0"?> <configuration> ...
- ASP.NET MVC学习之Log4Net配置(日志记录)
Log4Net配置笔记---- 首先,添加对log4net.dll的引用. 在Web.config文件下的Configuration节点下添加Log4Net的配置信息: <!--Log4Net配 ...
- C# 日志系统 log4net 配置及使用
1.引用Dll 版本是:1.2.10.0,下载Dll 2.Web.config文件配置 <?xml version="1.0" encoding="utf-8&qu ...
- JWT+Log4net配置与使用
Log4net的优点 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.程序运行过 ...
- log Log4NET配置
Log4Net是用来记录日志的,可以将程序运行过程中的信息输出到一些地方(文件.数据库.EventLog等),日志就是程序的黑匣子,可以通过 日志查看系统的运行过程,从而发现系统的问题.日志的作用:将 ...
- NHibernate的调试技巧和Log4Net配置
1.查看nhibernate写在控制台里的sql语句 在配置文件中有这么个选项,假如把它设置为true,nhibernate会把执行的sql显示在控制台上. <property name=&qu ...
随机推荐
- 微信小程序问题2:未配置
app.json 中未配置当前页面 pages/swipertest/swipertest 请检查后重试.console.error(`PAGE DEFINE ERRORapp.json 中未配置,当 ...
- Tsinsen-1487:分配游戏【树状数组】
首先一定要看到x + y + z = N这个条件,没看到就世界再见了. 赢的人得分需要大于等于2,那么无非就是 (x, y), (x, z), (y, z), (x, y, z) 大于其他的点.但是考 ...
- Android与JNI(三) ---- c++调用java(转载)
源码下载:JniDemo JNI就是Java Native Interface, 即可以实现Java调用本地库, 也可以实现C/C++调用Java代码, 从而实现了两种语言的互通, 可以让我们更加灵活 ...
- 为什么建立TCP连接需要三次握手,为什么断开TCP连接需要四次握手,TIME_WAIT状态的意义
为什么建立TCP连接需要三次握手? 原因:为了应对网络中存在的延迟的重复数组的问题 例子: 假设client发起连接的连接请求报文段在网络中没有丢失,而是在某个网络节点长时间滞留了,导致延迟到达ser ...
- 递归添加 另一个ds 里的DataRow 时 报错:该行已经属于另一个表。
public void create_tree(DataSet ds, int parentid) { DataSet newds = new DataSet(); ...
- 因子分析&主成分分析
因子分析和主成分分析的异同点: 1.主成分分析仅仅是一种数据变换而不假设数据矩阵有什么样的结构形式 因子分析假定数据有特定的模型,而且齐总的因子满足特定的条件 2.因子分析和主成分分析都是从相关矩阵出 ...
- 【python之路12】三元运算符(if)
1.三元运算符条件语句 普通if条件是这样写的: n = 1 if n > 0: st = '大于0' else: st = '小于等于0' print(st) 三元运算符的写法: n = 1 ...
- js原生设计模式——3简单工厂模式\简单工厂模式封装简单对象
1.Factory基本写法 <!DOCTYPE html><html lang="en"><head> <meta charset= ...
- [ Android 五种数据存储方式之一 ] —— SharedPreferences存储数据
SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数. 主要是保存一些常用的配置比如窗口状态,一般在Activity中 重载窗口状态onSaveInstanceS ...
- word中利用宏替换标点标点全角与半角
Alt+F11,然后插入-模块: 复制下面代码到编辑窗口: Sub 半角标点符号转换为全角标点符号() '中英互译文档中将中文段落中的英文标点符号替换为中文标点符号 Dim i As Paragrap ...