log4net使用方法及利用正则表达式提取日志信息

  log4net是.Net下一个非常优秀的开源日志记录组件。log4net记录日志的功能非常强大。它可以将日志分不同的等级,以不同的格式,输出到不同的媒介,如利用log4net可以方便地将日志信息记录到文件、控制台、Windows事件日志和数据库(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite)中。可以记载的日志类别包括:FATAL(致命错误)、ERROR(一般错误)、WARN(警告)、INFO(一般信息)、DEBUG(调试信息)。

简单的控制台应用

  控制台应用程序实例展示如何用log4net记录日志,首先要在项目中添加对log4net.dll的引用,之后要配置相关的配置文件添加配置文件两种方法,一是在默认的App.config文件(没有新建一个)中添加内容,二是在输出目录添加相应配置文件(WinForm对应的是*.exe.config)。

配置文件

 

<?xml version="1.0" encoding="utf-8"?>

<configuration>
  <configSections>
    <!--添加log4net自定义节点-->  
    <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
  </configSections>
  <appSettings>
  </appSettings>
  <log4net>
    <!--定义输出到文件中-->
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
      <!--定义文件存放位置-->
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <!--【1】指定存储到某个具体文件中-->
      <!--<file value="D:/log4netfile.txt" />  <datePattern value="yyyy\\yyyyMM\\yyyyMMdd\\yyyyMMdd-HH'.txt'"/>
      <datePattern value="yyyyMMdd-HH:mm:ss" />-->
      <!--【2】指定存储到某个文件夹中,根据时间生成日志文件-->
      <file value="log\\"/>
      <datePattern value="yyyyMMdd-HH'.txt'"/>
      <staticLogFileName value="false"/>
      <param name="MaxSizeRollBackups" value="100"/>
      <layout type="log4net.Layout.PatternLayout">
        <!--每条日志末尾的文字说明-->
        <footer value="by author" />
        <!--输出格式-->
        <!--样例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info-->
        <!--%n是换行-->
        <conversionPattern value="%n记录时间:%date %n线程ID:[%thread] %n日志级别:%-5level %n出错类:%logger property:[%property{NDC}] - %n错误描述:%message%newline" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="WARN" />
        <levelMax value="FATAL" />
      </filter>
    </appender>
    <!--定义输出到控制台命令行中-->
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
    
   
    <!--定义日志的输出媒介-->
    <root>
      <!--控制要记载的日志级别-->
      <level value="ERROR"/>
      <level value="DEBUG"/>
      <!--文件形式记录日志-->
      <appender-ref ref="LogFileAppender" />
      <!--控制台控制显示日志-->
      <appender-ref ref="ConsoleAppender" />
       
      <!-- 如果不启用相应的日志记录,可以通过这种方式注释掉
      <appender-ref ref="AdoNetAppender_Access" />
      -->
       
    </root>

  </log4net>
</configuration>
Log4netConsole.exe.config

辅助程序

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//注意下面的语句一定要加上,指定log4net使用.config文件来读取配置信息
//如果是WinForm(假定程序为LogDemo.exe,则需要一个LogDemo.exe.config文件)
//如果是WebForm,则从web.config中读取相关信息
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace Log4netConsole
{
    class Log4netHelper
    {
        public static void WriteLogger(Type type, LogLevel logLevel, string msg)
        {
            log4net.ILog log = log4net.LogManager.GetLogger(type);
            switch (logLevel)
            {
                case LogLevel.Debug: log.Debug(msg); break;
                case LogLevel.Error: log.Error(msg); break;
                case LogLevel.Fatal: log.Fatal(msg); break;
                case LogLevel.Info: log.Info(msg); break;
                case LogLevel.Warn: log.Warn(msg); break;              
                default: break;
            }
        }
    }

    /// <summary>
    /// 日志记录级别
    /// </summary>
    public enum LogLevel
    {
        Debug,
        Info,
        Warn,   
        Error,
        Fatal
    }
}
View Code

