65.9K
CodeProject 正在变化。 阅读更多。
Home

Log4net:(app/web).config 文件骨架

2018 年 10 月 21 日

CPOL

5分钟阅读

viewsIcon

11627

downloadIcon

121

在本文中,我将详细介绍 log4net 的应用程序配置文件设置。

引言

在 log4net 的第一篇文章 Log4net:首次设置和使用 中,我解释了设置和使用 log4net 进行日志记录的最基本步骤。

在本文中,我将详细介绍 log4net 的 app.config/web.config 文件的非常基本的结构。

Log4net 的配置部分

您已经知道,在应用程序类型项目中添加 log4net.dll 后,您将在配置文件中添加 log4net 的 config-section,如下所示

<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>

App.config 示例

这是 app.config 文件的示例,用于清楚地了解 log4net 的配置设置

 <log4net> 
    <appender name="B_SampleRollingAppenderTest" type="log4net.Appender.RollingFileAppender">
      <param name="CountDirection" value="1"/>
      <param name="threshold" value="DEBUG"/>
      <datePattern>_dd_MMMM_yyyy_dddd_HH_mm</datePattern>
      <dateTimeStrategy type="log4net.Appender.RollingFileAppender+LocalDateTime"/>
      <maximumFileSize>100KB</maximumFileSize>
      <preserveLogFileNameExtension>true</preserveLogFileNameExtension>
      <rollingStyle>date</rollingStyle>
      <file type="log4net.Util.PatternString" value="%envFolderPath{Desktop}\RahulLog.txt"/>
      <immediateFlush>true</immediateFlush>
      <param name="layout" type="log4net.Layout.PatternLayout">
        <param name="conversionPattern">
          MyLoggerName: %stacktracedetail{5},%newline  %identity  
          %newline [AppDomain_a] = %2.4a . %newline [AppDomainFull] = %2.4appdomain . 
          %newline [AppSetting1] = %2.4appsetting . %newline [AppSetting2] = %AppSetting . 
          %newline [AppSetting3] = %appSetting . %newline [LocalDate_d] = %2.4d . 
          %newline [LocalDate_Full] = %2.4date . %newline [EnvironmentFolderPath] = %2.4envFolderPath . 
          %newline [Environment] = %env . %newline [Identity_u] = %2.4u . 
          %newline [Identity_Full] = %2.4identity . %newline [Literal] = %literal . 
          %newline [New-Line_Full] = %newline . %newline [New-Line_n] = %n . 
          %newline [ProcessId] = %2.4processid . %newline [Property_P] = %P . 
          %newline [Property_Full] = %2.4property . %newline [Property_Plural] = %2.4properties . 
          %newline [Property_X] = %2.4X . %newline [Property_mdc] = %2.4mdc . 
          %newline [RandomString] = %2.4random . %newline [User_w] = %2.4w . 
          %newline [User_Full] = %2.4username . %newline [Utc_Time1] = %2.4utcdate . 
          %newline [Utc_Time2] = %2.4utcDate . %newline [Utc_Time3] = %2.4UtcDate . 
          %newline [AspNet-Cache_Data] = %aspnet-cache . 
          %newline [AspNetContextData] = %aspnet-context . 
          %newline [AspNetRequest] = %aspnet-request . %newline [AspNetSession] = %aspnet-session . 
          %newline [Logger_c] = %2.4c . %newline [Logger_Full] = %2.4logger . 
          %newline [TypeName_C] = %2.4C . %newline [TypeName_class] = %2.4class . 
          %newline [TypeName_type] = %2.4type . %newline [Exception] = %2.4exception. %newline %newline
          %newline %2.4exception{message} %newline --> %2.4exception{source} 
          %newline --> %2.4exception{stacktrace} %newline --> %2.4exception{targetsite} 
          %newline --> %2.4exception{helplink}  . %newline [File_F] = %2.4F . 
          %newline File_Full] = %2.4file . %newline [Location_l] = %2.4l . 
          %newline [Location_Full] = %2.4location . %newline [LineNumber_L] = %2.4L . 
          %newline [LineNumber_line] = %2.4line . %newline [Message_m] = %2.4m . 
          %newline [Message_message] = %2.4message . %newline [Method_M] = %2.4M . 
          %newline [Method_Method] = %2.4method . %newline [LogLevel_p] = %2.4p . 
          %newline [LogLevel_Level] = %2.4level . %newline [RelativeTime_r] = %2.4r . 
          %newline [RelativeTime_timestamp] = %2.4timestamp . %newline [StackTrace] = %2.4stacktrace . 
          %newline [Thread_t] = %2.4t . %newline [Thread_Full] = %2.4thread . 
          %newline [NDC_x] = %2.4x . %newline [NDC_Full] = %2.4ndc . 
          %newline [stacktracedetail] = %2.4stacktracedetail .
        </param>
      </param>
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
    </appender>
    <appender name="EventLogAppender_A" type="log4net.Appender.EventLogAppender">
      <param name="threshold" value="DEBUG"/>
      <category value="1"/>
      <applicationName  type="log4net.Util.PatternString">%2.4appsetting{Name1}</applicationName>
      <mapping>
        <eventLogEntryType value="Error"/>
        <level value="Error"/>
      </mapping>
      <mapping>
        <eventLogEntryType value="Warning"/>
        <level value="Warn"/>
      </mapping>
      <mapping>
        <eventLogEntryType value="Information"/>
        <level value="Info"/>
      </mapping>
      <mapping>
        <eventLogEntryType value="SuccessAudit"/>
        <level value="Debug"/>
      </mapping>
      <mapping>
        <eventLogEntryType value="FailureAudit"/>
        <level value="Fatal"/>
      </mapping>
      <eventId>23</eventId>
      <logName type="log4net.Util.PatternString">Rahul1</logName>
      <layout type="log4net.Layout.DynamicPatternLayout">
        <header value="%newline**** Trace Opened Local: 
        %date{yyyy-MM-dd HH:mm:ss.fff} UTC: %utcdate{yyyy-MM-dd HH:mm:ss.fff} ****%newline"/>
        <footer value="**** Trace Closed %date{yyyy-MM-dd HH:mm:ss.fff} ****%newline"/>
        <conversionPattern value="%newline Logged Message : %message"/>
      </layout>
      <securityContext type="log4net.Util.WindowsSecurityContext">
        <credentials>user</credentials>
        <domainName>Domain</domainName>
        <password>welcom@123</password>
        <userName>TESTUser</userName>
      </securityContext>
    </appender>
    <root>
      <level value="DEBUG"/>
      <appender-ref ref="B_SampleRollingAppenderTest"/>
    </root>
  </log4net>

