• log4.net 自定义日志文件名称


    插件化项目中,遇到这样一个需求,每个插件 或者每个方法 一个日志文件,方便后期错误排查

    源码地址: https://github.com/xlb378917466/SharpHttpServerCase.git

    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;
    [assembly: log4net.Config.XmlConfigurator(Watch = true)]
    namespace TechSvr.Utils
    {
        public static class CustomRollingFileLogger
        {
            private static readonly ConcurrentDictionary<string, ILog> loggerContainer = new ConcurrentDictionary<string, ILog>();
    
            //默认配置  
            private const int MAX_SIZE_ROLL_BACKUPS = 20;
            private const string LAYOUT_PATTERN = "%newline记录时间:%date% 描述:%message%newline";
            private const string DATE_PATTERN = "yyyyMMdd";
            private const string MAXIMUM_FILE_SIZE = "2MB";
            private const string LEVEL = "ALL";
    
            public static ILog GetCustomLogger(string loggerName, string category = null, bool additivity = false)
            {
                return loggerContainer.GetOrAdd(loggerName, delegate (string name)
                {
                    RollingFileAppender newAppender = GetNewFileApender(loggerName, GetFile(category, loggerName), MAX_SIZE_ROLL_BACKUPS, true, true, MAXIMUM_FILE_SIZE, RollingFileAppender.RollingMode.Composite,
                        DATE_PATTERN, LAYOUT_PATTERN);
    
                    log4net.Repository.Hierarchy.Hierarchy repository = (log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository();
                    Logger logger = repository.LoggerFactory.CreateLogger(repository, loggerName);
                    logger.Hierarchy = repository;
                    logger.Parent = repository.Root;
                    logger.Level = GetLoggerLevel(LEVEL);
                    logger.Additivity = additivity;
                    logger.AddAppender(newAppender);
                    logger.Repository.Configured = true;
                    return new LogImpl(logger);
                });
            }
    
            //如果没有指定文件路径则在运行路径下建立 Log{loggerName}.txt  
            private static string GetFile(string category, string loggerName)
            {
                if (string.IsNullOrEmpty(category))
                {
                    return string.Format(@"Logs{0}.txt", loggerName);
                }
                else
                {
                    return string.Format(@"Logs{0}{1}.txt", category, loggerName);
                }
            }
    
            private static Level GetLoggerLevel(string level)
            {
                if (!string.IsNullOrEmpty(level))
                {
                    switch (level.ToLower().Trim())
                    {
                        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;
                    }
                }
                return Level.Debug;
            }
    
            private static RollingFileAppender GetNewFileApender(string appenderName, string file, int maxSizeRollBackups, bool appendToFile = true, bool staticLogFileName = false, string maximumFileSize = "2MB", RollingFileAppender.RollingMode rollingMode = RollingFileAppender.RollingMode.Size, string datePattern = "yyyyMMdd".txt"", string layoutPattern = "%d [%t] %-5p %c  - %m%n")
            {
                RollingFileAppender appender = new RollingFileAppender
                {
                    LockingModel = new FileAppender.MinimalLock(),
                    Name = appenderName,
                    File = file,
                    AppendToFile = appendToFile,
                    MaxSizeRollBackups = maxSizeRollBackups,
                    MaximumFileSize = maximumFileSize,
                    StaticLogFileName = staticLogFileName,
                    RollingStyle = rollingMode,
                    DatePattern = datePattern
                };
                PatternLayout layout = new PatternLayout(layoutPattern);
                appender.Layout = layout;
                layout.ActivateOptions();
                appender.ActivateOptions();
                return appender;
            }
        }
    }
    

     使用方法

      public static Log GetLogger(string filename = "Log")
            {
                ILog logger = CustomRollingFileLogger.GetCustomLogger(filename, DateTime.Now.ToString("yyyyMMdd"));
    
                return new Log(logger);
            }
    
  • 相关阅读:
    Visual Studio的多语言加载项 Multi-Language for Visual Studio
    C#(99):文件监视 FileSystemWatcher
    亿图Edraw Project,甘特图
    C#(99):格式化信息、格式化数字、格式化日期
    小程序访问接口由于缺少中间证书访问失败的问题
    微信授权登录“redirect_uri域名与后台配置不一致”,公众号错误码10003
    如何在idea上新建一个springboot项目
    CSS实现网页背景图片自适应全屏的方法
    Umi与Keycloak整合
    Canal帮助MySQL进行数据同步
  • 原文地址:https://www.cnblogs.com/LittleFeiHu/p/8651481.html
Copyright © 2020-2023  润新知