log4net 使用笔记

摘要:
log4net框架中是使用log4net.Config.XmlConfigurator在程序集的级别上定义配置文件。Watchlog4net框架用这个属性来确定是否需要在运行时监视文件的改变。节点名称为:须为log4net,且大小写敏感。

一、Log4net特征

1、自定义日志输出级别

Log4net将日志分为五个级别优先级从高到低依次:FATAL > ERROR > WARN > INFO > DEBUG,此外还有ALL(允许所有的日志请求)和OFF(拒绝所有的日志请求)这两种特殊的级别。可以通过日志级别来控制日志是否输出。

如果你配置文件中定义的是INFO级别,程序中有三种日志记录方式

Log.Info(“日志内容”),Log.Warn(“日志内容”),Log.Debug(“日志内容”)

则Log.Info,Log.Debug都会输出日志,Log.Warn不会输出日志。

2、自定义日志输出方式

Log4net的日志输出方式很灵活,可以将日志输出至文本文件,控制台,邮件,Windows Event Log,数据库等等。对于写日志至文本文件还可以有如下非常灵活的配置。

a、按时间段打印日志,按月,按日 ,按时,按分等随你配置 b、按文件的大小 打印滚动日志,如每10M,100M一个日志文件,这样可以防止日志文件不至于过大,日志文件达到4,5G日后我们基本上就很难打开了。 c、指定日志大小,比如说指定500M,那么日志将只有一个且不会超出500M。

二、Log4net的安装

1、用户可以从 http://logging.apache.org/log4net/ 下载log4net的源代码。

2、解压软件包后,在解压的src目录下将log4net.sln载入Visual Studio .NET,编译后可以得到log4net.dll。

3、用户要在自己的程序里加入日志功能,只需将log4net.dll引入工程即可。

三、在程序中使用log4net

1、log4net配置文件与程序的关联

log4net的配置可以放在应用程序的默认配置文件中(app.config或web.config),也可以在自己指定的配置文件中。log4net框架中是使用log4net.Config.XmlConfigurator在程序集的级别上定义配置文件。

例如,找到当前项目的Assemblyinfo.cs文件添加下面一行,将与Web.config文件关联起来

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

Assemblyinfo.cs配置说明

ConfigFile

指出了我们的配置文件的路径及文件名,包括扩展名。

ConfigFileExtension

如果我们对被编译程序的程序集使用了不同的文件扩展名,那么我们需要定义这个属性,缺省的,程序集的配置文件扩展名为”config”。

Watch (Boolean属性)

log4net框架用这个属性来确定是否需要在运行时监视文件的改变。如果这个属性为true,那么FileSystemWatcher将会被用来监视文件的改变,重命名,删除等事件。

其中:ConfigFile和ConfigFileExtension属性不能同时使用,ConfigFile指出了配置文件的名字

四、log4net的标准配置文档示例(web.config)

XML 代码 复制
log4net 使用笔记第1张
<?xmlversion="1.0"encoding="utf-8" ?>
log4net 使用笔记第1张log4net 使用笔记第1张
<configuration>
log4net 使用笔记第1张log4net 使用笔记第1张
  <configSections>
log4net 使用笔记第1张log4net 使用笔记第1张
    <sectionname="log4net"
log4net 使用笔记第1张log4net 使用笔记第1张
             type="log4net.Config.Log4NetConfigurationSectionHandler" />
log4net 使用笔记第1张log4net 使用笔记第1张
  </configSections>
log4net 使用笔记第1张log4net 使用笔记第1张
  <log4net>
log4net 使用笔记第1张log4net 使用笔记第1张
    <root>
log4net 使用笔记第1张log4net 使用笔记第1张
      <levelvalue="WARN" />
log4net 使用笔记第1张log4net 使用笔记第1张
      <appender-refref="LogFileAppender" />
log4net 使用笔记第1张log4net 使用笔记第1张
      <appender-refref="ConsoleAppender" />
log4net 使用笔记第1张log4net 使用笔记第1张
    </root>
log4net 使用笔记第1张log4net 使用笔记第1张
    <loggername="testApp.Logging">
log4net 使用笔记第1张log4net 使用笔记第1张
      <levelvalue="DEBUG"/>
log4net 使用笔记第1张log4net 使用笔记第1张
    </logger>
