Bro.Comn/Log/BroClog4net.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Bro.Comn/Log/LogHelper.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Bro.Comn/Log/LogTraceListener.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Bro.Comn/Log/BroClog4net.xml
New file @@ -0,0 +1,63 @@ <?xml version="1.0"?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections> <log4net> <!--Log4net Begin by Bruce 2016.06.14--> <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> <file value=".\logs\" /> <appendToFile value="true" /> <!--log保留天数--> <maxSizeRollBackups value= "30"/> <rollingStyle value="Composite" /> <maxSizeRollBackups value="10" /> <maximumFileSize value="50MB" /> <!--日志文件名是否是固定不变的--> <staticLogFileName value= "false"/> <!--日志文件名格式为:2008-08-31.log--> <datePattern value= "yyyy-MM-dd'.log'"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%2thread][%-5level]> %message%newline" /> </layout> <!--<filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="DEBUG" /> <param name="LevelMax" value="INFO" /> </filter>--> </appender> <!--Log4net Begin by Eric 2017.09.14--> <appender name="ErrorRollingFileAppender" type="log4net.Appender.RollingFileAppender"> <file value=".\logs\" /> <appendToFile value="true" /> <!--log保留天数--> <maxSizeRollBackups value= "30"/> <rollingStyle value="Composite" /> <maxSizeRollBackups value="10" /> <maximumFileSize value="50MB" /> <!--日志文件名是否是固定不变的--> <staticLogFileName value= "false"/> <!--日志文件名格式为:2008-08-31.log--> <datePattern value= "yyyy-MM-dd'_ERR.log'"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%2thread][%-5level]> %message%newline" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="ERROR" /> <param name="LevelMax" value="FATAL" /> </filter> </appender> <!-- setup the root category, add the appenders and set the default level --> <root> <level value="ALL"/> <appender-ref ref="RollingFileAppender" /> <appender-ref ref="ErrorRollingFileAppender" /> </root> <!-- specify the level for some specific categories --> </log4net> <!--Log4net End--> </configuration> Bro.Comn/Log/LogHelper.cs
New file @@ -0,0 +1,124 @@ using log4net; using System.IO; using System.Reflection; namespace Bro.Common.Log { public class LogHelper { public const string DFT_CONFIG_FILE = "BroC.Comn.Log.BroClog4net.xml"; private static ILog log = null; private static LogHelper inst; /// <summary> /// 初始化 /// </summary> /// <returns></returns> public static LogHelper GetInstance() { if (inst == null) inst = new LogHelper(null); return inst; } /// <summary> /// 初始化 /// </summary> /// <param name="configPath"></param> /// <returns></returns> public static LogHelper GetInstance(string configPath) { if (inst == null) inst = new LogHelper(configPath); return inst; } /// <summary> /// 构造函数 /// </summary> /// <param name="configPath"></param> private LogHelper(string configPath) { var type = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType; log = log4net.LogManager.GetLogger(type); // 1. 优先使用手动指定的log4net配置文件 // 2. 不存在手动指定配置文件,则使用默认配置 if (!string.IsNullOrEmpty(configPath) && File.Exists(configPath)) { try { log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(configPath)); } catch { // 默认的log4net配置文件作为内嵌式文件编译进应用集合内 var sm = Assembly.GetExecutingAssembly().GetManifestResourceStream(DFT_CONFIG_FILE); log4net.Config.XmlConfigurator.Configure(sm); } } else { // 默认的log4net配置文件作为内嵌式文件编译进应用集合内 var sm = Assembly.GetExecutingAssembly().GetManifestResourceStream(DFT_CONFIG_FILE); log4net.Config.XmlConfigurator.Configure(sm); } } #region 各级别日志方法 public void Debug(string msg) { log.Debug(msg); } public void DebugFormat(string format, params object[] args) { log.DebugFormat(format, args); } public void Info(string msg) { log.Info(msg); } public void InfoFormat(string format, params object[] args) { log.InfoFormat(format, args); } public void Warn(string msg) { log.Warn(msg); } public void WarnFormat(string format, params object[] args) { log.WarnFormat(format, args); } public void Error(string msg) { log.Error(msg); } public void ErrorFormat(string format, params object[] args) { log.ErrorFormat(format, args); } public void Fatal(string msg) { log.Fatal(msg); } public void FatalFormat(string format, params object[] args) { log.FatalFormat(format, args); } #endregion } } Bro.Comn/Log/LogTraceListener.cs
New file @@ -0,0 +1,217 @@ using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace Bro.Common.Log { /// <summary> /// 默认的日志类 /// </summary> public class LogTraceListener : TraceListener { public delegate void LogTraceEvent(TraceEventType evType, string msg); // 日志事件代理 public LogTraceEvent LogEvent { get; set; } private LogHelper log { get; set; } public LogTraceListener() { log = LogHelper.GetInstance(); } public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string format, params object[] args) { switch (eventType) { case TraceEventType.Critical: log.FatalFormat(format, args); break; case TraceEventType.Information: log.InfoFormat(format, args); break; case TraceEventType.Warning: log.WarnFormat(format, args); break; case TraceEventType.Error: log.ErrorFormat(format, args); break; default: log.DebugFormat(format, args); break; } var sb = new StringBuilder(); sb.AppendFormat(@"{0}[{1}]> ", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff"), eventCache.ThreadId); sb.AppendFormat(format, args); sb.AppendFormat(@"{0}", Environment.NewLine); if (null != LogEvent) { LogEvent(eventType, sb.ToString()); } } public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string message) { switch (eventType) { case TraceEventType.Critical: log.Fatal(message); break; case TraceEventType.Information: log.Info(message); break; case TraceEventType.Warning: log.Warn(message); break; case TraceEventType.Error: log.Error(message); break; default: log.Debug(message); break; } var sb = new StringBuilder(); sb.AppendFormat(@"{0}[{1}]> {2}{3}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff"), eventCache.ThreadId, message, Environment.NewLine); if (null != LogEvent) { LogEvent(eventType, sb.ToString()); } } public override void WriteLine(string msg) { log.Fatal(msg); var sb = new StringBuilder(); sb.AppendFormat(@"{0}[{1}]> {2}{3}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff"), System.Threading.Thread.CurrentThread.ManagedThreadId, msg, Environment.NewLine); if (null != LogEvent) { LogEvent(TraceEventType.Critical, sb.ToString()); } } public override void Write(string msg) { log.Fatal(msg); var sb = new StringBuilder(); sb.AppendFormat(@"{0}[{1}]> {2}{3}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff"), System.Threading.Thread.CurrentThread.ManagedThreadId, msg, Environment.NewLine); if (null != LogEvent) { LogEvent(TraceEventType.Critical, sb.ToString()); } } #region 测试代码(勿删) #if test public override void Write(object o) { int i = 0; i++; } public override void Write(string message, string category) { int i = 0; i++; } public override void Fail(string message) { int i = 0; i++; } public override void Fail(string message, string detailMessage) { int i = 0; i++; } public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string format, params object[] args) { base.TraceEvent(eventCache, source, eventType, id, format, args); } public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string message) { base.TraceEvent(eventCache, source, eventType, id, message); } public override void TraceData(TraceEventCache eventCache, string source, TraceEventType eventType, int id, object data) { base.TraceData(eventCache, source, eventType, id, data); } public override void TraceData(TraceEventCache eventCache, string source, TraceEventType eventType, int id, params object[] data) { base.TraceData(eventCache, source, eventType, id, data); } public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id) { base.TraceEvent(eventCache, source, eventType, id); } public override void TraceTransfer(TraceEventCache eventCache, string source, int id, string message, Guid relatedActivityId) { base.TraceTransfer(eventCache, source, id, message, relatedActivityId); } public override void Write(object o, string category) { base.Write(o, category); } public override void WriteLine(string msg) { int i = 0; i++; } public override void WriteLine(object o) { base.WriteLine(o); } public override void WriteLine(object o, string category) { base.WriteLine(o, category); } public override void WriteLine(string message, string category) { base.WriteLine(message, category); } /// <summary> /// 日志输出 /// </summary> /// <param name="msg"></param> public override void Write(string msg) { int i = 0; i++; } #endif #endregion } }