zoukankan      html  css  js  c++  java
  • Log4Net使用

    1.下载文件

    下载地址:http://logging.apache.org/log4net/,有源码和dll文件可供下载,有能力的大神可以研究研究源码。

    解压之后log4net-1.2.13\bin文件夹下面会有四个文件夹,cli,mono,net,net-cp,前连个不知道是在什么情况下用的,后两个主要是针对不同的.net编译程序,每个程序或者是类库都有一个目标框架属性,可右键项目,点击属性查看,.NET Framework 4 对应net,.NET Framework 4 Client Profile 对应 net-cp。

    .NET Framework 4 Client Profile 是 .NET Framework 4 已针对客户端应用程序进行优化的一个子集。 它提供了适用于大多数客户端应用程序的功能,包括 Windows Presentation Foundation (WPF)、Windows 窗体、Windows Communication Foundation (WCF) 和 ClickOnce 功能。 这使得以 .NET Framework 4 Client Profile 为目标的应用程序的部署速度加快且安装包变小。

    2.配置

    log4net 有四种主要的组件,分别是Logger(记录器), Repository(库), Appender(附着器)以及 Layout(布局).

    日志级别

    级别

    允许的方法

    Boolean属性

    优先级别

    OFF

     

     

    Highest

    FATAL

    void Fatal(...);

    bool IsFatalEnabled;

     

    RROR

    void Error(...);

    bool IsErrorEnabled;

     

    WARN

    void Warn(...);

    bool IsWarnEnabled;

     

    INFO

    void Info(...);

    bool IsInfoEnabled;

     

    DEBUG

    void Debug(...);

    bool IsDebugEnabled;

     

    ALL

     

     

    Lowest

     

    我们可根据不同情况,输出不同级别的日志。

    将下载的对应版本的log4net.dll文件引入到工程中,然后再工程的AssemblyInfo.cs文件中添加

    1 [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config")]

    上面的是单独文件的配置,如果我们将log4net的配置放入到app.config或者是web.config,则在AssemblyInfo.cs文件中添加配置时,不需要设置ConfigFile = "log4net.config", 如下:

    1 [assembly: log4net.Config.XmlConfigurator()]

    这个为log4net的初始化设置,当然我们也可以在代码中进行初始化,但是我比较喜欢在AssemblyInfo.cs文件中进行初始化。

    如下面的代码,与上面的效果是一样的:

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

    配置文件log4net.config:

    A.XML

     1 <?xml version="1.0" encoding="utf-8" ?>
     2 <configuration>
     3   <log4net>
     4     <logger name="loginfo">
     5       <level value="INFO" />
     6       <appender-ref ref="LogCommon" />
     7     </logger>
     8     <appender name="LogCommon" type="log4net.Appender.RollingFileAppender">
     9       <param name="File" value="logs\"/>
    10       <param name="AppendToFile" value="true"/>
    11       <param name="maxSizeRollBackups" value="10"/>
    12       <param name="maximumFileSize" value="1MB"/>
    13       <param name="staticLogFileName" value="false"/>
    14       <param name="DatePattern" value="yyyy-MM/yyyy-MM-dd&quot;.log&quot;" />
    15       <param name="RollingStyle" value="Composite" />
    16       <layout type="log4net.Layout.XmlLayout">
    17         <param name="Header" value="&lt;?xml version=&quot;1.0&quot; ?&gt;&lt;logs&gt;" />
    18         <param name="Footer" value="&lt;/logs&gt;" />
    19       </layout>
    20       <filter type="log4net.Filter.LevelRangeFilter">
    21         <param name="LevelMin" value="INFO" />
    22         <param name="LevelMax" value="RROR" />
    23       </filter>
    24     </appender>
    25   </log4net>
    26 </configuration>

    以上是将日志存储到xml中的配置文件,根据官网的提示,添加了Header和Footer。因为默认的为xmlNode,当使用XMLDocument访问的时候,会提示不是有效的xml文件。

    当然如果这种生成xml的方式还是不能满足工作需要的话,可以访问http://blogs.lessthandot.com/index.php/DesktopDev/MSTech/making-an-xmllayout-for-log4net

    有大能自定义了XMLLayout,但是代码是VB的,可参照或者扩展。

      参数说明:

       type="log4net.Appender.RollingFileAppender",log4net提供了各种可实现不同功能的Appender,具体可参考官方提供的帮助文档http://logging.apache.org/log4net/release/sdk/log4net.Appender.html,或者:@Anders Cui 翻译的 log4net的各种Appender配置示例

    或者原文:http://logging.apache.org/log4net/release/config-examples.html

    B.文本

    如果想输出到文本,则将配置文件中的Layout的Type属性修改成:log4net.Layout.PatternLayout

    1 <layout type="log4net.Layout.PatternLayout">
    2         <param name="Header" value="[Header]\r\n"/>
    3         <param name="Footer" value="[Footer]\r\n"/>
    4         <param name="ConversionPattern" value="%d [%t] %-5p %c [%x]  - %m%n" />
    5 </layout>

      参数说明

        Layout用法可参考:http://www.cnblogs.com/manhoo/archive/2009/06/25/1511066.html

        %m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息

        %n(new line):换行

        %d(datetime):输出当前语句运行的时刻

        %r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数

        %t(thread id):当前语句所在的线程ID

        %p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等

        %c(class):当前日志对象的名称,例如:

             模式字符串为:%-10c -%m%n

        %L:输出语句所在的行号

        %F:输出语句所在的文件名

        %-数字:表示该项的最小长度,如果不够,则用空格填充

    C.数据库(SQLServer 2008)

     1 <?xml version="1.0"?>
     2 <configuration>
     3   <log4net>
     4     <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
     5       <bufferSize value="1" />
     6       <useTransactions value="false" />
     7       <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
     8       <connectionString value="Data Source=192.168.1.99\SQLSERVER;Initial Catalog=RailWeightDB;User ID=sa; PWD=*******;" />
     9       <commandText value="INSERT INTO [RailWeightDB].[dbo].[SysLog]([ThreadName],[LevelName],[Message],[Exception],[CreateTime],[CreaterID]) VALUES (@thread,@level,@message,@exception,@time,@user)" />
    10       <parameter>
    11         <parameterName value="@thread" />
    12         <dbType value="String" />
    13         <size value="100" />
    14         <layout type="log4net.Layout.PatternLayout">
    15           <conversionPattern value="%t" />
    16         </layout>
    17       </parameter>
    18       <parameter>
    19         <parameterName value="@level" />
    20         <dbType value="String" />
    21         <size value="50" />
    22         <layout type="log4net.Layout.PatternLayout">
    23           <conversionPattern value="%p" />
    24         </layout>
    25       </parameter>
    26       <parameter>
    27         <parameterName value="@message" />
    28         <dbType value="String" />
    29         <size value="5000" />
    30         <layout type="log4net.Layout.PatternLayout">
    31           <conversionPattern value="%m" />
    32         </layout>
    33       </parameter>
    34       <parameter>
    35         <parameterName value="@exception" />
    36         <dbType value="String" />
    37         <size value="5000" />
    38         <layout type="log4net.Layout.ExceptionLayout" />
    39       </parameter>
    40       <parameter>
    41         <parameterName value="@time" />
    42         <dbType value="DateTime" />
    43         <layout type="log4net.Layout.RawTimeStampLayout" />
    44       </parameter>
    45       <parameter>
    46         <parameterName value="@user" />
    47         <dbType value="String" />
    48         <size value="50" />
    49         <layout type="log4net.Layout.PatternLayout">
    50           <conversionPattern value="%X{user}" />
    51         </layout>
    52       </parameter>
    53     </appender>
    54     <!-- specify the level for some specific categories -->
    55     <logger name="SysLog">
    56       <level value="DEBUG"/>
    57       <appender-ref ref="ADONetAppender"/>
    58     </logger>
    59   </log4net>
    60 </configuration>

    在配置数据库过程中遇到过好多麻烦,当然,过程是痛苦的,结果是美好的。

      参数说明

        bufferSize:一般设置为1,如果设置为10,则,我们写10次log才会被写入一次,这种可能会造成延迟更新,也就是说我10:10操作的日志,到10:15,buffer满了,此时才会写入到数据库中,如果协同交互较多,并且需要频繁写日志,则可根据实际情况,将其设置为较大的值。

        useTransactions :是否使用存储过程,bool类型。

        connectionType:其中Version,我看到过2.0,也看到过1.3,好像官网的就是1.3,然后我查了这个,据非官方说明,这个是.netframework的版本。

        %X{user}:%X代表的是MDC,如果不明白这个才是是怎么来的,可参考下面的注意事项以及Layout参数说明

        有大能总结了在使用数据库的4个注意事项,可参考一下:http://weblogs.asp.net/drnetjes/archive/2005/02/16/374780.aspx

  • 相关阅读:
    学习进度 -- 2019.6.20
    剑指Offer的学习笔记(C#篇)-- 平衡二叉树(二叉树后序遍历递归详解版)
    剑指Offer的学习笔记(C#篇)-- 二叉树的深度(详讲递归)
    剑指Offer的学习笔记(C#篇)-- 数字在排序数组中出现的次数
    if-else判断语句中经常犯的一个错误
    剑指Offer的学习笔记(C#篇)-- 旋转数组的最小数字
    二叉树遍历基础 -- 递归与非递归的实现方法
    剑指Offer的学习笔记(C#篇)-- 序列化二叉树
    剑指Offer的学习笔记(C#篇)-- 对称的二叉树
    剑指Offer的学习笔记(C#篇)-- 二叉树的下一个节点(好理解版本)
  • 原文地址:https://www.cnblogs.com/zhuhc/p/3447018.html
Copyright © 2011-2022 走看看