log4net的简单使用之二_log4net应用

  看了log4net的简单使用之一_log4net介绍 大家对log4net组件应该有了大概的了解 , 下面再近一步介绍其在项目中如何应用。

1Logger

所有的记录器都必须实现 ILog 接口,该接口提供日志记录所需的大量方法。

public interface ILog : ILoggerWrapper

{

 void Debug(...);

 void Error(...);

 void Fatal(...);

 void Info(...);

 void Warn(...);

 bool IsDebugEnabled { get; }

 bool IsErrorEnabled { get; }

 bool IsFatalEnabled { get; }

 bool IsInfoEnabled { get; }

 bool IsWarnEnabled { get; }

 

}

通常情况下,我们通过 LogManager.GetLogger() 来获取一个记录器。LogManager 内部维护一个 hashtable,保存新创建 Logger 引用,下次需要时直接从 hashtable 获取其实例。

ILog log = LogManager.GetLogger(this.GetType());

log.Debug("aaaaaaaaaaaaaaa");

所有 Logger 的参数设置都直接或间接继承自 root ,其继承关系类似 namespace 。比如,名为 "MyLogger.X.Y" 参数设置继承自 "MyLogger.X" 。当我们创建 "MyLooger.X.Y" 记录器时,会在配置文件找该名称的记录器设置,如果没找到,则按继承关系向上查找,直到 root 。因此,在创建 Logger 时,我们通常使用类型名称做为记录器的名字,缺省情况下,它会使用 root 或某一个父配置,但在需要的时候,我们随时可以为具体的类型添加一个更加 " 详细 " 的配置。
 1 <? xml version = " 1.0 "  encoding = " utf-8 "   ?>  
 2 < log4net >
 3    < appender name = " Console "  type = " log4net.Appender.ConsoleAppender " >
 4      < layout type = " log4net.Layout.PatternLayout " >
 5        < conversionPattern value = " %5level [%thread] (%file:%line) - %message%newline "   />
 6      </ layout >
 7    </ appender >
 8
 9    < logger name = " Learn.Library.Log4netTest " >
10      < level value = " ALL "   />
11    </ logger >
12
13    < root >
14      < level value = " OFF "   />
15      < appender - ref   ref = " Console "   />
16    </ root >
17 </ log4net >
18

 

"appender-ref" 参数用于绑定一个或多个具体的 Appender


 1 <? xml version = " 1.0 "  encoding = " utf-8 "   ?>
 2 < log4net >
 3    < appender name = " Console "  type = " log4net.Appender.ConsoleAppender " >
 4    </ appender >
 5
 6    < appender name = " RollingFile "  type = " log4net.Appender.RollingFileAppender " >
 7    </ appender >
 8
 9    < root >
10      < level value = " DEBUG "   />
11      < appender - ref   ref = " Console "   />
12      < appender - ref   ref = " RollingFile "   />
13    </ root >
14 </ log4net >
15

  2 Appender / Layout

Log4net 提供了大量的 Appender,最常用的包括 AdoNetAppender、AspNetTraceAppender、ConsoleAppender、FileAppender、OutputDebugStringAppender。每种 Appender 都有特定一些参数,使用时直接从《Log4net 手册》的示例中拷贝过去,就OK了。(代码摘自 Log4net 手册)

(1) AspNetTraceAppender


1 < appender name = " AspNetTraceAppender "  type = " log4net.Appender.AspNetTraceAppender "   >
2    < layout type = " log4net.Layout.PatternLayout " >
3      < conversionPattern value = " %date [%thread] %-5level %logger [%property{NDC}] - %message%newline "   />
4    </ layout >
5 </ appender >
6
(2) ConsoleAppender


1 < appender name = " ConsoleAppender "  type = " log4net.Appender.ConsoleAppender " >
2    < layout type = " log4net.Layout.PatternLayout " >
3      < conversionPattern value = " %date [%thread] %-5level %logger [%property{NDC}] - %message%newline "   />
4    </ layout >
5 </ appender >
6
(3) FileAppender
1 < appender name = " FileAppender "  type = " log4net.Appender.FileAppender " >
2    < file value = " log-file.txt "   />
3    < appendToFile value = " true "   />
4    < layout type = " log4net.Layout.PatternLayout " >
5      < conversionPattern value = " %date [%thread] %-5level %logger [%property{NDC}] - %message%newline "   />
6    </ layout >
7 </ appender >
8
 

有关 Layout 详细信息,请参考 Log4net 相关文档,本文不做详述。

3. Configuration

Log4net 的配置方式十分灵活,即可以写到应用程序配置文件中,也可以使用独立配置文件。同时它还提供了监测配置文件变化的功能,这样我们随时可以调整配置,而无须重启应用程序。

(1) 使用 app.config / web.config

配置app.config / web.config文件

  1 <? xml version = " 1.0 "  encoding = " utf-8 " ?>
  2 <!--  
  3     注意: 除了手动编辑此文件以外,您还可以使用 
  4     Web 管理工具来配置应用程序的设置。可以使用 Visual Studio 中的
  5      “网站” -> “Asp.Net 配置”选项。
  6     设置和注释的完整列表在 
  7     machine.config.comments 中,该文件通常位于 
  8     \Windows\Microsoft.Net\Framework\v2.x\Config 中
  9 -->
 10 < configuration >
 11    < configSections >
 12      < section name = " log4net "  type = " log4net.Config.Log4NetConfigurationSectionHandler,log4net "   />
 13    </ configSections >
 14    < appSettings />
 15    < connectionStrings />
 16    < log4net >
 17      < root >
 18        < level value = " ALL "   />
 19        < appender - ref   ref = " LogFileAppender "   />
 20        < appender - ref   ref = " RollingFileAppender "   />
 21        < appender - ref   ref = " AdoNetAppender_SqlServer "   />
 22      </ root >
 23      <!--
 24 写入文件中 -->
 25      < appender name = " LogFileAppender "  type = " log4net.Appender.FileAppender " >
 26        < file value = " D:\log-file1.txt "   />
 27        <!--  Example  using  environment variables  in   params   -->
 28        <!--   < file value = " ${TMP}\log-file.txt "   />   -->
 29        <!--< sppendToFile value = " true "   />-->
 30        <!--  An alternate output encoding can be specified  -->
 31        <!--   < encoding value = " unicodeFFFE "   />   -->
 32        < layout type = " log4net.Layout.PatternLayout " >
 33          <!--< footer value = " [Footer] Test By Ring1981  "   />-->
 34          < conversionPattern value = " %date [%thread] %-5level %logger [%ndc] &lt;%property{auth}&gt; - %message%newline "   />
 35        </ layout >
 36        <!--  Alternate layout  using  XML            
 37              < layout type = " log4net.Layout.XMLLayout "   />   -->
 38      </ appender >
 39
 40      <!--  将日志以回滚文件的形式写到文件中
 41 为做测试,我把文件大小设置为1K,大于它,就重新生成文档
 42 -->
 43      < appender name = " RollingFileAppender "  type = " log4net.Appender.RollingFileAppender "  Threshold = " Error "   >
 44        < file value = " log.txt "   />
 45        < appendToFile value = " true "   />
 46        < rollingStyle value = " Size "   />
 47        < maxSizeRollBackups value = " 10 "   />
 48        < maximumFileSize value = " 1KB "   />
 49        < staticLogFileName value = " true "   />
 50        < layout type = " log4net.Layout.PatternLayout " >
 51          < conversionPattern value = " %date [%thread] %-5level %logger [%property{NDC}] - %message%newline "   />
 52        </ layout >
 53      </ appender >
 54
 55
 56      <!--  将日志记录到数据库中。采用存储过程两种方式
 57      备注:也可采用SQL语句的方式,主要就是commandType, commandText属性设置不同,请
 58         参见log4net官方文档
 59   -->
 60      < appender name = " AdoNetAppender_SqlServer "  type = " log4net.Appender.AdoNetAppender "  Threshold = " Fatal "   >
 61        < bufferSize value = " 0 "   />
 62        < connectionType value = " System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 "   />
 63        < connectionString value = " data source=.;initial catalog=aigoshop;integrated security=false;persist security info=True;User ID=sa;Password= "   />
 64        < commandType value = " StoredProcedure "   />
 65        < commandText value = " WriteLog "   />
 66        < parameter >
 67          < parameterName value = " @log_date "   />
 68          < dbType value = " DateTime "   />
 69          < layout type = " log4net.Layout.PatternLayout "  value = " %date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff} "   />
 70        </ parameter >
 71        < parameter >
 72          < parameterName value = " @thread "   />
 73          < dbType value = " String "   />
 74          < size value = " 255 "   />
 75          < layout type = " log4net.Layout.PatternLayout "  value = " %thread "   />
 76        </ parameter >
 77        < parameter >
 78          < parameterName value = " @log_level "   />
 79          < dbType value = " String "   />
 80          < size value = " 20 "   />
 81          < layout type = " log4net.Layout.PatternLayout "  value = " %level "   />
 82        </ parameter >
 83        < parameter >
 84          < parameterName value = " @logger "   />
 85          < dbType value = " String "   />
 86          < size value = " 255 "   />
 87          < layout type = " log4net.Layout.PatternLayout "  value = " %logger "   />
 88        </ parameter >
 89        < parameter >
 90          < parameterName value = " @message "   />
 91          < dbType value = " String "   />
 92          < size value = " 4000 "   />
 93          < layout type = " log4net.Layout.PatternLayout "  value = " %message "   />
 94        </ parameter >
 95      </ appender >
 96
 97
 98    </ log4net >
 99    < system.web >