主程序

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 using System.Reflection;
 5 
 6 namespace Log4netConsole
 7 {
 8     class Program
 9     {
10         static void Main(string[] args)
11         {
12             //返回:命名空间+类名,此处为Log4netConsole.Program,
13             //表示在哪个类中记录的日志,如果记录的错误日志表示在那个类中出错
14             Type type = MethodBase.GetCurrentMethod().DeclaringType;
15             Log4netHelper.WriteLogger(type, LogLevel.Error, "测试记录Error日志");
16             Log4netHelper.WriteLogger(type, LogLevel.Debug, "测试记录Debug日志");
17            
18             car car2 = new car("dongdong", 1);
19             car2.drvie();
20 
21             Console.ReadKey();
22         }
23 
24       static void print()
25         {
26             Type type = MethodBase.GetCurrentMethod().DeclaringType;
27             Log4netHelper.WriteLogger(type, LogLevel.Error, "测试记录print日志");
28             Console.WriteLine("==============this is test lognet===============");
29             car car1 = new car();
30             car1.drvie();
31         }
32     }
33 
34     class car
35     {
36         public  string  name;
37        public int ID;
38         public car(string na = "00",int id = 0)
39         {
40             name = na;
41             ID = id;
42         }
43 
44         public void drvie()
45         {
46             Type type = MethodBase.GetCurrentMethod().DeclaringType;
47             Log4netHelper.WriteLogger(type, LogLevel.Debug, "测试记录car Debug日志");
48             Log4netHelper.WriteLogger(type, LogLevel.Info, "测试记录car Info日志");
49             Log4netHelper.WriteLogger(type, LogLevel.Warn, "测试记录car Warn日志");
50             Log4netHelper.WriteLogger(type, LogLevel.Error, "测试记录car Error日志");
51             Log4netHelper.WriteLogger(type, LogLevel.Fatal, "测试记录car Fatal日志");           
52             Console.WriteLine("==============this is car ===============");
53         }
54     }
55 }
View Code

 

将日志记录输出到文件、控制台。

假设文本内容如下

2018-05-24 17:02:00,822 [9] WARN ID -出错类:Log4netConsole.car
property:[(null)] - 错误描述:测试记录car Warn日志

2018-05-24 17:02:00,762 [9] ERROR GH- Log4netConsole.Program
property:[(null)] - 错误描述:测试记录Error日志

2018-05-24 17:02:00,822 [9] WARN ED -出错类:Log4netConsole.car
property:[(null)] - 错误描述:测试记录car Warn日志

2018-05-24 17:02:00,824 [9] FATAL EF - Log4netConsole.car property:
[(null)] - 错误描述:测试记录car Fatal日志

2018-05-24 17:02:00,762 [9] ERROR CD- [12]Log4netConsole.Program
property:[(null)] - 错误描述:测试记录Error日志

2018-05-24 17:02:00,762 [9] ERROR AB - [12]Log4netConsole.Program
property:[(null)] - 错误描述:测试记录Error日志

采用正则表达式提取文本信息代码如下

 1 try
 2 {
 3     DataTable table = new DataTable();
 4     table.Columns.AddRange(new DataColumn[] { new DataColumn("TIME"), new DataColumn("THREAD"), new DataColumn("PRIORITY"), new DataColumn("LOGGER"), new DataColumn("MESSAGE") });
 5     string input = "";
 6     using (FileStream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
 7     {
 8         using (StreamReader reader = new StreamReader(stream, Encoding.Default))
 9         {
10             input = reader.ReadToEnd();
11         }
12     }
13    
14     MatchCollection matchs = Regex.Matches(input, regexString, RegexOptions.RightToLeft);
15     foreach (Match match in matchs)
16     {
17         string str2 = match.Groups[1].Value;
18         string str3 = match.Groups[2].Value;
19         string str4 = match.Groups[3].Value;
20         string str5 = match.Groups[4].Value;
21         string str6 = match.Groups[5].Value;
22         DataRow row = table.NewRow();
23         row.ItemArray = new string[] { str2, str3, str4, str5, str6 };
24         table.Rows.InsertAt(row, 0);
25     }
26     this.dataGridView1.DataSource = table;
27     dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
28     //this.gridView1.FocusedRowHandle = this.gridView1.RowCount - 1;
29 }
30 catch (Exception exception)
31 {
32     MessageBox.Show(exception.Message);
33 }
View Code

输出结果如下

X~0]]KWK82@M[0G3`[)RI07

 

参考

http://logging.apache.org/log4net/release/config-examples.html

 https://blog.csdn.net/xiaouncle/article/details/52327324

https://blog.csdn.net/liyan530/article/details/77821900

https://blog.csdn.net/binnygoal/article/details/79557746

posted on 2018-05-19 22:36  flysong  阅读(920)  评论(1编辑  收藏  举报

导航