C# 使用 log4net 记录日志

摘要:
log4net库是Microsoft NET平台中的Apache log4j框架。它是一个帮助程序员向各种目标输出日志信息的组件。下面介绍如何使用log4net登录C#:1.参考log4net。dll程序集。成功下载后,log4net。dll和log4net。将包含xml文件。2) 或手动引用log4net。dll程序集。3) 介绍log4net命名空间--记录到哪些介质--˃3。参数节点说明1)RollingStyle:创建日志文件的方法。可选值:1.日期:按日期。CountDirection为负时有效。4) %property,%P,%X:计算机名和登录用户名:{log4net:Identity=,log4net:UserName=LCLGOGOO,log4net:HostName=LCLGAO}。

Ø  前言

在一般的开发应用中,都会涉及到日志记录,用于排查错误 或 记录程序运行时的日志信息。log4net 库是 Apache log4j框架在 Microsoft .NET 平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台、文件、数据库等)的组件。

下面介绍下如何在 C# 中如何使用 log4net 记录日志,主要分为以下几点:

1.   引用 log4net.dll 程序集。

2.   编写 log4net 的配置信息。

3.   调用(记录日志)。

4.   其他。

 

1.   引用 log4net.dll 程序集(不多说很简单)

1)   使用 NuGet 包管理器下载 log4net。下载成功后会包含 log4net.dll log4net.xml 文件。

2)   或者在项目中手动引用 log4net.dll 程序集。

3)   引入 log4net命名空间。

 

2.   编写 log4net 的配置信息

1)   App.config Web.config 配置文件的根节点“<configuration>”中加入如下配置:

1.   section节点(注意:configSections 节点必须为 configuration 的第一个子节点

<configSections>

  <sectionname="log4net"type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>

</configSections>

 

2.   log4net节点

<log4net>

  <appendername="RollingLogFileAppender"type="log4net.Appender.RollingFileAppender">

    <!--输出日志的编码方式(可以解决中文乱码)-->

    <paramname="Encoding"value="utf-8" />

    <!--创建日志文件的方式-->

    <paramname="RollingStyle"value="date"/>

    <!--日志文件存储在程序运行时目录的 Logs 文件夹中-->

    <paramname="File"value="Logs"/>

    <!--日志文件名格式,例如:2017-08-14.log-->

    <paramname="DatePattern"value="yyyy-MM-dd&quot;.log&quot;"/>

    <!--日志文件名是否为静态-->

    <paramname="StaticLogFileName"value="false"/>

    <!--备份日志数量-->

    <paramname="MaxSizeRollBackups"value="10"/>

    <!--是否是向文件中追加日志-->

    <paramname="AppendToFile"value="true"/>

    <!--日志信息排版模式-->

    <layouttype="log4net.Layout.PatternLayout">

      <paramname="ConversionPattern"value="%n%-6p%d{yyyy-MM-dd HH:mm:ss:fff}%n消息:%m%n位置:%l%n"/>

    </layout>

  </appender>

  <!--注意:该节点不能少-->

  <rootname="logerror">  <!--日志类的名字-->

    <levelvalue="all" /> <!--定义记录的日志级别-->

    <appender-refref="RollingLogFileAppender"/>  <!--记录到什么介质中-->

  </root>

</log4net>

 

3.   参数节点解释

1)   RollingStyle:创建日志文件的方式,可选值:

1.   date:按日期。

2.   composite:按日期及文件大小,默认值。

3.   size:按文件大小。

4.   once:每启动一次创建一个新文件。

2)   File:日志文件夹目录或名称。当 RollingStyle date composite 时,设置日志存储目录;否则,设置目录+文件名,已经扩展支持虚拟目录。

3)   DatePattern:日志文件名的日期格式,只有当 RollingStyle date/composite 时有效。

4)   StaticLogFileName:日志文件名是否为静态。true/fasle,默认为 true。为 true 时,RollingStylerdate值将无效,这时需要设置 File 的文件名。

5)   MaximumFileSize:当RollingStyleComposite Size 时,设置最大文件大小,可选值:BKBMBGB,默认为字节。例如:10MB

6)   MaxSizeRollBackups备份日志数量,默认为0。在CountDirection为负数时有效。

7)   CountDirection默认值为-1。当文件超过MaximumFileSize的大小时,如果要创建新的文件来存储日志,会根据CountDirection的值来重命名文件。大于-1的值时,File设置的文件名会依次加上012递增。当等于或小于-1时,创建依赖于MaxSizeRollBackups参数值。

8)   AppendToFile:当日志文件存在时,是否向日志文件中追加内容。true/fasle,默认为 true

9)   Threshold起始日志级别,低于此级别的日志不会被记录。

 

4.   conversionPattern 节点解释

Ø  下面是 conversionPattern 节点的解释,注意区分大小写。

1)   %newline, %n          换行。

2)   %数字,%-数字:         表示该项的固定长度。长度不足时:“%数字”在前面填充空格,“%-数字”则在后面填充空格。

3)   %username             登录用户名,例如:LCLGOGOO

4)   %property, %P, %X     机器名及登录用户名:{log4net:Identity=, log4net:UserName=LCLGOGOO, log4net:HostName=LCLGO}

5)   %thread, %t           线程Id

6)   %date, %d             日期,格式化:%d{yyyy-MM-dd HH:mm:ss:fff}

7)   %level, %p            消息等级(INFODEBUGWARNERRORFATAL)。

8)   %message, %m          消息内容。

9)   %type, %class, %C     记录日志的 Class 名称。

10)  %method, %M           记录日志的方法名,例如:Method1

11)  %location, %l         日志记录位置,例如:Log4netTest.MyLog4net.Method1(f:Log4netTestMyLog4net.cs:42)

12)  %line, %L             语句所在行号,例如:42

13)  %file, %F             日志所在 class 文件绝对路径,例如:f:Log4netTestMyLog4net.cs

14)  %logger, %c           Logger 名称。

15)  %timestamp, %r        程序从运行到执行到当前语句时消耗的毫秒数。

16)  %x                    输出:(null)

17)  %exception            异常信息。

18)  %property{Operator}   操作者ID

19)  %property{Action}     操作类型。

20)  %property{Message}    消息描述。

21)  %property{NDC}        输出:(null)

2)   也可以单独为 log4net 创建一个配置文件,命名为“log4net.config”,同样加入同上的配置信息。

3)   注意:在 App.config Web.config 中设置了配置,如果又在 log4net.config 中也设置了配置,则加载 App.config Web.config 中的配置。

 

3.   其他配置方式(可参考)

<log4net>

  <root>

    <!--控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->

    <!--比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录-->

    <!--如果没有定义LEVEL的值,则缺省为DEBUG-->

    <levelvalue="ERROR"/>

    <appender-refref="RollingFileAppender"/>

  </root>

  <appendername="RollingFileAppender"type="log4net.Appender.RollingFileAppender">

    <!--日志文件名开头-->

    <filevalue="c:LogTestLog4net.TXT"/>

    <!--多线程时采用最小锁定-->

    <lockingModeltype="log4net.Appender.FileAppender+MinimalLock"/>

    <!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->

    <datePatternvalue="(yyyyMMdd)"/>

    <!--是否追加到文件,默认为true,通常无需设置-->

    <appendToFilevalue="true"/>

    <!--变换的形式为日期,这种情况下每天只有一个日志-->

    <!--此时MaxSizeRollBackupsmaximumFileSize的节点设置没有意义-->

    <!--<rollingStyle value="Date"/>-->

    <!--变换的形式为日志大小-->

    <!--这种情况下MaxSizeRollBackupsmaximumFileSize的节点设置才有意义-->

    <RollingStylevalue="Size"/>

    <!--每天记录的日志文件个数,与maximumFileSize配合使用-->

    <MaxSizeRollBackupsvalue="10"/>

    <!--每个日志文件的最大大小-->

    <!--可用的单位:KB|MB|GB-->

    <!--不要使用小数,否则会一直写入当前日志-->

    <maximumFileSizevalue="2MB"/>

    <!--日志格式-->

    <layouttype="log4net.Layout.PatternLayout">

      <conversionPatternvalue="%date [%t]%-5p %c - %m%n"/>

    </layout>

  </appender>

</log4net>

 

4.   调用(记录日志)

1)   首先,需要加载配置文件,有两种方式:

1.   在程序入口的命名空间头部添加程序集特性,例如:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

namespace Log4netTest

{ }

注:

1)   省略ConfigFile属性时,则加载 App.config Web.config 的配置。

2)   该定义之后,其他程序集同样可以输出日志。

 

2.   代码加载

1)   加载 App.config Web.config 中的配置:

log4net.Config.XmlConfigurator.Configure();

2)   加载 log4net.config文件中的配置:

var configFile = newFileInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "log4net.config"));

log4net.Config.XmlConfigurator.ConfigureAndWatch(configFile);

3)   加载配置位置:

1.   控制台应用程序、WinForm,可在 Main() 方法中调用。

2.   WebFormMVCWeb API,可在 Global.asax Application_Start() 方法中调用。

 

3.   注意:如果使log4net.config文件中的配置,记得将该文件的复制到输出目录的属性设置为始终复制 或 如果较新则赋值。

 

2)   记录日志

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading;

using log4net;

 

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

namespace Log4netTest

{

    classProgram

    {

        staticvoid Main(string[] args)

        {

            Log4netTest2.MyLog4net myLog4net1 = new Log4netTest2.MyLog4net();

            myLog4net1.Method1();

            Console.ReadLine();

        }

    }

}

 

namespace Log4netTest2

{

    ///<summary>

    /// Log4net 测试类。

    ///</summary>

    publicclassMyLog4net