现在有一个父标签 log4net,在此 log4net 标签内部,将添加一个 root 标签和一个或多个 appender 标签。

那么让我们首先从 log4net 标签开始。

<log4net> 标签

这实际上是 config 文件中 log4net 设置的根标签。我们在此标签内定义所有 appender 和一个名为 root 的子标签。

属性

我在这里讨论它的主要属性 threshold,它最常用。

阈值

此属性用于定义基于**日志级别**的日志消息过滤,例如应将哪个级别的日志消息写入目标,哪个应简单忽略。

此属性对所有可能值的常见行为

日志级别可能的值
可能值 内部值 行为
ALL -2147483648 记录**任何**级别的每个日志消息。
VERBOSE 10000
FINEST 10000
TRACE 20000 记录 TRACE 级别或更高级别的日志消息。
FINER 20000 记录 FINAR 级别或更高级别的日志消息。
FINE 30000 记录 FINE 级别或更高级别的日志消息。
DEBUG 30000 记录 DEBUG 级别或更高级别的日志消息。
INFO 40000 记录 INFO 级别或更高级别的日志消息。
注意 50000 记录 NOTICE 级别或更高级别的日志消息。
WARN 60000 记录 WARN 级别或更高级别的日志消息。
ERROR 70000 记录 ERROR 级别或更高级别的日志消息。
SEVERE 80000 记录 SEVERE 级别或更高级别的日志消息。
CRITICAL 90000 记录 CRITICAL 级别或更高级别的日志消息。
ALERT 100000 记录 ALERT 级别或更高级别的日志消息。
致命错误 110000 记录 FATAL 级别或更高级别的日志消息。
EMERGENCY 120000 记录 EMERGENCY 级别或更高级别的日志消息。
2147483647 完全禁用日志记录。

您可以通过 SampleLog4NetLogger 类中的以下实现,记录除常用级别(DEBUGINFOWARNERRORFATAL)之外的日志消息

public void Log(Level logLevel, object message, Exception exceptionData)
        {
            log4NetReal.Logger.Log(null, logLevel, message, exceptionData);
        }

如何在 app.config 中设置它

我们像下面这样在 log4net 标签上定义 threshold

<log4net threshold="ALL">

<appender> 标签

通过此标签,我们定义/配置任何类型 appender 的实例。

如何在 app.config 中设置它

<appender name="B_SampleRollingAppenderTest" type="log4net.Appender.RollingFileAppender">
      <param name="CountDirection" value="1"/>
      <param name="threshold" value="DEBUG"/>
      <maximumFileSize>100KB</maximumFileSize>
      <preserveLogFileNameExtension>true</preserveLogFileNameExtension>
      <rollingStyle>size</rollingStyle>
      <file type="log4net.Util.PatternString" value="..\..\Logs\RahulLog.txt"/>
      <immediateFlush>true</immediateFlush>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%newline Logged Message : %message %newline "/>
      </layout>
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
    </appender>

由于此标签定义特定类型 appender 的实例,因此此标签上提供了 2 个强制属性

