using log4net; using log4net.Core; using log4net.Layout; using log4net.Layout.Pattern; namespace IwbZero.ToolCommon.LogHelpers { /// /// Log4Net扩展(扩展一个Engine的LOG LEVEL,输出Engine运行日志) /// public static class Log4NetExtend { public static readonly log4net.Core.Level EngineLevel = new Level(Level.Finer.Value, "ENGINE"); private static void AddEngineLevel(ILog log) { if (!log.Logger.Repository.LevelMap.AllLevels.Contains(EngineLevel)) { log.Logger.Repository.LevelMap.Add(EngineLevel); } } public static void Engine(this ILog log, object message) { AddEngineLevel(log); log.Logger.Log(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, EngineLevel, message, null); } public static void EngineFormat(this ILog log, string message, params object[] args) { AddEngineLevel(log); string formattedMessage = string.Format(message, args); log.Logger.Log(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, EngineLevel, formattedMessage, null); } } /// /// 输出当前进程名转换器 /// public class ProcessPatternConvert : PatternLayoutConverter { private static readonly 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 : PatternLayout { public CustomPatternLayout() { AddConverter("Engine", typeof(ProcessPatternConvert)); } } }