tangxu
2024-05-03 190984daafd95462832a74b21def12b0209e74bf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.Concurrent;
using System.Configuration;
 
using log4net;
using log4net.Appender;
using log4net.Core;
using log4net.Layout;
using log4net.Repository;
using log4net.Repository.Hierarchy;
using log4net.Config;
using System.IO;
using System.Web;
 
//[assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace IStation
{
    internal static class LogConfig
    {
        //默认配置 
        private const string LEVEL = "All";//等级
        private const bool APPENDTOFILE = true;//是否追加到文件
        private const long MAXFILESIZE = 10240;//最大文件尺寸
        private const int MAXSIZEROLLBACKUPS = 100;
        private const bool STATICLOGFILENAME = false;//文件名称是否固定
        private const string ROLLINGSTYLE = "Date";
        private const string DATEPATTERN = "yyyyMMdd\".txt\"";
        private const string CONVERSIONPATTERN = "%d|%m|%n";
 
        //日志根目录
        private const string _folder = "Logs";
 
        //获取日志
        public static ILog GetLogger(string name, bool additivity = false)
        {
            var loggerName = GetLoggerName(name);
            if (LogManager.Exists(loggerName) == null)
            {
                RollingFileAppender appender = CreateFileAppender(loggerName, GetFolder(name));
                Hierarchy hierarchy= (Hierarchy)LogManager.GetRepository();
                Logger logger= hierarchy.GetLogger(loggerName,hierarchy.LoggerFactory);
                logger.Hierarchy = hierarchy;
                logger.Level = Level.All;
                logger.Parent = hierarchy.Root;
                logger.Additivity = additivity;
                logger.AddAppender(appender);
                logger.Repository.Configured = true;
            }
            var log = LogManager.GetLogger(loggerName);
            return log;
        }
 
        //获取logger名称
        private static string GetLoggerName(string name)
        {
            return $"log{name.ToLower()}";
        }
 
        //获取文件夹
        private static string GetFolder(string name)
        {
            if (string.IsNullOrEmpty(name))
                return default;
            return $"{_folder}\\{name}\\";
        }
 
        //获取日志等级
        private static Level GetLoggerLevel(string level)
        {
            if (string.IsNullOrEmpty(level))
                return Level.All;
            switch (level.ToLower())
            {
                case "all": return Level.All;
                case "debug": return Level.Debug;
                case "info": return Level.Info;
                case "warn": return Level.Warn;
                case "error": return Level.Error;
                case "fatal": return Level.Fatal;
                default: return Level.All;
            }
        }
 
        //创建FileAppender
        private static RollingFileAppender CreateFileAppender
            (
                string appenderName,
                string file,
                bool appendToFile = true,
                long maxFileSize = 10240,
                int maxSizeRollBackups = 100,
                bool staticLogFileName = false,
                RollingFileAppender.RollingMode rollingMode = RollingFileAppender.RollingMode.Date,
                string datePattern = "yyyyMMdd\".txt\"",
                string layoutPattern = "%d|%m|%n")
        {
            RollingFileAppender appender = new RollingFileAppender
            {
                LockingModel = new FileAppender.MinimalLock(),
                Name = appenderName,
                File = file,
                AppendToFile = appendToFile,
                MaxFileSize = maxFileSize,
                MaxSizeRollBackups = maxSizeRollBackups,
                StaticLogFileName = staticLogFileName,
                RollingStyle = rollingMode,
                DatePattern = datePattern
            };
            PatternLayout layout = new PatternLayout(layoutPattern);
            appender.Layout = layout;
            layout.ActivateOptions();
            appender.ActivateOptions();
            return appender;
        } 
 
 
 
 
    }
}