Log4Net 使用说明

类库结构:

 
  public enum ELogLevel
    {
        /// <summary>
        /// 一般信息
        /// </summary>
        Info=1,

        /// <summary>
        /// 调试信息
        /// </summary>
        Debug=2,

        /// <summary>
        /// 跟踪信息
        /// </summary>
        Trace=3,

        /// <summary>
        /// 错误信息
        /// </summary>
        Error=4,

        /// <summary>
        /// 严重错误
        /// </summary>
        Fatal=5

    }

 

 public class FileLogger : ILogger
    {
        private ELogLevel _configLogLevel;
        private static ILog _log = null;

        public FileLogger()
        {
            Enum.TryParse(GetAppSettingValue("LogLevel"), out _configLogLevel);
            string logName = GetAppSettingValue("LogName");
            
#if DEBUG
            string configPath = @"E:\willDeleteProject\ZLJ.WorkSpace\ZLJ.Log4net\log4net.config";
#else
            string configPath = Path.Combine(HttpRuntime.BinDirectory, "log4net.config");
#endif
            XmlConfigurator.ConfigureAndWatch(new FileInfo(configPath));
            _log = LogManager.GetLogger("logName");

        }
        /// <summary>
        /// 写入日志
        /// </summary>
        /// <param name="msg">日志内容</param>
        /// <param name="logLevel">日志级别</param>
        public void WriteLog(string msg, ELogLevel logLevel = ELogLevel.Info)
        {
            if (string.IsNullOrWhiteSpace(msg) || Enable) return;

            bool aa = _log.IsDebugEnabled;
            //传入日志级别大于配置文件中的日志级别
            if (logLevel>=_configLogLevel)
            {
                switch (logLevel)
                {
                    case ELogLevel.Info:
                        _log.Info(msg);
                        break;
                    case ELogLevel.Debug:
                        _log.Debug(msg);
                        break;
                    case ELogLevel.Trace:
                        _log.Warn(msg);
                        break;
                    case ELogLevel.Error:
                        _log.Error(msg);
                        break;
                    case ELogLevel.Fatal:
                        _log.Fatal(msg);
                        break;
                }
            }
        }
        public void Dispose()
        {
        }

        /// <summary>
        /// log4net 是否可用
        /// </summary>
        public bool Enable
        {
            get
            {
                bool enable = false;
                bool.TryParse(GetAppSettingValue("LogEnable"),out enable);
                return enable;
            }
        }

        /// <summary>
        /// 读取appSettings中的值
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        private string GetAppSettingValue(string key)
        {
            string value = null;
            try { value = System.Configuration.ConfigurationManager.AppSettings[key]; }
            catch { value = string.Empty; }
            return value;
        }
    }
    public interface ILogger : IDisposable
    {
        void WriteLog(string msg, ELogLevel logLevel = ELogLevel.Info);

        bool Enable { get; }
    }

 

配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
  <log4net>
    <!--定义输出到文件中-->
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender,log4net">
      <!--文件存放位置-->
      <param name="File" value="D:\App_Log\logs\local222.txt"></param>
      <param name="AppendToFile" value="true"></param>
      <param name="RollingStyle" value="Date"></param>
      <param name="DatePattern" value="yyyy.MM.dd"></param>
      <param name="StaticLogFileName" value="true"></param>
      <layout type="log4net.Layout.PatternLayout,log4net">
        <!--样例-->
        <param name="ConversionPattern" value="%-5level [%logger][%date] - %message %newline"/>
      </layout>
    </appender>

    <!--定义输出到控制台命令中-->
    <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
      <mapping>
        <level value="ERROR" />
        <foreColor value="Red, HighIntensity" />
      </mapping>
      <mapping>
        <level value="Info" />
        <foreColor value="Green, HighIntensity" />
      </mapping>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%-5level [%logger][%date] - %message %newline"/>
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="Info" />
        <param name="LevelMax" value="Fatal" />
      </filter>
    </appender>
    
    <!--定义输出到windows事件中-->
    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%-5level [%logger][%date] - %message %newline"/>
      </layout>
    </appender>

    <!--定义输出到数据库中,这里输出到SqlServer-->
    <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
      <bufferSize value="10"/>
      <connectionType value="System.Data.SqlClient.SqlConnection,System.Data,Version=1.0.3300.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"/>
      <connectionString value="Data Source=(local);uid=sa;pwd=123456;Initial Catalog=Test1;"/>
      <commandText value="INSERT INTO LogTest([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES(@log_date,@log_thread,@log_level,@log_logger,@log_message,@log_exception)"/>
      <parameter>
        <parameterName value="@log_date"/>
        <dbType value="DateTime"/>
        <layout type="log4net.Layout.RawTimeStampLayout"/>
        <!--可以认为是记录日志的时间-->
      </parameter>
      <parameter>
        <parameterName value="@log_thread"/>
        <dbType value="String"/>
        <size value="255"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%thread"/>
          <!--记录日志时的线程号-->
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@log_level"/>
        <dbType value="String"/>
        <size value="50"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%level"/>
          <!--日志级别-->
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@log_logger"/>
        <dbType value="String"/>
        <size value="255"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%logger"/>
          <!--哪个记录器存储的该日志-->
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@log_message"/>
        <dbType value="String"/>
        <size value="4000"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message"/>
          <!--日志信息-->
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@log_exception"/>
        <dbType value="String"/>
        <size value="255"/>
        <layout type="log4net.Layout.ExceptionLayout"/>
        <!--异常信息-->
      </parameter>
    </appender>

    <!--定义输出到指定邮箱-->
    <appender name="SmtpAppender" type="log4net.Appender.StmpAppender">
      <authentication value="Basic"/>
      <to value="zhanglijun@tidebuy.net"/>
      <from value="527563689@qq.com"/>
      <username value=""/>
      <password value=""/>
      <subject value=""/>
      <smtpHost value=""/>
      <bufferSize value="512"/>
      <layout type="log4net.Core.LevelEvaluator">
        <conversionPattern value="%-5level [%logger][%date] - %message %newline"/>
      </layout>
    </appender>

    <root>
      <appender-ref ref="ADONetAppender"/>
    </root>
  </log4net>
</configuration>

 

posted @ 2019-04-30 21:53  NCat  阅读(212)  评论(0)    收藏  举报