log4net 使用笔记第1张log4net 使用笔记第1张
    <appendername="LogFileAppender"  type="log4net.Appender.FileAppender" >
log4net 使用笔记第1张log4net 使用笔记第1张
      <paramname="File"value="log-file.txt" />
log4net 使用笔记第1张log4net 使用笔记第1张
      <paramname="AppendToFile"value="true" />
log4net 使用笔记第1张log4net 使用笔记第1张
      <layouttype="log4net.Layout.PatternLayout">
log4net 使用笔记第1张log4net 使用笔记第1张
        <paramname="Header"value="[Header]&#13;&#10;"/>
log4net 使用笔记第1张log4net 使用笔记第1张
        <paramname="Footer"value="[Footer]&#13;&#10;"/>
log4net 使用笔记第1张log4net 使用笔记第1张
        <paramname="ConversionPattern"  value="%d [%t] %-5p %c[%x]  - %m%n" />
log4net 使用笔记第1张log4net 使用笔记第1张
      </layout>
log4net 使用笔记第1张log4net 使用笔记第1张
      <filtertype="log4net.Filter.LevelRangeFilter">
log4net 使用笔记第1张log4net 使用笔记第1张
        <paramname="LevelMin"value="DEBUG" />
log4net 使用笔记第1张log4net 使用笔记第1张
        <paramname="LevelMax"value="WARN" />
log4net 使用笔记第1张log4net 使用笔记第1张
      </filter>
log4net 使用笔记第1张log4net 使用笔记第1张
    </appender>
log4net 使用笔记第1张log4net 使用笔记第1张
    <appendername="ConsoleAppender"   type="log4net.Appender.ConsoleAppender" >
log4net 使用笔记第1张log4net 使用笔记第1张
      <layouttype="log4net.Layout.PatternLayout">
log4net 使用笔记第1张log4net 使用笔记第1张
        <paramname="ConversionPattern"  value="%d [%t] %-5p %c [%x] -%m%n" />
log4net 使用笔记第1张log4net 使用笔记第1张
      </layout>
log4net 使用笔记第1张log4net 使用笔记第1张
    </appender>
log4net 使用笔记第1张log4net 使用笔记第1张
  </log4net>
log4net 使用笔记第1张log4net 使用笔记第1张
</configuration>
log4net 使用笔记第1张

五、配置文件节点说明

1、在配置章节中,定义section节点。节点名称为:须为log4net,且大小写敏感。

<configSections>

<sectionname="log4net"

type="log4net.Config.Log4NetConfigurationSectionHandler"/>

</configSections>

2、root节点说明

(1)根logger,所有其它logger都默认继承它。root元素没有属性。

2)支持的子元素

appender-ref 0个或多个,要引用的appender的名字。

level最多一个。只有在这个级别或之上的事件才会被记录。

param 0个或多个,设置一些参数。

(3)在<root>标签里,可以定义level级别值和Appender的列表。

如果没有定义LEVEL的值,则缺省为DEBUG。可以通过<appender-ref>标签定义日志对象使用的Appender对象。<appender-ref>声明了在其他地方定义的Appender对象的一个引用。在一个logger对象中的设置会覆盖根日志的设置。而对Appender属性来说,子日志对象则会继承父日志对象的Appender列表。这种缺省的行为方式也可以通过显式地设定<logger>标签的additivity属性为false而改变。

3、Logger节点说明

(1)支持的属性name,Additivity两个属性

name必须的,logger的名称

additivity可选,取值是true或false,默认值是true。设置为false时将阻止父logger中的appender。

(2)支持的子元素

appender-ref 0个或多个,要引用的appender的名字。

evel最多一个。只有在这个级别或之上的事件才会被记录。

param 0个或多个,设置一些参数。

(3)<logger> 元素预定义了一个具体日志对象的设置

然后通过调用LogManager.GetLogger(“testAPP.Logging”)函数,你可以检索具有该名字的日志。如果LogManager.GetLogger(…)打开的不是预定义的日志对象,则该日志对象会继承根日志对象的属性。知道了这一点,我们可以说,其实<logger>标签并不是必须的。

4、Appender节点说明

(1)定义日志的输出方式,只能作为log4net的子元素。name属性必须唯一,type属性必须指定。支持name,type两个属性。

name必须的,Appender对象的名称

type必须的,Appender对象的输出类型

(2)支持的子元素

