Jack.Peng
2021-03-15 669f258cbe145ba37cee5b31015c6cdc8b08bdfa
1.修复Bro.Comn丢失Util文件加里的内容。
3个文件已添加
404 ■■■■■ 已修改文件
Bro.Comn/Log/BroClog4net.xml 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Bro.Comn/Log/LogHelper.cs 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Bro.Comn/Log/LogTraceListener.cs 217 ●●●●● 补丁 | 查看 | 原始文档 | 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
    }
}