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

1.Logger

所有的记录器都必须实现 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高级应用

转自:http://www.cnblogs.com/kevinlzf/archive/2008/07/16/1244255.html

Log4Net.Config配置信息《转》的更多相关文章

  1. GIT-查看config配置信息

    config 配置指令 1 git config config 配置有system级别 global(用户级别) 和local(当前仓库)三个 设置先从system->global->lo ...

  2. iis虚拟目录或应用程序不继承父站点的web.config配置信息

    A为主站点 B为A的应用程序站点 再A的web.config中对不想继承的节点用location 套起来.如下: <location path="." allowOverri ...

  3. Log4Net 日志配置[附带源码]

    前述 园子里有许多人对log4net这款开源的日志记录控件有很多介绍.在这里个人再做一次总结,希望对以后有所帮助,需要的时候可以直接使用,减少查阅资料的时间.利用log4net可以方便地将日志信息记录 ...

  4. MVC 5 下,应用log4net收集异常信息

    1.安装log4net. 首先在VS中通过nuget安装logenet,我用的是VS2013,截屏如下:

  5. Log4net快速配置使用指南。(快速搭建log4net日志平台手册)

    每做一个新项目,都会用到log4net,但总是忘记如何快速配置.有时在网上搜半天也找不到好的模板,大都在介绍参数的使用,在此做下总结,争取下次用时仅10分钟就可搭建好log4net. 直接上介绍的步骤 ...

  6. log4net的配置及使用

    网上查了有很多种写法和配置,结果百度出来都是几种方法混合写法,拷在一起结果还不能正常运行.因此把自己做成功的代码写上来做个备份. 运行环境:log4net 2.03版本,.net 4.5 大体步骤为: ...

  7. 将Log4net的配置配置到的独立文件中

    本文转载:http://blog.csdn.net/wanzhuan2010/article/details/7587780 另外一篇博客:http://grim1980.blog.sohu.com/ ...

  8. 日志管理-将Log4net的配置配置到的独立文件中

    转自:http://www.cnblogs.com/zfanlong1314/p/3662679.html使用log4net已经很久了.但从来没有详情了解log4的参数,及具体使用方法.看了周公的博客 ...

  9. log4net类库配置、WebService配置

    一.类库配置 结构如下图 1.LogUtility类 public class LogUtility { private static readonly log4net.ILog log = log4 ...

随机推荐

  1. KMP【UVA1328】 Period

    Description 如果一个字符串S是由一个字符串T重复K次形成的,则称T是S的循环节.使K最大的字符串T称为S的最小循环节,此时的K称为最大循环次数. 现给一个给定长度为N的字符串S,对S的每一 ...

  2. POJ 2135 Farm Tour (费用流)

    [题目链接] http://poj.org/problem?id=2135 [题目大意] 有一张无向图,求从1到n然后又回来的最短路 同一条路只能走一次 [题解] 题目等价于求从1到n的两条路,使得两 ...

  3. 【bzoj1951】【古代猪文】Lucas定理+欧拉定理+孙子定理

    (上不了p站我要死了,当然是游戏原画啊) Description (题面倒是很有趣,就是太长了) 题意: 一个朝代流传的猪文文字恰好为N的k分之一,其中k是N的一个正约数(可以是1和N).不过具体是哪 ...

  4. 【bzoj4808】【马】二分图最大点独立集+简单感性证明

    (上不了p站我要死了,侵权度娘背锅) Description 众所周知,马后炮是中国象棋中很厉害的一招必杀技."马走日字".本来,如果在要去的方向有别的棋子挡住(俗称"蹩 ...

  5. [POI2015]Kinoman

    题目大意: 给你一个长度为n的数列f,f中共有m种不同的数,每种数都有一个权值w[i]. 你可以选定一个f中的区间,定义区间的权值为这一区间只出现一次的数的权值和. 问权值最大的区间的权值是多少? 思 ...

  6. 使用TensorFlow实现神经网络的介绍

    http://www.toutiao.com/i6414029277641048577/

  7. ios学习流水账1

    1.UIImageview设边框.圆角 需要引QuartzCore/QuartzCore.h> //设UIImageView边框 CALayer *layer = [m_imgView laye ...

  8. 让用VS2012/VS2013编写的程序在XP中顺利执行

    微软为了推销自家平台,默认配置下VS2012和VS2013编写的应用程序仅仅能在Vista/Win7/Win8上执行.但幸好还保留了生成XP程序的设置项.XP和Win2003的用户还是大量存在的,我们 ...

  9. 通过CVE-2017-17215学习路由器漏洞分析,从入坑到放弃

    1.基本信息: 2017/11/27,Check Point 软件技术部门报告了一个华为 HG532 产品的远程命令执行漏洞(CVE-2017-17215),Mirai的升级版变种中已经使用该漏洞.看 ...

  10. asp.net限制用户登录错误次数

    很经常在登录一个网站的时候看到,如果你登录的时候输入的账号密码错误超过三次就被锁定,然后等一段时间才能继续登录,最最经常使用的就是银行系统啦~~ 该功能处理流程如下: string uid = Req ...