看了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 或某一个父配置,但在需要的时候,我们随时可以为具体的类型添加一个更加 "详细" 的配置。
 1log4net的简单使用之二_log4net应用<?xml version="1.0" encoding="utf-8" ?> 
 2log4net的简单使用之二_log4net应用<log4net>
 3log4net的简单使用之二_log4net应用  <appender name="Console" type="log4net.Appender.ConsoleAppender">
 4log4net的简单使用之二_log4net应用    <layout type="log4net.Layout.PatternLayout">
 5log4net的简单使用之二_log4net应用      <conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" />
 6log4net的简单使用之二_log4net应用    </layout>
 7log4net的简单使用之二_log4net应用  </appender>
 8log4net的简单使用之二_log4net应用
 9log4net的简单使用之二_log4net应用  <logger name="Learn.Library.Log4netTest">
10log4net的简单使用之二_log4net应用    <level value="ALL" />
11log4net的简单使用之二_log4net应用  </logger>
12log4net的简单使用之二_log4net应用
13log4net的简单使用之二_log4net应用  <root>
14log4net的简单使用之二_log4net应用    <level value="OFF" />
15log4net的简单使用之二_log4net应用    <appender-ref ref="Console" />
16log4net的简单使用之二_log4net应用  </root>
17log4net的简单使用之二_log4net应用</log4net>
18log4net的简单使用之二_log4net应用

 

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


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

  2 Appender / Layout

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

(1) AspNetTraceAppender

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


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

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

3. Configuration

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

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

配置app.config / web.config文件

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

使用代码初始化配置。

log4net.Config.XmlConfigurator.Configure();

 

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

test.log4net

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

使用代码初始化配置。

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下载



备注:

log4net的简单使用之二_log4net应用
log4net的简单使用之二_log4net应用
CREATE TABLE [dbo].[Log] (
log4net的简单使用之二_log4net应用    
[ID] [int] IDENTITY (11NOT NULL ,
log4net的简单使用之二_log4net应用    
[Date] [datetime] NOT NULL ,
log4net的简单使用之二_log4net应用    
[Thread] [varchar] (255) COLLATE Chinese_PRC_CI_AS NOT NULL ,
log4net的简单使用之二_log4net应用    
[Level] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
log4net的简单使用之二_log4net应用    
[Logger] [varchar] (255) COLLATE Chinese_PRC_CI_AS NOT NULL ,
log4net的简单使用之二_log4net应用    
[Message] [varchar] (4000) COLLATE Chinese_PRC_CI_AS NOT NULL 
log4net的简单使用之二_log4net应用
ON [PRIMARY]
log4net的简单使用之二_log4net应用
GO
log4net的简单使用之二_log4net应用
log4net的简单使用之二_log4net应用
log4net的简单使用之二_log4net应用
CREATE PROCEDURE WriteLog
log4net的简单使用之二_log4net应用
@log_date datetime,
log4net的简单使用之二_log4net应用
@thread varchar(255),
log4net的简单使用之二_log4net应用
@log_level varchar(20),
log4net的简单使用之二_log4net应用
@logger   varchar(255),
log4net的简单使用之二_log4net应用
@message varchar(4000)
log4net的简单使用之二_log4net应用
AS
log4net的简单使用之二_log4net应用
log4net的简单使用之二_log4net应用
INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message]VALUES (@log_date@thread@log_level@logger@message)
log4net的简单使用之二_log4net应用
GO



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

备注:

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

相关文章: