Ø  前言

在一般的开发应用中,都会涉及到日志记录,用于排查错误 或 记录程序运行时的日志信息。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>

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

</configSections>

2.   log4net 节点

<log4net>

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">

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

<param name="Encoding" value="utf-8" />

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

<param name="RollingStyle" value="date"/>

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

<param name="File" value="Logs\"/>

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

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

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

<param name="StaticLogFileName" value="false"/>

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

<param name="MaxSizeRollBackups" value="10"/>

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

<param name="AppendToFile" value="true"/>

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

<layout type="log4net.Layout.PatternLayout">

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

</layout>

</appender>

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

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

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

<appender-ref ref="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 时,RollingStyler的date值将无效,这时需要设置 File 的文件名。

5)   MaximumFileSize:当RollingStyle为Composite 或 Size 时,设置最大文件大小,可选值:B、KB、MB、GB,默认为字节。例如:10MB。

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

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

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

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

4.   conversionPattern 节点解释

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

1)   %newline, %n:          换行。

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

3)   %username:             登录用户名,例如:LCLGO\GOO。

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

5)   %thread, %t:           线程Id。

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

7)   %level, %p:            消息等级(INFO、DEBUG、WARN、ERROR、FATAL)。

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

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

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

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

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

13)  %file, %F:             日志所在 class 文件绝对路径,例如:f:\Log4netTest\MyLog4net.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-->

<level value="ERROR"/>

<appender-ref ref="RollingFileAppender"/>

</root>

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">

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

<file value="c:\Log\TestLog4net.TXT"/>

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

<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>

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

<datePattern value="(yyyyMMdd)"/>

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

<appendToFile value="true"/>

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

<!--此时MaxSizeRollBackups和maximumFileSize的节点设置没有意义-->

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

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

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

<RollingStyle value="Size"/>

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

<MaxSizeRollBackups value="10"/>

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

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

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

<maximumFileSize value="2MB"/>

<!--日志格式-->

<layout type="log4net.Layout.PatternLayout">

<conversionPattern value="%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 = new FileInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "log4net.config"));

log4net.Config.XmlConfigurator.ConfigureAndWatch(configFile);

3)   加载配置位置:

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

2.   WebForm、MVC、Web 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

{

class Program

{

static void Main(string[] args)

{

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

myLog4net1.Method1();

Console.ReadLine();

}

}

}

namespace Log4netTest2

{

/// <summary>

/// Log4net 测试类。

/// </summary>

public class MyLog4net

{

/*

* 步骤:

* 1. 使用 NuGet 安装 log4net。

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

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

* 3. 调用。

*/

/// <summary>

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

/// </summary>

private static ILog Logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

public static void InitLog4Net()

{

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

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

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

}

/// <summary>

/// 测试方法1。

/// </summary>

public void 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>

public static void Method2()

{

throw new Exception("方法2 抛出自定义异常");

}

}

}

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

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 记录日志的更多相关文章

  1. [转]C#使用Log4Net记录日志

    第一步:下载Log4Net 下载地址:http://logging.apache.org/log4net/download_log4net.cgi 把下载的  log4net-1.2.11-bin-n ...

  2. ASP.NET Core使用log4net记录日志

    .NET常用的日志组件有NLog.Log4net等,.NET CORE下微软也自带了日志组件,到目前为止还没用过,而我本人常用的是log4net,下面简单讲讲.NET CORE下怎么使用log4net ...

  3. 用log4net记录日志信息

    在.net中用log4net记录日志信息,已经是很平常的事情了. log4net下载:http://logging.apache.org/log4net/download_log4net.cgi 百度 ...

  4. 将WebService部署到 SharePoint 2010 gac 缓存中,并用Log4Net记录日志到数据库

    最近做了一个sharePoint项目,需要实现的功能是,第三方网站访问我们sharePoint中的数据,通过Webservice方式实现文件的上传和下载. 于是代码工作完成了之后,本地调试没什么问题, ...

  5. Windows服务使用log4net记录日志

    该文章是系列文章 基于.NetCore和ABP框架如何让Windows服务执行Quartz定时作业 的其中一篇. 比较流行的日志组件有以下四种,Topshelf都有相应的组件提供 log4net NL ...

  6. 使用Log4net记录日志(非常重要)

    使用Log4net记录日志   首先说说为什么要进行日志记录.在一个完整的程序系统里面,日志系统是一个非常重要的功能组成部分.它可以记录下系统所产生的所有行为,并按照某种规范表达出来.我们可以使用日志 ...

  7. Log4Net记录日志的使用

    Log4net 基本样式: <log4net> <appender name="LogFileAppender" type="log4net.Appen ...

  8. Log4net 记录日志

    配置文件 备注,需要放到根目录下面 <?xml version="1.0" encoding="utf-8"?> <configuration ...

  9. 使用 Log4Net 记录日志

    第一步:下载Log4Net 下载地址:http://logging.apache.org/log4net/download_log4net.cgi 把下载的  log4net-1.2.11-bin-n ...

随机推荐

  1. thinkphp5中__PUBLIC__的使用

    在使用thinkphp5.1开发的时候遇到设置__PUBLIC__无法生效的问题.这次的版本升级有比较大的改动,很多写法已经被更改,下面说下怎么去解决这个问题. 工具/原料   phpstorm ln ...

  2. css 选择其父元素下的某个元素

    一,选择器 :first-child   p:first-child(first第一个 child子元素)(找第一个子元素为p) :last-child    p:last-child(last倒数 ...

  3. Ecplise 快捷键笔记

    1.显示出这个方法被哪些方法调用(Ctrl+Alt+H) 选中方法名,点右键,选“open call hierarchy”,其快捷键“Ctrl+Alt+H”,Eclipse就会显示出这个方法被哪些方法 ...

  4. JS小积累(二)— 自动获取浏览器尺寸

    JS小积累-获取浏览器窗口尺寸 作者: 狐狸家的鱼 GitHub:八至 autodivheight(); function autodivheight() { //函数:获取尺寸 //获取浏览器窗口高 ...

  5. SRM 600 div 2 T 1

      贪心+枚举 #include <bits/stdc++.h> using namespace std; class TheShuttles { public: int getLeast ...

  6. 洛谷P1848 书架

    好,我一直以为书架是splay,然后发现还有个优化DP的书架.妃的书架 蓝书和PPT上面都讲了,应该比较经典吧. 题意: 有n个物品,每个都有宽,高. 把它们分成若干段,使得每段的最大值的总和最小.且 ...

  7. 解决在vue中axios请求超时的问题

    查看更多精彩内容请访问我的新博客:https://www.cssge.com/ 自从使用Vue2之后,就使用官方推荐的axios的插件来调用API,在使用过程中,如果服务器或者网络不稳定掉包了, 你们 ...

  8. [hdu6183][Color it]

    题目链接 题目大意 有一个矩阵,总共有4种操作 0:清空这个矩阵 1 x y c:将\((x,y)(1 \leq x ,y\leq 10^6)\)这个点加上一种颜色c\((0\leq c \leq 5 ...

  9. win32: WM_PAINT 实现双缓冲缓图

    相关参考资料: GDI下实现双缓冲 - http://jingyan.baidu.com/article/e73e26c0f8df2424acb6a76e.html <Win32_19>用 ...

  10. TestNg 11. 超时测试

    前沿:多久时间没有响应,就是超时. 代码:用timeOut这个属性,超过规定的时间就是fail,不超过就是success package com.course.testng; import org.t ...