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






4.67/5 (3投票s)
在本文中,我将详细介绍 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
类中的以下实现,记录除常用级别(DEBUG
、INFO
、WARN
、ERROR
、FATAL
)之外的日志消息
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 文件中都应该是唯一的。
此属性对所有可能值的常见行为
可能值 | 行为 |
任何 | 名称用于引用 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 配置的基本结构。由于此文件中做了很多事情,因此详细说明所有这些有助于我长时间记住这些复杂的事情。