appender-ref 0个或多个,允许此appender引用其他appender,并不是所以appender类型都支持。

filter 0个或多个,定义此app使用的过滤器。

layout最多一个。定义appender使用的输出格式。

param 0个或多个,设置Appender类中对应的属性的值。

(3)在<root>标签或单个的<logger>标签里的Appender对象可以用<appender>标签定义

<appender>标签的基本形式如上面所示。它定义了appender的名字和类型。 另外比较重要的是<appender>标签内部的其他标签。不同的appender有不同的<param>标签。在这里,为了使用FileAppender,你需要一个文件名作为参数。另外还需要一个在<appender>标签内部定义一个Layout对象。Layout对象定义在它自己的<layout>标签内。<layout>标签的type属性定义了Layout的类型(在本例里是PatternLayout),同时也确定了需要提供的参数值。Header和Footer标签提供了一个日志会话(logging session)开始和结束时输出的文字。有关每种appender的具体配置的例子,可以在log4netdocmanualexample-config-appender.html中得到。

5、Filter节点说明

过滤器,只能作为<appender>的子元素。

支持的属性:

type必须的,Filter的类型

支持的子元素:param 0个或多个,设置一些参数。

6、Layout节点说明

布局,只能作为<appender>的子元素。

支持的属性:

type必须的,Layout的类型

支持的子元素:param 0个或多个。

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):当前日志对象的名称,例如:

%L:输出语句所在的行号

%F:输出语句所在的文件名

%-数字:表示该项的最小长度,如果不够,则用空格填充

例如

转换模式为%r [%t]%-5p %c - %m%n 的 PatternLayout 将生成类似于以下内容的输出:

176 [main] INFO org.foo.Bar - Located nearest gas station.

7、Param

<param>元素可以是如何元素的子元素。

支持的属性

name必须的,取值是父对象的参数名。

value可选的,value和type中,必须有一个属性被指定。value是一个能被转化为参数值的字符串。

type可选的,value和type中,必须有一个属性被指定。type是一个类型名,如果type不是在log4net程序集中定义的,就需要使用全名。

免责声明:文章转载自《log4net 使用笔记》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如何设置输出颜色-[FORMAT..COLOR..]使用Redis分布式锁处理并发,解决超卖问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

git config配置快捷命令

二、基本面 git的alias是通过配置文件进行定制的,这个配置文件能做的事情还有很多,远远超过这篇文档的主题。 git的全局配置文件一般叫做.gitconfig,当前仓库的配置文件是.git目录下的config文件。很明显,这俩配置文件的作用范围是不同的。 三、使用git alias 首先要修改配置文件 3.1 linux 我用的是ubuntu 12....

C# 操作自定义config文件

示例文件:DB.config 1.读取 1 //先实例化一个ExeConfigurationFileMap对象,把物理地址赋值到它的 ExeConfigFilename 属性中; 2 ExeConfigurationFileMap fileMap = newExeConfigurationFileMap(); 3 fileMap.ExeConfigFi...

npm run build报错 No PostCSS Config found in

在项目根目录新建postcss.config.js文件,并对postcss进行配置: module.exports ={ plugins: [ require('autoprefixer')//自动添加css前缀 ] };...

angular 依赖注入

依赖注入    依赖注入(DI)是一个经典的设计模式, 主要是用来处理组件如何获得依赖的问题。关于DI,推荐阅读Martin Flower的文章(http://martinfowler.com/articles/injection.html )。    Angular负责创建组件,解决它们之间的依赖关系,并按要求提供其他组件。 使用依赖注入   依赖注入在...

Linux源码Kconfig文件语法分析

Kconfig是我们进行内核配置的关键文件,用于生成menuconfig的界面并生成最终确定编译选项的.config文件。关于Kconfig文件的编写规则,在Documentation/kbuild/kconfig-language.txt有详尽的叙述。这里主要用实例进行语法分析。 config 确定了条目前面是否有选项,menuconfig界面中的条目中...

Software_programming_Config_HOCON

05:09:37 HOCON githubhttps://github.com/lightbend/config/blob/master/HOCON.md 相较于 XML, JSON, YAML 更强大和更人性化的配置文件格式。HOCON idea 可以从下载 HOCON 插件, 文件格式以 .conf 为后缀。如遇到IDEA 卡住,则重启 IDEA. &...