    {

        /*

         * 步骤:

         * 1. 使用 NuGet 安装 log4net

         * 2. 将配置信息加入 Web.config/App.config 中,

         *    或另外添加 log4net.config 配置文件(注意:设置该文件属性的“复制到输出目录”为“始终复制”)。

         * 3. 调用。

         */

 

        ///<summary>

        ///根据类名获取日志记录器对象。

        ///</summary>

        privatestaticILog Logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

 

        publicstaticvoid InitLog4Net()

        {

            //log4net.Config.XmlConfigurator.Configure();

 

            //var configFile = new FileInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "log4net.config"));

            //log4net.Config.XmlConfigurator.ConfigureAndWatch(configFile);

        }

 

        ///<summary>

        ///测试方法1

        ///</summary>

        publicvoid Method1()

        {

            InitLog4Net();

 

            Logger.Info("这是 Info() 方法,用于记录【消息】。");

            Logger.Debug("这是 Debug() 方法,用于记录【调试】消息。");

            Logger.Warn("这是 Warn() 方法,用于记录【警告】消息。");

            Logger.Error("这是 Error() 方法,用于记录【异常】消息。");

            Logger.Fatal("这是 Fatal() 方法,用于记录【严重错误】消息。");

 

            //Logger.Info(new Exception("这是 Info() 方法。【消息】"));

            //Logger.Debug(new Exception("这是 Debug() 方法。【调试】"));

            //Logger.Warn(new Exception("这是 Warn() 方法。【警告】"));

            //Logger.Error(new Exception("这是 Error() 方法。【异常】"));

            //Logger.Fatal(new Exception("这是 Fatal() 方法。【严重错误】"));

 

            try

            {

                string str = null;

                str = str.ToString();

            }

            catch (Exception ex)

            {

                Logger.Info(ex);

            }

 

            try

            {

                Method2();

            }

            catch (Exception ex)

            {

                Logger.Error(ex);

            }

        }

 

        ///<summary>

        ///方法2

        ///</summary>

        publicstaticvoid Method2()

        {

            thrownewException("方法2 抛出自定义异常");

        }

    }

}

 

3)   执行以上代码,将输出如下日志:

clip_image001[1]

clip_image003[1]

 

5.   其他

1)   除了以上给出的“日志信息排版模式”,例如:%d。其实,还可扩展自定义的排版模式,有兴趣的童鞋可以研究下,参考:http://www.cnblogs.com/cxd4321/archive/2012/07/21/2602378.html

2)   如果希望将日志写入到数据库中,也是可以的。本文也没去尝试,有兴趣的话可参考:http://blog.csdn.net/kongwei521/article/details/52242319

3)   其他参考链接:

http://www.cnblogs.com/kissazi2/p/3392605.html

http://www.cnblogs.com/dragon/archive/2005/03/24/124254.html

 

Ø  总结

对于 log4net,本人也只是初次接触(在实际的项目中使用到),以前也只是有点了解(只知道有这个组件)。因为要掌握它,就必须熟悉不少配置属性,所以特意整理下,方便日后忘记了查看。有好的建议或意见的朋友,欢迎提出,共同学习嘛^_^。好了,休息了。。。

免责声明:文章转载自《C# 使用 log4net 记录日志》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇京东商城总架构师、基础平台负责人刘海锋:京东双11创新技术实践C# yield关键字的使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用autotools自动生成Makefile并在此之上使用dh-make生成可发布的deb程序包(详解)

转自:http://blog.csdn.net/longerzone/article/details/12705507 一、前言 本文将介绍如何使用autotools生成一个Makefile文件,并在此基础上使用dh-make和debuild生成一个可发布的deb程序包,这也是我们在Linux下开发应用程序以及想要发布应用程序需要做的。 无论是在Linux...

怎样修复“Windows/System32/Config/System中文件丢失或损坏”故障

怎样修复“Windows/System32/Config/System中文件丢失或损坏”故障 英文原文引自 http://xphelpandsupport.mvps.org/how_do_i_repair_a_missing_or_cor1.htm 此类错误通常说明计算机由于注冊表的原因不能启动,下列操作应该可以修正以上错误。然而,须要特别注意的是,你须...

cdn引入element-ui

在index.html中: <script src="http://t.zoukankan.com/static/js/vue.js"></script> <link href="https://cdn.bootcss.com/element-ui/2.4.5/theme-chalk/index.css" re...

[日志log] 常用log日志记录方式对比和详解

1、现在都有哪些记录日志的方法 A.java.util.logging.Logger - 使用详解 B.log4j - 使用详解 C.SLF4J(simple logging Facade for Java)-使用详解 SLF4J是一个通用的日志框架,它并不是一种具体的日志系统,而是一个用户日志系统的facade,允许用户在部署最终应用时方便的变更其日...

asp.net Log4Net错误日志个人总结

1)创建Global.asax protected void Application_Start(object sender, EventArgs e) { log4net.Config.XmlConfigurator.Configure(); } protected void Application_Error(object sender, Even...

kubelet 配置管理 (一)

kubelet说明 首先kubelet的运行环境是在node上 在Kubernetes集群中的每个workNode需要运行kubelet用于与apiServer通信 kubeadm join过程 如果使用kubeadm集群管理工具安装的集群,官方提供二种方式将worknode加入到Kubernetes集群中 使用共享令牌、apiserver地址:端口(...