C# 利用Log4Net进行日志记录

概述

本文主要简单说明如何使用Log4Net进行日志记录,在程序开发过程中记录日志的优点:

  • 它可以提供应用程序运行时的精确环境,可供开发人员尽快找到应用程序中的Bug;
  • 一旦在程序中加入了Log 输出代码,程序运行过程中就能生成并输出日志信息而无需人工干预。
  • 日志信息可以输出到不同的地方(控制台,文件等)以备以后研究之用。

关于Log4Net的官方说明:

The Apache log4net library is a tool to help the programmer output log statements to a variety of output targets. log4net is a port of the excellent Apache log4j™ framework to the Microsoft® .NET runtime. We have kept the framework similar in spirit to the original log4j while taking advantage of new features in the.NET runtime。

【粗略翻译】Apache log4net 类库是一个帮助程序员输出日志状态到多种目标平台。log4net 是优秀的 Apache log4jTM 框架在微软.Net平台的一个实现。在保持原有log4j的思想的前提下,同时利用.Net的新特性。

Log4Net 在程序中使用,可以通过配置文件,进行配置,也可以通过程序代码进行定义。本文主要讲解一下通过配置的方式实现

配置文件结构,如下图所示:

配置文件可以配置在App.config中【编译后会生成对应的[程序名].exe.config】,也可以配置在独立的xml文件中。

如果配置在独立的xml文件中,需要在Assembly.cs中增加一句说明,如下所示:

[assembly: log4net.Config.DOMConfigurator(ConfigFile = "Log4NetConfig.xml", ConfigFileExtension = "xml", Watch = true)]

如果配置在App.config中,除了配置log4net节点外,还要对节点进行声明,即要增加configSection节点【放在根节点的第一个元素】,如下所示

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

生成的日志文件内容,如下图所示:

核心代码

代码如下:

 1 using log4net;
 2 using System;
 3 using System.Collections.Generic;
 4 using System.Linq;
 5 using System.Text;
 6 using System.Threading.Tasks;
 7 
 8 [assembly: log4net.Config.XmlConfigurator(Watch = true)]
 9 namespace DemoLog4Net
10 {
11     /// <summary>
12     /// 日志记录
13     /// </summary>
14     public class LogHelper
15     {
16         /// <summary>
17         /// 日志实例
18         /// </summary>
19         private static ILog logInstance=LogManager.GetLogger("testApp");
20 
21         public static void WriteLog(string message ,LogLevel level) {
22             switch (level) {
23                 case LogLevel.Debug:
24                     logInstance.Debug(message);
25                     break;
26                 case LogLevel.Error:
27                     logInstance.Error(message);
28                     break;
29                 case LogLevel.Fatal:
30                     logInstance.Fatal(message);
31                     break;
32                 case LogLevel.Info:
33                     logInstance.Info(message);
34                     break;
35                 case LogLevel.Warn:
36                     logInstance.Warn(message);
37                     break;
38                 default:
39                     logInstance.Info(message);
40                     break;
41             }
42         }
43     }
44 
45     public enum LogLevel {
46         Debug=0,
47         Error=1,
48         Fatal=2,
49         Info=3,
50         Warn=4
51     }
52 }
View Code

独立配置文件如下:

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <log4net>
 3   <root>
 4     <level value="DEBUG" />
 5     <appender-ref ref="LogFileAppender" />
 6     <appender-ref ref="ConsoleAppender" />
 7   </root>
 8   <logger name="testApp">
 9     <level value="DEBUG" />
10   </logger>
11   <appender name="LogFileAppender" type="log4net.Appender.FileAppender" >
12     <param name="File" value="${TMO}log-file.txt" />
13     <StaticLogFileName value="false"/>
14     <param name="AppendToFile" value="true" />
15     <layout type="log4net.Layout.PatternLayout">
16       <param name="Header" value="[Header]&#13;&#10;"/>
17       <param name="Footer" value="[Footer]&#13;&#10;"/>
18       <param name="ConversionPattern" value="%d [%t] %-5p %c [%x]  - %m%n"/>
19     </layout>
20     <filter type="log4net.Filter.LevelRangeFilter">
21       <param name="LevelMin" value="DEBUG" />
22       <param name="LevelMax" value="ERROR" />
23     </filter>
24   </appender>
25   <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
26     <layout type="log4net.Layout.PatternLayout">
27       <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
28     </layout>
29   </appender>
30 </log4net>
View Code


附加:

如何设置环境变量:

 System.Environment.SetEnvironmentVariable("TMO", DateTime.Now.ToString("yyyyMMdd"));

日志记录优先级如下表所示:

 

级别允许的方法Boolean属性优先级别
OFF  Highest
FATALvoid Fatal(...);bool IsFatalEnabled; 
RRORvoid Error(...);bool IsErrorEnabled; 
WARNvoid Warn(...);bool IsWarnEnabled; 
INFOvoid Info(...);bool IsInfoEnabled; 
DEBUGvoid Debug(...);bool IsDebugEnabled; 
ALL  Lowest
 

 

 

 

 

 

 

 

 

备注:

log4net确实是一个应用广泛且简单好用的日志记录框架,本文只是简单的说明,后续工作中会继续研究其他的功能

 

转载于:https://www.cnblogs.com/hsiang/p/6576530.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值