Nlog、Log4Net 的一个小扩展(增加自定义LEVEL)
发布日期:2021-05-09 09:35:29 浏览次数:12 分类:博客文章

本文共 6929 字,大约阅读时间需要 23 分钟。

���������ELK���������������������������������������������������������������������������������������������������������������������(level)������������������������������������������Nlog���Log4Net���������Process���������level������������������������������������������������������������������������PROCESS LEVEL���������������������������������������������������������������������������������������������������������������

NlogExtend.cs���(Nlog���������)���������������������������

public static class NlogExtend    {        public static void Process(this ILogger logger, string message = "RUNNING")        {            var logEventInfo = new LogEventInfo(LogLevel.Trace, logger.Name, message);            logEventInfo.Properties["custLevel"] = Tuple.Create(9, "Process");            logger.Log(logEventInfo);        }    }    [LayoutRenderer("levelx")]    public class LevelExLayoutRenderer : LevelLayoutRenderer    {        protected override void Append(StringBuilder builder, LogEventInfo logEvent)        {            if (logEvent.Level == LogLevel.Trace && logEvent.Properties.ContainsKey("custLevel"))            {                var custLevel = logEvent.Properties["custLevel"] as Tuple
; if (custLevel == null) { throw new InvalidCastException("Invalid Cast Tuple
"); } switch (this.Format) { case LevelFormat.Name: builder.Append(custLevel.Item2); break; case LevelFormat.FirstCharacter: builder.Append(custLevel.Item2[0]); break; case LevelFormat.Ordinal: builder.Append(custLevel.Item1); break; } } else { base.Append(builder, logEvent); } } }

������Nlog���LogLevel������������������������������New ���������������������������������Level���������������������������������level���������LogEventInfo������������������������������������������������������LevelLayoutRenderer���������������������������OK���

���������������

config���������(���levelx���������������level������)

���

���������������PROCESS���������

///     /// ������NLOG������������������������    ///     public static class LogUtil    {        private readonly static ILogger logger = null;        static LogUtil()        {            NLog.Config.ConfigurationItemFactory.Default.LayoutRenderers.RegisterDefinition("levelx", typeof(WMSNWPP.LevelExLayoutRenderer));//������������������������������������������config������������levelx������������            logger = LogManager.GetCurrentClassLogger();        }        public static void Info(string msg)        {            try            {                logger.Info(msg);            }            catch            { }        }        public static void Error(Exception ex)        {            try            {                logger.Error(ex);            }            catch            { }        }        public static void Error(string msg)        {            try            {                Log(LogLevel.Error, msg);            }            catch            { }        }        public static void Warn(string msg)        {            try            {                logger.Warn(msg);            }            catch            { }        }        public static void Log(LogLevel level, string msg)        {            try            {                logger.Log(level, msg);            }            catch            { }        }        public static void Process(string message = "RUNNING")        {            try            {                logger.Process(message);            }            catch            { }        }    }//���������Process������������LogUtil.Process();

 ���������Nlog������������������Log4Net������������������

Log4NetExtend.cs:(Nlog���������)���������������������������

///     /// Log4Net���������������������Process���LOG LEVEL���������������������������������������)    /// Author:Zuowenjun    /// Date:2018-4-25    ///     public static class Log4NetExtend    {        public static readonly log4net.Core.Level ProcessLevel = new log4net.Core.Level(10001, "PROCESS");        private static void AddProcessLevel(log4net.ILog log)        {            if (!log.Logger.Repository.LevelMap.AllLevels.Contains(ProcessLevel))            {                log.Logger.Repository.LevelMap.Add(ProcessLevel);            }        }        public static void Process(this log4net.ILog log, string message)        {            AddProcessLevel(log);            log.Logger.Log(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType,                ProcessLevel, message, null);        }        public static void ProcessFormat(this log4net.ILog log, string message, params object[] args)        {            AddProcessLevel(log);            string formattedMessage = string.Format(message, args);            log.Logger.Log(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType,                ProcessLevel, formattedMessage, null);        }    }    ///     /// ������������������������������    ///     public class ProcessPatternConvert : PatternLayoutConverter    {        private readonly static string processName = System.Diagnostics.Process.GetCurrentProcess().ProcessName;        protected override void Convert(System.IO.TextWriter writer, log4net.Core.LoggingEvent loggingEvent)        {            writer.Write(processName);//���������������������        }    }    public class CustomPatternLayout : log4net.Layout.PatternLayout    {        public CustomPatternLayout()        {            this.AddConverter("proc", typeof(ProcessPatternConvert));        }    }

���log4net���������Nlog������������������������New Level������������������������������������level���������������������������������������������������������������������������������������������ProcessPatternConvert���CustomPatternLayout���������CustomPatternLayout������������������ProcessPatternConvert���������������������������������������������������������config������������������proc���������������������������config���������������

������������������������

public static ILog Logger = LogManager.GetLogger("KyAutoTimingExecSystem");Logger.Process(msg);

 ������������������������������������������������������������������������������������������������������������������������������������������������������������

 

上一篇:重复造轮子,编写一个轻量级的异步写日志的实用工具类(LogAsyncWriter)
下一篇:解决记录:win10 无法安装VS2017,visual studio installer下载进度始终为0

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年04月11日 15时22分30秒