log4net使用方法(转载) Kevin

最近自己在做一个小东西,用log4net日志组件来记录日志,自己在前人的基础上加工总结,拿出来给大家分享一下,不足之处大拿们使劲拍砖,感激不尽!

第一步:配置config文件

    为了方便管理,把log4net的配置文件从web.config中分离,新建一个名为log4net.config的文件,内容如下:

View Code
1 <?xml version="1.0" encoding="UTF-8"?>
2 <log4net debug="false">
3
4 <!--按日期分割日志文件 一天一个-->
5 <appender name="LogFileAppenderByDate" type="log4net.Appender.RollingFileAppender" >
6
7 <!--是否续写-->
8 <param name="AppendToFile" value="true" />
9 <!--最小锁定模型以允许多个进程可以写入同一个文件-->
10 <param name="LockingModel" value="log4net.Appender.FileAppender.MinimalLock" />
11 <param name="StaticLogFileName" value="true" />
12 <!--保存路径-->
13 <param name="File" value="F:\Log\\" />
14 <param name="DatePattern" value="yyyy-MM-dd.LOG" />
15 <param name="StaticLogFileName" value="false" />
16 <param name="RollingStyle" value="Date" />
17 <layout type="log4net.Layout.PatternLayout">
18 <param name="ConversionPattern" value="时间:%d %n级别:%level %n类名:%c%n文件:%F 第%L行%n日志内容:%m%n-----------------------------------------%n%n" />
19 </layout>
20 </appender>
21
22 <!--按日志容量分割日志文件 10KB一个-->
23 <appender name="LogFileAppenderBySize" type="log4net.Appender.RollingFileAppender" >
24
25 <!--是否续写-->
26 <param name="AppendToFile" value="true" />
27 <!--最小锁定模型以允许多个进程可以写入同一个文件-->
28 <param name="LockingModel" value="log4net.Appender.FileAppender.MinimalLock" />
29
30 <param name="StaticLogFileName" value="true" />
31
32 <!--按照文件的大小进行变换日志文件-->
33 <param name="RollingStyle" value="Size" />
34 <param name="File" value="LogData\\log.txt" />
35 <!--单个文件最大数量 好像只有在 按Size分割时有效-->
36 <param name="MaximumFileSize" value="10KB"/>
37 <!--保留的log文件数量 超过此数量后 自动删除之前的 好像只有在 按Size分割时有效-->
38 <param name="MaxSizeRollBackups" value="2" />
39
40 <param name="StaticLogFileName" value="false" />
41 <layout type="log4net.Layout.PatternLayout">
42 <param name="ConversionPattern" value="发生时间:%d %n事件级别:%level %n相关类名:%c%n程序文件:%F 第%L行%n日志内容:%m%n-----------------------------------------%n%n" />
43 </layout>
44 </appender>
45 <!--记录日志到数据库-->
46 <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
47 <bufferSize value="100" />
48 <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
49 <connectionString value="data source=GAS-HECHEN;initial catalog=dsc141051_db;integrated security=false;persist security info=True;User ID=sa;Password=000000" />
50 <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
51 <parameter>
52 <parameterName value="@log_date" />
53 <dbType value="DateTime" />
54 <layout type="log4net.Layout.RawTimeStampLayout" />
55 </parameter>
56 <parameter>
57 <parameterName value="@thread" />
58 <dbType value="String" />
59 <size value="255" />
60 <layout type="log4net.Layout.PatternLayout">
61 <conversionPattern value="%thread" />
62 </layout>
63 </parameter>
64 <parameter>
65 <parameterName value="@log_level" />
66 <dbType value="String" />
67 <size value="50" />
68 <layout type="log4net.Layout.PatternLayout">
69 <conversionPattern value="%level" />
70 </layout>
71 </parameter>
72 <parameter>
73 <parameterName value="@logger" />
74 <dbType value="String" />
75 <size value="255" />
76 <layout type="log4net.Layout.PatternLayout">
77 <conversionPattern value="%logger" />
78 </layout>
79 </parameter>
80 <parameter>
81 <parameterName value="@message" />
82 <dbType value="String" />
83 <size value="4000" />
84 <layout type="log4net.Layout.PatternLayout">
85 <conversionPattern value="%message" />
86 </layout>
87 </parameter>
88 <parameter>
89 <parameterName value="@exception" />
90 <dbType value="String" />
91 <size value="2000" />
92 <layout type="log4net.Layout.ExceptionLayout" />
93 </parameter>
94 </appender>
95 <root>
96 <level value="INFO" />
97 <!--启用按日期分割-->
98 <appender-ref ref="LogFileAppenderByDate" />
99 <!--启用按容量分割-->
100 <!--<appender-ref ref="LogFileAppenderBySize" />-->
101 <!--启用保存到数据库-->
102 <!--<appender-ref ref="AdoNetAppender" />-->
103 </root>
104 </log4net>

    内容主要配置日志的输出方式:1、按日期生成  2、按文件大小 生成  3、把日志保存到数据库文件。最后root节点是设置启动哪种方式来保存日志,以及设置日志的级别