1. 类型

此属性用于定义 appender 类型以进行实例化。我们在此属性中定义 appender 类的命名空间限定全名。

此属性对所有可能值的常见行为

可能值 行为
log4net.Appender. AdoNetAppender 用于定义类型为 AdoNetAppender 的 appender 实例
log4net.Appender. AnsiColorTerminalAppender 用于定义类型为 AnsiColorTerminalAppender 的 appender 实例
log4net.Appender. AspNetTraceAppender 用于定义类型为 AspNetTraceAppender 的 appender 实例
log4net.Appender. BufferingForwardingAppender 用于定义类型为 BufferingForwardingAppender 的 appender 实例
log4net.Appender. ColoredConsoleAppender 用于定义类型为 ColoredConsoleAppender 的 appender 实例
log4net.Appender. ConsoleAppender 用于定义类型为 ConsoleAppender 的 appender 实例
log4net.Appender. DebugAppender 用于定义类型为 DebugAppender 的 appender 实例
log4net.Appender. EventLogAppender 用于定义类型为 EventLogAppender 的 appender 实例
log4net.Appender. FileAppender 用于定义类型为 FileAppender 的 appender 实例
log4net.Appender. ForwardingAppender 用于定义类型为 ForwardingAppender 的 appender 实例
log4net.Appender. LocalSyslogAppender 用于定义类型为 LocalSyslogAppender 的 appender 实例
log4net.Appender. ManagedColoredConsoleAppender 用于定义类型为 ManagedColoredConsoleAppender 的 appender 实例
log4net.Appender. MemoryAppender 用于定义类型为 MemoryAppender 的 appender 实例
log4net.Appender. NetSendAppender 用于定义类型为 NetSendAppender 的 appender 实例
log4net.Appender. OutputDebugStringAppender 用于定义类型为 OutputDebugStringAppender 的 appender 实例
log4net.Appender. RemoteSyslogAppender 用于定义类型为 RemoteSyslogAppender 的 appender 实例
log4net.Appender. RemotingAppender 用于定义类型为 RemotingAppender 的 appender 实例
log4net.Appender. RollingFileAppender 用于定义类型为 RollingFileAppender 的 appender 实例
log4net.Appender. SmtpAppender 用于定义类型为 SmtpAppender 的 appender 实例
log4net.Appender. SmtpPickupDirAppender 用于定义类型为 SmtpPickupDirAppender 的 appender 实例
log4net.Appender. TelnetAppender 用于定义类型为 TelnetAppender 的 appender 实例
log4net.Appender. TraceAppender 用于定义类型为 TraceAppender 的 appender 实例
log4net.Appender.UdpAppender 用于定义类型为 UdpAppender 的 appender 实例

2. 名称

此属性用于定义 appender 实例的名称。它可以是任何 string 值。每个实例的名称在此 app.config 文件中都应该是唯一的。

此属性对所有可能值的常见行为

可能值 行为

任何 string

名称用于引用 appender 实例。它在此 app.config 文件中应该唯一。

<root> 标签

<root> 标签用于定义所有用于日志记录的活动 appender,并统一地对所有这些活动 appender 应用基于日志级别的过滤器。

<root> 标签内部,我们定义以下子标签

Appender-ref:

由于我们可以在 <log4net> 标签内部定义 n 个多个 appender 类型(由 log4net 提供)的实例,因此此属性用于定义**仅**应考虑用于记录每个传入消息的活动 appender 实例。

<root> 标签内部可以有一个或多个 <appender-ref> 标签,以分别表示每个活动 appender 实例。

<log4net> 标签内部定义但在 <root> 标签中未声明的 Appender 实例将完全不执行。

此属性对所有可能值的常见行为

可能值 行为
任何 appender 实例名称 此 appender 实例将被考虑用于记录消息。

如何在 app.config 中设置它

<root> <level value="DEBUG"/> 
<appender-ref ref="SampleRollingAppenderTest"/> 
<appender-ref ref="B_SampleRollingAppenderTest"/> </root>

信号强度

此属性用于对仅在 <root> 标签内部定义的活动 appender 实例的日志消息应用日志级别过滤。

此属性对所有可能值的常见行为

它的可能值和行为已在上面的 <log4net> 阈值部分中定义(请参阅上面标题为“日志级别可能的值”的表格)。

如何在 app.config 中设置它

<root>
      <level value="DEBUG"/>
      <appender-ref ref="SampleRollingAppenderTest"/>
      <appender-ref ref="B_SampleRollingAppenderTest"/>
</root>

所以,这就是 log4net 设置的配置文件的非常基本的结构。

关注点

通过探索 log4net,我尝试探索 log4net 配置的基本结构。由于此文件中做了很多事情,因此详细说明所有这些有助于我长时间记住这些复杂的事情。

© . All rights reserved.