Используйте Common.Logging+log4net для стандартизации управления журналами.

Common.Logging+(log4net/NLog/)

общее ведение журнала — это общий интерфейс журнала, а log4net — мощная конкретная реализация, также могут использоваться другие различные реализации, такие как журнал EntLib, NLog и т. д.

Common.Logging может изменять конфигурацию и заменять различные классы реализации журнала без изменения какого-либо кода.

Проект .net использует CommonLogging:

1. Добавляем необходимые сборки: Common.Logging.dll, Common.Logging.Core.dll, Common.Logging.log4net1215.dll, log4net.dll

Особое внимание нужно обратить на то, чтобы версии Common.Logging.log4net1215.dll и log4net.dll совпадали, для добавления ссылок рекомендуется использовать NuGet of VS, а при добавлении есть подробные инструкции.

2. Напишите файл конфигурации

  <configSections>
    <sectionGroup name="common">
      <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
    </sectionGroup>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
  <common>
    <!--[DEBUG < INFO < WARN < ERROR < FATAL]-->
    <logging>
      <!--<factoryAdapter type="Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter, Common.Logging">
        <arg key="level" value="WARN" />
        <arg key="showLogName" value="true" />
        <arg key="showDataTime" value="true" />
        <arg key="dateTimeFormat" value="yyyy/MM/dd HH:mm:ss:fff" />
      </factoryAdapter>-->
      <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net1215">
        <!--FILE
              FILE-WATCH
              INLINE
              EXTERNAL-->
        <!--<arg key="configType" value="INLINE" />-->
              <arg key="configType" value="FILE-WATCH" />
              <arg key="configFile" value="~/log4net.config" />
        <!--log4net使用独立的配置文件-->
      </factoryAdapter>
    </logging>
  </common>  
<arg key="configType" value="FILE-WATCH" />

<arg key="configFile" value="~/log4net.config" />

Приведенная выше конфигурация означает размещение конфигурации log4net в отдельном файле.

<!--<arg key="configType" value="INLINE" />-->

Это означает, что конфигурация log4net прописывается прямо в конфигурационном файле.

Содержимое файла log4net.config следующее:

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <!--<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger %ndc - %message%newline" />
      </layout>
    </appender>-->
  <appender name="InfoRollingLogFileAppender" type="log4net.Appender.RollingFileAppender, log4net">
    <param name="LockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
    <param name="File" value="logs/" />
    <param name="StaticLogFileName" value="false" />
    <param name="DatePattern" value="'Info-'yyyy-MM-dd.'log'" />
    <param name="AppendToFile" value="true" />
    <param name="MaxSizeRollBackups" value="10" />
    <param name="MaximumFileSize" value="5MB" />
    <param name="RollingStyle" value="Date" />
    <!--Size ==- Date-->
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
    </layout>
    <filter type="log4net.Filter.LevelRangeFilter">
      <levelMin value="DEBUG"/>
      <levelMax value="WARN"/>
    </filter>
  </appender>
  <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender, log4net">
    <param name="LockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
    <param name="File" value="logs/" />
    <param name="StaticLogFileName" value="false" />
    <param name="DatePattern" value="'Error-'yyyy-MM-dd.'log'" />
    <param name="AppendToFile" value="true" />
    <param name="MaxSizeRollBackups" value="10" />
    <param name="MaximumFileSize" value="5MB" />
    <param name="RollingStyle" value="Date" />
    <!--Size ==- Date-->
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
    </layout>
    <filter type="log4net.Filter.LevelRangeFilter">
      <levelMin value="ERROR"/>
      <levelMax value="FATAL"/>
    </filter>
  </appender>
  <appender name="DefaultRollingLogFileAppender" type="log4net.Appender.RollingFileAppender, log4net">
    <param name="LockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
    <param name="File" value="logs/" /><!--文件保存的路径-->
    <param name="StaticLogFileName" value="false" /><!--文件名动态生成-->
    <param name="DatePattern" value="'Default-'yyyy-MM-dd.'log'" /><!--文件名命名规则-->
    <param name="AppendToFile" value="true" />
    <param name="MaxSizeRollBackups" value="10" />
    <param name="MaximumFileSize" value="5MB" /><!--文件超过5M将创建新文件-->
    <param name="RollingStyle" value="Date" />
    <!--Size ==- Date-->
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" /><!--日志内容格式-->
    </layout>
    <filter type="log4net.Filter.LevelRangeFilter"><!--日志级别过滤器:此附加器只附加指定级别的日志-->
      <levelMin value="DEBUG"/>
      <levelMax value="FATAL"/>
    </filter>
  </appender>
  <root>
    <level value="ALL" />
    <appender-ref ref="RollingLogFileAppender" />
    <appender-ref ref="InfoRollingLogFileAppender" />
  </root>
  <logger name="MyApp.DataAccessLayer">
    <level value="DEBUG" />
  </logger>
  <!-- ALL DEBUG INFO WARN ERROR FATAL OFF [DEBUG < INFO < WARN < ERROR < FATAL] 大范围 到 小范围-->
  <logger name="LogDemoWeb._Default" debug="false">
    <level value="ALL" />
    <appender-ref ref="DefaultRollingLogFileAppender" />
  </logger>
</log4net>

Рекомендуется читать этот документ снизу вверх, красная часть вверху — это всего три логгера:

Корневой регистратор, log4net позволяет использовать только один корневой регистратор для вывода глобального журнала.

