看了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.  
  2.  
  3.  1<?xml version="1.0" encoding="utf-8" ?> 
  4.  
  5.  2<log4net>
  6.  
  7.  3  <appender name="Console" type="log4net.Appender.ConsoleAppender">
  8.  
  9.  4    <layout type="log4net.Layout.PatternLayout">
  10.  
  11.  5      <conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" />
  12.  
  13.  6    </layout>
  14.  
  15.  7  </appender>
  16.  
  17.  8
  18.  
  19.  9  <logger name="Learn.Library.Log4netTest">
  20.  
  21. 10    <level value="ALL" />
  22.  
  23. 11  </logger>
  24.  
  25. 12
  26.  
  27. 13  <root>
  28.  
  29. 14    <level value="OFF" />
  30.  
  31. 15    <appender-ref ref="Console" />
  32.  
  33. 16  </root>
  34.  
  35. 17</log4net>
  36.  
  37. 18
  38.  

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

  1.  
  2.  
  3.  1<?xml version="1.0" encoding="utf-8" ?>
  4.  
  5.  2<log4net>
  6.  
  7.  3  <appender name="Console" type="log4net.Appender.ConsoleAppender">
  8.  
  9.  4  </appender>
  10.  
  11.  5
  12.  
  13.  6  <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
  14.  
  15.  7  </appender>
  16.  
  17.  8
  18.  
  19.  9  <root>
  20.  
  21. 10    <level value="DEBUG" />
  22.  
  23. 11    <appender-ref ref="Console" />
  24.  
  25. 12    <appender-ref ref="RollingFile" />
  26.  
  27. 13  </root>
  28.  
  29. 14</log4net>
  30.  
  31. 15
  32.  

2 Appender / Layout

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

(1) AspNetTraceAppender

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

(2) ConsoleAppender

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

(3) FileAppender

  1.  
  2.  
  3. 1<appender name="FileAppender" type="log4net.Appender.FileAppender">
  4.  
  5. 2  <file value="log-file.txt" />
  6.  
  7. 3  <appendToFile value="true" />
  8.  
  9. 4  <layout type="log4net.Layout.PatternLayout">
  10.  
  11. 5    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
  12.  
  13. 6  </layout>
  14.  
  15. 7</appender>
  16.  
  17. 8
  18.  

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

3. Configuration

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

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

