Log4Net 日志记录的实现

一、前言

在上一篇文章【(转载)非常完善的Log4net配置详细说明】介绍了Log4Net的配置说明,如果不知道的可以去看看,这里我们就介绍一下日志记录的实现,说得都比较基础,所以大神请绕过。

二、Log4Net实现

前面介绍了了Log4Net的配置,这里我在把我用的额Log4Net 的配置信息展示出来

<log4net debug="false">
    <root>
      <level value="ALL" />
    root>

    <logger name="PFTLog">
      <level value="DEBUG"/>
      <appender-ref ref="ErrorRollingFileAppender" />
      <appender-ref ref="DebugRollingFileAppender" />
      <appender-ref ref="InfoRollingFileAppender" />
    logger>

    
    <appender name="InfoRollingFileAppender" type="log4net.Appender.RollingFileAppender" >
      <file value="LogFile\Info\" />
      <appendToFile value="true" />
      
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <Encoding value="UTF-8" />
      
      <MaxSizeRollBackups value="20" />
      
      <StaticLogFileName value="false" />
      
      <rollingStyle value="Composite" />
      
      
      <datePattern value="yyyyMMdd-"-Info.log"" />
      
      <maximumFileSize value="1MB" />
      
      
      
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%n记录时间:%date %n线程ID[%thread]
                           %n日志级别:%-5level %n记录类:%logger %n扩展信息:%property
                           -%n异常:%exception %n错误描述:%message%newline" />
      layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="INFO" />
        <param name="LevelMax" value="INFO" />
      filter>
    appender>

    
    <appender name="ErrorRollingFileAppender" type="log4net.Appender.RollingFileAppender" >
      <file value="LogFile\Error\" />
      <appendToFile value="true" />
      
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <Encoding value="UTF-8" />
      
      <MaxSizeRollBackups value="20" />
      
      <StaticLogFileName value="false" />
      
      <rollingStyle value="Composite" />
      
      
      <datePattern value="yyyyMMdd"-Error.log"" />
      
      <maximumFileSize value="1MB" />
      
      
      
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%n记录时间:%date %n线程ID[%thread]
                           %n日志级别:%-5level %n记录类:%logger %n扩展信息:%property
                           -%n异常:%exception %n错误描述:%message%newline" />
      layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="ERROR" />
        <param name="LevelMax" value="ERROR" />
      filter>
    appender>

    
    <appender name="DebugRollingFileAppender" type="log4net.Appender.RollingFileAppender" >
      <file value="LogFile\Debug\" />
      <appendToFile value="true" />
      
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <Encoding value="UTF-8" />
      
      <MaxSizeRollBackups value="20" />
      
      <StaticLogFileName value="false" />
      
      <rollingStyle value="Composite" />
      
      
      <datePattern value="yyyyMMdd"-Debug.log"" />
      
      <maximumFileSize value="1MB" />
      
      
      
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%n记录时间:%date %n线程ID[%thread]
                           %n日志级别:%-5level %n记录类:%logger %n扩展信息:%property
                           -%n异常:%exception %n错误描述:%message%newline" />
      layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="DEBUG" />
        <param name="LevelMax" value="DEBUG" />
      filter>
    appender>

  log4net>
View Code

里面配置了3个日志的等级(ERROR,DEBUG和INFO),根据日志的不同等级,记录到对应的文件里面。

下面是具体的实现代码

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)]
namespace PFT.Standard
{
    public class PFTLog
    {
        private static ILog log = LogManager.GetLogger(Assembly.GetCallingAssembly(), "PFTLog");

        public static void Error(string message, Action RegistedProperties)
        {
            RegistedProperties();
            log.Error(message);
        }
        public static void Error(string message, Exception exception, Action RegistedProperties)
        {
            RegistedProperties();
            log.Error(message, exception);
        }
        public static void Error(Exception exception, Action RegistedProperties)
        {
            RegistedProperties();
            log.Error("系统Error信息", exception);
        }

        public static void Debug(string message, Action RegistedProperties)
        {
            RegistedProperties();
            log.Debug(message);
        }
        public static void Debug(string message, Exception exception, Action RegistedProperties)
        {
            RegistedProperties();
            log.Debug(message, exception);
        }
        public static void Debug(Exception exception, Action RegistedProperties)
        {
            RegistedProperties();
            log.Debug("系统Debug信息", exception);
        }

        public static void Info(string message, Action RegistedProperties)
        {
            RegistedProperties();
            log.Info(message);
        }
        public static void Info(string message, Exception exception, Action RegistedProperties)
        {
            RegistedProperties();
            log.Debug(message, exception);
        }
        public static void Info(Exception exception, Action RegistedProperties)
        {
            RegistedProperties();
            log.Info("系统Info信息", exception);
        }

    }
}

其中RegistedProperties注册扩展字段。

例如:C#代码

  LogManager.Info("测试扩展字段", () => {
                LogicalThreadContext.Properties["LogType"] = "扩展字段内容";
            });

info日志文件为image

这样的字段扩展,可以保存到数据库,也可以与第三方传值字段对接,是不是很方便。

三、总结

Log4Net的基本实现,就先介绍到这里。本来计划把与Kibana结合也一起写了,结果发现Kibana结合到具体项目例子,才更方便讲解。所以接下来,我将开始介绍一些单个的模块实现,然后在基于这些模块,搭建一个简单的项目,然后在基于这个项目,写一些项目应用的文章。

你可能感兴趣的:(Log4Net 日志记录的实现)