解析,log4日志的输出格式 【转载】

Log4Net的Pattern:

%date [%thread] %-5level- %message%newline

正则表达式的格式:

(?<Date>[0-9]{4}-[0-9]{2}-[0-9]{2}) (?<Time>[0-9]{2}:[0-9]{2}:[0-9]{2})\,[0-9]{3} [(?<Thread>[sS]*?)] (?<Level>[DEBUG|WARN |FATAL|ERROR|INFO ]*?)- (?<message>[sS]*? ) 

完整的代码如下:


 1using System;
 2using System.Data;
 3using System.Windows.Forms;
 4using System.IO;
 5using System.Text.RegularExpressions;
 6
 7namespace MorningStar.Blade.Log4NetReader
 8{
 9    public partial class Log4NetShow : Form
10    {
11        private const string PATTERN = @"(?<Date>[0-9]{4}-[0-9]{2}-[0-9]{2}) (?<Time>[0-9]{2}:[0-9]{2}:[0-9]{2})\,[0-9]{3} [(?<Thread>[sS]*?)] (?<Level>[DEBUG|WARN |FATAL|ERROR|INFO ]*?)- (?<message>[sS]*? )";
12        private const string DATEPATTERN = "Date";
13        private const string TIMEPATTERN = "Time";
14        private const string THREADPATTERN = "Thread";
15        private const string LEVELPATTERN = "Level";
16        private const string MESSAGEPATTERN = "message";
17
18        public Log4NetShow()
19        {
20            InitializeComponent();
21            
22        }
23
24        private string GetTextFromFile(string filePath)
25        {
26            string tempFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,String.Format("temp{0}.txt",System.DateTime.Now.ToBinary()));
27            File.Copy(filePath,tempFile);
28
29            string text = FileReader.ReadFlie(tempFile);
30            File.Delete(tempFile);
31            return text;
32        }
33
34        private void btnOpenFile_Click(object sender, EventArgs e)
35        {
36            try
37            {
38                using (OpenFileDialog ofd = new OpenFileDialog())
39                {
40                    if (ofd.ShowDialog() == DialogResult.OK)
41                    {
42                        txtFileName.Text = ofd.FileName;
43                        string textFromFile = GetTextFromFile(ofd.FileName);
44                        if (!String.IsNullOrEmpty(textFromFile))
45                        {
46                            MatchCollection collection = RegexUtil.GetMatchCollection(textFromFile, PATTERN);
47                            DataTable logTable = GetLogData(collection);
48                            if (logTable != null && logTable.Rows.Count > 0)
49                                gdLog.DataSource = logTable;
50                        }
51                    }
52                }
53            }
54            catch (Exception ex)
55            {
56                MessageBox.Show(ex.Message, "Warn", MessageBoxButtons.OK, MessageBoxIcon.Warning);
57            }
58
59        }
60
61        private DataTable GetLogData(MatchCollection collection)
62        {
63            string date = "";
64            string time = "";
65            string thread = "";
66            string level = "";
67            string message = "";
68
69            DataTable logTable = new DataTable();
70            logTable.Columns.Add(new DataColumn("LogDate", typeof(DateTime)));
71            logTable.Columns.Add(new DataColumn("ThreadName", typeof(string)));
72            logTable.Columns.Add(new DataColumn("Level", typeof(string)));
73            logTable.Columns.Add(new DataColumn("Message", typeof(string)));
74
75            foreach (Match match in collection)
76            {
77                date = match.Groups[DATEPATTERN].Value;
78                time = match.Groups[TIMEPATTERN].Value;
79                thread = match.Groups[THREADPATTERN].Value;
80                level = match.Groups[LEVELPATTERN].Value;
81                message = match.Groups[MESSAGEPATTERN].Value;
82
83                DataRow dr = logTable.NewRow();
84                DateTime temp;
85                DateTime.TryParse(String.Format("{0} {1}", date, time), out temp);
86                dr["LogDate"] = temp;
87                dr["ThreadName"] = thread;
88                dr["Level"] = level;
89
90                dr["Message"] = message;
91                logTable.Rows.Add(dr);
92            }
93
94            return logTable;
95        }
96    }
97}
98

RegexUtil的代码:


 1using System;
 2using System.Text.RegularExpressions;
 3
 4namespace MorningStar.Blade.Log4NetReader
 5{
 6    public static class RegexUtil
 7    {
 8        public static string Replace(string inputData, string pattern, string replaceData)
 9        {
10            try
11            {
12                Regex match = new Regex(pattern);
13
14                return match.Replace(inputData, replaceData);
15            }
16            catch (Exception ex)
17            {
18                return "";
19            }
20        }
21
22        public static string GetGroupValue(string inputData, string pattern, string groupName)
23        {
24            try
25            {
26                Regex match = new Regex(pattern);
27
28                return match.Match(inputData).Groups[groupName].Value;
29            }
30            catch (Exception ex)
31            {
32                return "";
33            }
34        }
35
36        public static MatchCollection GetMatchCollection(string inputData, string pattern)
37        {
38            Regex re = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Multiline);
39            return re.Matches(inputData);
40        }
41    }
42}
43

FileReader的代码:


 1using System;
 2using System.IO;
 3
 4namespace MorningStar.Blade.Log4NetReader
 5{
 6    public class FileReader
 7    {
 8        /// <summary>
 9        /// 读取文本文件
10        /// </summary>
11        /// <param name="filePath"></param>
12        public static string ReadFlie(string filePath)
13        {
14            try
15            {
16                string str = "";
17                using (StreamReader sr = new StreamReader(filePath))
18                {
19                    str = sr.ReadToEnd();
20                    sr.Close();
21                }
22                return str;
23            }
24            catch (Exception ex)
25            {
26                throw ex;
27            }
28        } 
29
30    }
31}
32
原文地址:https://www.cnblogs.com/yy1234/p/14074462.html