配置app.config / web.config文件

  1.  
  2.  
  3.   1<?xml version="1.0" encoding="utf-8"?>
  4.  
  5.   2<!-- 
  6.  
  7.   3    注意: 除了手动编辑此文件以外,您还可以使用 
  8.  
  9.   4    Web 管理工具来配置应用程序的设置。可以使用 Visual Studio 中的
  10.  
  11.   5     “网站”->“Asp.Net 配置”选项。
  12.  
  13.   6    设置和注释的完整列表在 
  14.  
  15.   7    machine.config.comments 中,该文件通常位于 
  16.  
  17.   8    \Windows\Microsoft.Net\Framework\v2.x\Config 
  18.  
  19.   9-->
  20.  
  21.  10<configuration>
  22.  
  23.  11  <configSections>
  24.  
  25.  12    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  26.  
  27.  13  </configSections>
  28.  
  29.  14  <appSettings/>
  30.  
  31.  15  <connectionStrings/>
  32.  
  33.  16  <log4net>
  34.  
  35.  17    <root>
  36.  
  37.  18      <level value="ALL" />
  38.  
  39.  19      <appender-ref ref="LogFileAppender" />
  40.  
  41.  20      <appender-ref ref="RollingFileAppender" />
  42.  
  43.  21      <appender-ref ref="AdoNetAppender_SqlServer" />
  44.  
  45.  22    </root>
  46.  
  47.  23    <!--
  48.  
  49.  24写入文件中-->
  50.  
  51.  25    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
  52.  
  53.  26      <file value="D:\log-file1.txt" />
  54.  
  55.  27      <!-- Example using environment variables in params -->
  56.  
  57.  28      <!-- <file value="${TMP}\log-file.txt" /> -->
  58.  
  59.  29      <!--<sppendToFile value="true" />-->
  60.  
  61.  30      <!-- An alternate output encoding can be specified -->
  62.  
  63.  31      <!-- <encoding value="unicodeFFFE" /> -->
  64.  
  65.  32      <layout type="log4net.Layout.PatternLayout">
  66.  
  67.  33        <!--<footer value="[Footer] Test By Ring1981  " />-->
  68.  
  69.  34        <conversionPattern value="%date [%thread] %-5level %logger [%ndc] &lt;%property{auth}&gt; - %message%newline" />
  70.  
  71.  35      </layout>
  72.  
  73.  36      <!-- Alternate layout using XML            
  74.  
  75.  37            <layout type="log4net.Layout.XMLLayout" /> -->
  76.  
  77.  38    </appender>
  78.  
  79.  39
  80.  
  81.  40    <!-- 将日志以回滚文件的形式写到文件中
  82.  
  83.  41为做测试,我把文件大小设置为1K,大于它,就重新生成文档
  84.  
  85.  42-->
  86.  
  87.  43    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender" Threshold="Error" >
  88.  
  89.  44      <file value="log.txt" />
  90.  
  91.  45      <appendToFile value="true" />
  92.  
  93.  46      <rollingStyle value="Size" />
  94.  
  95.  47      <maxSizeRollBackups value="10" />
  96.  
  97.  48      <maximumFileSize value="1KB" />
  98.  
  99.  49      <staticLogFileName value="true" />
  100.  
  101.  50      <layout type="log4net.Layout.PatternLayout">
  102.  
  103.  51        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
  104.  
  105.  52      </layout>
  106.  
  107.  53    </appender>
  108.  
  109.  54
  110.  
  111.  55
  112.  
  113.  56    <!-- 将日志记录到数据库中。采用存储过程两种方式
  114.  
  115.  57     备注:也可采用SQL语句的方式,主要就是commandType, commandText属性设置不同,请
  116.  
  117.  58        参见log4net官方文档
  118.  
  119.  59 -->
  120.  
  121.  60    <appender name="AdoNetAppender_SqlServer" type="log4net.Appender.AdoNetAppender" Threshold="Fatal" >
  122.  
  123.  61      <bufferSize value="0" />
  124.  
  125.  62      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  126.  
  127.  63      <connectionString value="data source=.;initial catalog=aigoshop;integrated security=false;persist security info=True;User ID=sa;Password=" />
  128.  
  129.  64      <commandType value="StoredProcedure" />
  130.  
  131.  65      <commandText value="WriteLog" />
  132.  
  133.  66      <parameter>
  134.  
  135.  67        <parameterName value="@log_date" />
  136.  
  137.  68        <dbType value="DateTime" />
  138.  
  139.  69        <layout type="log4net.Layout.PatternLayout" value="%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff}" />
  140.  
  141.  70      </parameter>
  142.  
  143.  71      <parameter>
  144.  
  145.  72        <parameterName value="@thread" />
  146.  
  147.  73        <dbType value="String" />
  148.  
  149.  74        <size value="255" />
  150.  
  151.  75        <layout type="log4net.Layout.PatternLayout" value="%thread" />
  152.  
  153.  76      </parameter>
  154.  
  155.  77      <parameter>
  156.  
  157.  78        <parameterName value="@log_level" />
  158.  
  159.  79        <dbType value="String" />
  160.  
  161.  80        <size value="20" />
  162.  
  163.  81        <layout type="log4net.Layout.PatternLayout" value="%level" />
  164.  
  165.  82      </parameter>
  166.  
  167.  83      <parameter>
  168.  
  169.  84        <parameterName value="@logger" />
  170.  
  171.  85        <dbType value="String" />
  172.  
  173.  86        <size value="255" />
  174.  
  175.  87        <layout type="log4net.Layout.PatternLayout" value="%logger" />
  176.  
  177.  88      </parameter>
  178.  
  179.  89      <parameter>
  180.  
  181.  90        <parameterName value="@message" />
  182.  
  183.  91        <dbType value="String" />
  184.  
  185.  92        <size value="4000" />
  186.  
  187.  93        <layout type="log4net.Layout.PatternLayout" value="%message" />
  188.  
  189.  94      </parameter>
  190.  
  191.  95    </appender>
  192.  
  193.  96
  194.  
  195.  97
  196.  
  197.  98  </log4net>
  198.  
  199.  99  <system.web>
  200.  
  201. 100
  202.  
  203. 101    <compilation debug="false" />
  204.  
  205. 102   
  206.  
  207. 103    <authentication mode="Windows" />
  208.  
  209. 104   
  210.  
  211. 105  </system.web>
  212.  
  213. 106</configuration>
  214.  
  215. 107
  216.  

