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 = 1000; 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 string.Empty; 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 = 1000, 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; } } }