<root>
<level value="ALL" />
<appender-ref ref="RollingLogFileAppender" />
<appender-ref ref="InfoRollingLogFileAppender" />
</root>

Среди них: <level value="ALL" /> указывает, что регистратор будет отправлять журналы всех уровней в добавление, настроенное здесь.

Здесь настраиваются два приложения: RollingLogFileAppender и InfoRollingLogFileAppender (узлы добавления в файле конфигурации).

Два регистратора:
первый:

<logger name="MyApp.DataAccessLayer">
<level value="DEBUG" />
</logger>

Никакой аппендер (appender) не будет настроен для вывода лога

второй:

<logger name="LogDemoWeb._Default" debug="false">
<level value="ALL" />
<appender-ref ref="DefaultRollingLogFileAppender" />
</logger>

Если добавление DefaultRollingLogFileAppender настроено, журнал будет выводиться в соответствии с соответствующим добавлением выше.

Можно определить несколько приложений, это просто оператор, используется ли он или нет, зависит от того, ссылаются ли на регистратор.

Пример конфигурации аппендера DefaultRollingLogFileAppender (аппендера) в этом файле конфигурации выглядит следующим образом:

<appender name="DefaultRollingLogFileAppender" type="log4net.Appender.RollingFileAppender, log4net">
<param name="LockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
<param name="File" value="logs/" /><!--文件保存的路径-->
<param name="StaticLogFileName" value="false" /><!--文件名动态生成-->
<param name="DatePattern" value="'Default-'yyyy-MM-dd.'log'" /><!--文件名命名规则-->
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="10" />
<param name="MaximumFileSize" value="5MB" /><!--文件超过5M将创建新文件-->
<param name="RollingStyle" value="Date" />
<!--Size ==- Date-->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" /><!--日志内容格式-->
</layout>
<filter type="log4net.Filter.LevelRangeFilter"><!--日志级别过滤器:此附加器只附加指定级别的日志-->
<levelMin value="DEBUG"/>
<levelMax value="FATAL"/>
</filter>
</appender>

Пункты конфигурации приложения:

1. name="DefaultRollingLogFileAppender"
определяет имя аппендера, которое удобно вызывать логгеру
2. type="log4net.Appender.RollingFileAppender, log4net"
- тип аппендера, конкретный класс реализации аппендера, log4net предоставляет различные методы хранения журналов (дополнительные), здесь представлены разные классы реализации приложений.
Подробные сведения о типах приложений см. в главе о приложениях в официальной документации:
http://logging.apache.org/log4net/release/manual/introduction.html .

После проделанной выше настройки код довольно прост,
обычно я пишу его так:

 /// <summary>
    /// Common.Logging日志示例
    /// </summary>
    public class LogDemoBLL1
    {
        //获取ILog实例
        public static ILog logObj = Common.Logging.LogManager.GetLogger<LogDemoBLL1>();
        public LogDemoBLL1()
        {

        }
        public void Method1()
        {

            logObj.Trace("This is a Trace Log!");
            logObj.Debug("This is a Debug Log!");
            logObj.Info("This is a Info Log!");
            logObj.Warn("This is a Warn Log!");
            //将在Info-yyyy-MM-dd.log输出以下内容(根据配置输出有可能不一样):
            //2016-08-18 21:28:44,095 [10] DEBUG LogDemo.BLL.LogDemoBLL1 - This is a Debug Log!
            //2016-08-18 21:28:44,101 [10] INFO  LogDemo.BLL.LogDemoBLL1 - This is a Info Log!
            //2016-08-18 21:28:44,101 [10] WARN  LogDemo.BLL.LogDemoBLL1 - This is a Warn Log!

            logObj.Error("This is a Error Log!");
            logObj.Fatal("This is a Fatal Log!");
            //将在Error-yyyy-MM-dd.log输出以下内容(根据配置输出有可能不一样):
            //2016-08-18 21:28:44,101 [10] ERROR LogDemo.BLL.LogDemoBLL1 - This is a Error Log!
            //2016-08-18 21:28:44,102 [10] FATAL LogDemo.BLL.LogDemoBLL1 - This is a Fatal Log!
            try
            {
                throw new Exception("Throw an Exception For Test");
            }
            catch (Exception ex)
            {
                //异常日志
                logObj.Error(ex);
                //将在Error-yyyy-MM-dd.log输出以下内容(根据配置输出有可能不一样):
                //2016-08-18 21:28:44,106 [10] ERROR LogDemo.BLL.LogDemoBLL1 - System.Exception: Throw an Exception For Test
                //  在 LogDemo.BLL.LogDemoBLL1.Method1() 位置 E:\MyWork\CSharpProject\CSharp\LogDemo\LogDemo\LogDemo\BLL\LogDemoBLL1.cs:行号 34

            }

        }
    }

При необходимости log4net также может отображать логи в интерфейсе программы через класс log4net.Appender.MemoryAppender. Конкретное использование не будет подробно описано.


Подробное введение в log4net можно найти в следующей статье:
Официальный сайт Common.Logging:
http://commons.apache.org/proper/commons-logging/Common.Logging
Введение на китайском языке:
http://www.cnblogs. com/chen -whutgis/p/4129271.html
официальный сайт log4net
http://logging.apache.org/log4net/release/manual/introduction.html

Supongo que te gusta

Origin blog.csdn.net/qq_41872328/article/details/126705281
Recomendado
Clasificación