第二步:把Log4Net.config文件添加到项目启动项

        在website或winform 项目下的Global.asax.cs类的Application_Start()方法下添加加载日志配置文件代码

View Code
1        void Application_Start(object sender, EventArgs e)
2 {
3 // Code that runs on application startup
4 log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(Server.MapPath("/Log4Net.config")));
5 }

第三步:在类库里添加日志帮助类LogHelper

        添加辅助类的目的:1、方便各个类库及项目直接调用,不用每个项目里都添加log4net的引用

                                2、为了支持根据自己配置的日志输出格式和输出方式 输出日志(configPath 用来传入日志配置路径)

View Code
1     /// <summary>
2 /// 日志辅助类
3 /// </summary>
4 public class LogHelper
5 {
6 private static ILog log;
7 private static LogHelper logHelper = null;
8 /// <summary>
9 /// 初始化
10 /// </summary>
11 /// <returns></returns>
12 public static ILog GetInstance()
13 {
14 logHelper = new LogHelper(null);
15
16 return log;
17 }
18 /// <summary>
19 /// 初始化
20 /// </summary>
21 /// <param name="configPath"></param>
22 /// <returns></returns>
23 public static ILog GetInstance(string configPath)
24 {
25 logHelper = new LogHelper(configPath);
26
27 return log;
28 }
29 /// <summary>
30 /// 构造函数
31 /// </summary>
32 /// <param name="configPath"></param>
33 private LogHelper(string configPath)
34 {
35 if (!string.IsNullOrEmpty(configPath))
36 {
37 log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
38 log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(configPath));
39 }
40 else
41 {
42 log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
43 }
44 }
45
46 }


第四步:在项目里应用日志

           

View Code
ILog log = LogHelper.GetInstance();
log.Fatal("Fatal");

或者

ILog log = LogHelper.GetInstance(configPath);
log.Fatal("diaoxw");

http://hi.baidu.com/sjbh/blog/item/6c12794e0187ea1eb2de0559.html

已经如下配置了, 可还是出现如标题的错误, y? 

 <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  </configSections>

<log4net>
    <!-- 设置日志记录方式 -->
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender, log4net">
      <param name="File" value="D:\\Senderlog.txt" />
      <param name="AppendToFile" value="false" />
      <layout type="log4net.Layout.PatternLayout, log4net">
        <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] &lt;%X{auth}&gt; - %m%n" />
      </layout>
    </appender>
    <!--<appender name="Console"  type="log4net.Appender.ConsoleAppender, log4net">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" />
      </layout>
    </appender>-->
    <!-- 设置日志记录级别 -->
    <root>
      <priority value="INFO" />
      <appender-ref ref="LogFileAppender" />
    </root>
    <!-- Specify the level for some specific namespaces -->
    <!-- Level can be : ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF -->
    <logger name="Sender" additivity="true">
      <level value="INFO" />
      <appender-ref ref="LogFileAppender" />
    </logger>
  </log4net>

查到下面这篇文章,问题解决:(如果是CS程序,在根目录的Program.cs中的Main方法中添加:log4net.Config.XmlConfigurator.Configure();)  这句话解决问题

1、概述
log4net是.Net下一个非常优秀的开源日志记录组件。log4net记录日志的功能非常强大。它可以将日志分不同的等级, 以不同的格式,输出到不同的媒介。本文主要是介绍如何在Visual Studio2008中使用log4net快速创建系统日志,如何扩展以输出自定义字段。

2、一个简单的使用实例
第一步:在项目中添加对log4net.dll的引用,这里引用版本是1.2.10.0。

第二步:程序启动时读取log4net的配置文件。

如果是CS程序,在根目录的Program.cs中的Main方法中添加:

log4net.Config.XmlConfigurator.Configure();

如果是BS程序,在根目录的Global.asax.cs(没有新建一个)中的Application_Start方法中添加:

log4net.Config.XmlConfigurator.Configure();

无论BS还是CS程序都可直接在项目的AssemblyInfo.cs文件里添加以下的语句:

[assembly: log4net.Config .XmlConfigurator()]

也可以使用自定义的配置文件,具体请参见4.4 关联配置文件。

第三步:修改配置文件

Q: 出现了一大堆的 INFO信息,  把下面的INFO的优先权去掉,才没有了

<!--<root>
      <priority value="INFO" />
      <appender-ref ref="LogFileAppender" />
    </root>-->

原文地址:https://www.cnblogs.com/kfx2007/p/2442096.html