100
101      < compilation debug = " false "   />
102    
103      < authentication mode = " Windows "   />
104    
105    </ system.web >
106 </ configuration >
107
 

使用代码初始化配置。

log4net.Config.XmlConfigurator.Configure();

 

(2) 使用自定义配置文件

test.log4net

 1 <? xml version = " 1.0 "  encoding = " utf-8 "   ?>  
 2 < log4net >
 3    < appender name = " Console "  type = " log4net.Appender.ConsoleAppender " >
 4      < layout type = " log4net.Layout.PatternLayout " >
 5        < conversionPattern value = " %5level [%thread] (%file:%line) - %message%newline "   />
 6      </ layout >
 7    </ appender >
 8   
 9    < root >
10      < level value = " DEBUG "   />
11      < appender - ref   ref = " Console "   />
12    </ root >
13 </ log4net >
14
 

使用代码初始化配置。

log4net.Config.XmlConfigurator.Configure(new FileInfo("test.log4net"));

使用 XmlConfigurator.ConfigureAndWatch() 方法除了初始化配置外,还会监测配置文件的变化,一旦发生修改,将自动刷新配置。

(3) XmlConfiguratorAttribute

我们还可以使用 XmlConfiguratorAttribute 代替 XmlConfigurator.Config()/ConfigureAndWatch()ConfiguratorAttribute 用于定义与 Assembly 相关联的配置文件名。

方式1: 关联到 test.log4net,并监测变化。

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

方式2: 关联到 test.exe.log4net ( test.dll.log4net,文件名前缀为当前程序集名称),并监测变化。

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


4.
应用log4netDemo下载



备注:


CREATE   TABLE   [ dbo ] . [ Log ]  (
    
[ ID ]   [ int ]   IDENTITY  ( 1 1 NOT   NULL  ,
    
[ Date ]   [ datetime ]   NOT   NULL  ,
    
[ Thread ]   [ varchar ]  ( 255 ) COLLATE Chinese_PRC_CI_AS  NOT   NULL  ,
    
[ Level ]   [ varchar ]  ( 20 ) COLLATE Chinese_PRC_CI_AS  NOT   NULL  ,
    
[ Logger ]   [ varchar ]  ( 255 ) COLLATE Chinese_PRC_CI_AS  NOT   NULL  ,
    
[ Message ]   [ varchar ]  ( 4000 ) COLLATE Chinese_PRC_CI_AS  NOT   NULL  
ON   [ PRIMARY ]
GO


CREATE   PROCEDURE  WriteLog
@log_date   datetime ,
@thread   varchar ( 255 ),
@log_level   varchar ( 20 ),
@logger     varchar ( 255 ),
@message   varchar ( 4000 )
AS

INSERT   INTO   Log  ( [ Date ] , [ Thread ] , [ Level ] , [ Logger ] , [ Message ] VALUES  ( @log_date @thread @log_level @logger @message )
GO



运行完程序后,看到文件和数据库日志表都写入了两条。想到能否在数据库正常打开时只写日志表,在数据库连接不上而写到日志文件中呢。哈。。请看第三篇:log4net的简单使用之三_ log4net高级应用

备注:

参考:Log4net 简明手册 - Q_yuhen.htm

转载于:https://www.cnblogs.com/kevinlzf/archive/2008/07/16/1244255.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值