使用代码初始化配置。

log4net.Config.XmlConfigurator.Configure();

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

test.log4net

  1.  
  2.  
  3.  1<?xml version="1.0" encoding="utf-8" ?> 
  4.  
  5.  2<log4net>
  6.  
  7.  3  <appender name="Console" type="log4net.Appender.ConsoleAppender">
  8.  
  9.  4    <layout type="log4net.Layout.PatternLayout">
  10.  
  11.  5      <conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" />
  12.  
  13.  6    </layout>
  14.  
  15.  7  </appender>
  16.  
  17.  8  
  18.  
  19.  9  <root>
  20.  
  21. 10    <level value="DEBUG" />
  22.  
  23. 11    <appender-ref ref="Console" />
  24.  
  25. 12  </root>
  26.  
  27. 13</log4net>
  28.  
  29. 14
  30.  

使用代码初始化配置。

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



备注:

  1.  
  2.  
  3. CREATE TABLE [dbo].[Log] (
  4.  
  5.     [ID] [int] IDENTITY (1, 1) NOT NULL ,
  6.  
  7.     [Date] [datetime] NOT NULL ,
  8.  
  9.     [Thread] [varchar] (255) COLLATE Chinese_PRC_CI_AS NOT NULL ,
  10.  
  11.     [Level] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
  12.  
  13.     [Logger] [varchar] (255) COLLATE Chinese_PRC_CI_AS NOT NULL ,
  14.  
  15.     [Message] [varchar] (4000) COLLATE Chinese_PRC_CI_AS NOT NULL 
  16.  
  17. ) ON [PRIMARY]
  18.  
  19. GO
  20.  
  21. CREATE PROCEDURE WriteLog
  22.  
  23. @log_date datetime,
  24.  
  25. @thread varchar(255),
  26.  
  27. @log_level varchar(20),
  28.  
  29. @logger   varchar(255),
  30.  
  31. @message varchar(4000)
  32.  
  33. AS
  34.  
  35. INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message]) VALUES (@log_date, @thread, @log_level, @logger, @message)
  36.  
  37. GO
  38.  

运行完程序后,看到文件和数据库日志表都写入了两条。想到能否在数据库正常打开时只写日志表,在数据库连接不上而写到日志文件中呢。哈。。请看第三篇: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. APP专项测试 | 内存及cpu

    命令: adb shell dumpsys meminfo  packagename 关注点: 1.Native/Dalvik 的 Heap 信息 具体在上面的第一行和第二行,它分别给出的是JNI层和 ...

  2. Spiral Matrix -- LeetCode

    Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or ...

  3. [CC-CHANOQ]Chef and odd queries

    题目大意: 给定$n(10^5)$个线段$[l_i,r_i](1\leq l_i,r_i\leq n)$,有$q(q\leq10^5)$组询问,每次给出$m_i(\sum m_i\leq n)$个点$ ...

  4. javap -c 字节码含义

    aconst_null         将null对象引用压入栈 iconst_m1         将int类型常量-1压入栈 iconst_0         将int类型常量0压入栈 icons ...

  5. JAVA生成问答式验证码图片,支持加减算法

    原文:http://liuguihua0823.iteye.com/blog/1511355 import java.awt.Color; import java.awt.Font; import j ...

  6. Makefile中的“-I”(大写i),“-L”(大写l),“-l”(小写l)

    用gcc编译程序时,可能会用到“-I”(大写i),“-L”(大写l),“-l”(小写l)等参数, “-I”(大写i):表示包含头文件: “-L”(大写l):表示库文件目录: “-l”(小写l):表示链 ...

  7. Playonlinux

    apt-get install playonlinux -y apt-get install winbind -y apt-get install unzip -y 开始中搜索:playonlinux ...

  8. Linux内核实践之工作队列

    工作队列(work queue)是另外一种将工作推后执行的形式,它和tasklet有所不同.工作队列可以把工作推后,交由一个内核线程去执行,也就是说,这个下半部分可以在进程上下文中执行.这样,通过工作 ...

  9. Http协议三次握手过程

    Http协议三次握手过程   TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: ...

  10. 转:MyBatis学习总结(Mybatis总结精华文章)

    http://www.cnblogs.com/xdp-gacl/tag/MyBatis%E5%AD%A6%E4%B9%A0%E6%80%BB%E7%BB%93/ 当前标签: MyBatis学习总结   ...