log4net
是一个功能强大的日志记录工具,通过配置文件可以灵活地控制日志的输出方式、格式、级别等。以下是对 log4net
配置文件常见配置项的详细介绍:
根元素 <log4net>
这是 log4net
配置文件的根元素,所有配置项都要包含在该元素内。
<log4net>
<!-- 其他配置项 -->
</log4net>
附加器(Appenders) <appender>
附加器用于指定日志的输出目标,比如文件、控制台、数据库等。log4net
提供了多种内置的附加器,你也可以自定义附加器。每个附加器都有一个唯一的名称,可通过 name
属性来指定。
1. 控制台附加器(ConsoleAppender)
将日志输出到控制台。
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
-
type
:指定附加器的类型,这里是log4net.Appender.ConsoleAppender
。 -
<layout>
:定义日志的输出格式,使用PatternLayout
可以自定义格式,conversionPattern
指定具体的格式字符串。 - 在
log4net.Layout.PatternLayout
里,借助转换模式字符串能够自定义日志输出的格式,此字符串由一系列标记构成。下面为你详细介绍常用的标记及其用途:
基本信息标记
-
%date
:输出日志记录的日期和时间,默认格式是yyyy-MM-dd HH:mm:ss,fff
,可通过%date{format}
来指定格式,像%date{HH:mm:ss}
。 -
%level
:输出日志的级别(例如DEBUG
、INFO
、WARN
、ERROR
、FATAL
)。 -
%logger
:输出记录日志的记录器名称。 -
%message
:输出日志的具体消息内容。 -
%newline
:输出一个换行符。
线程与上下文标记
-
%thread
:输出产生日志记录的线程名称。 -
%property{name}
:输出线程上下文属性中指定名称的值。比如,你可以在代码里设置log4net.ThreadContext.Properties["UserName"] = "John";
,接着使用%property{UserName}
输出。
类与方法标记
-
%class
:输出记录日志的类的全限定名。 -
%method
:输出记录日志的方法名。
位置信息标记
-
%file
:输出记录日志的源文件名称。 -
%line
:输出记录日志的代码所在的行号。
栈跟踪标记
-
%exception
:输出异常的堆栈跟踪信息,通常用于ERROR
或FATAL
级别的日志。
2. 文件附加器(FileAppender 和 RollingFileAppender)
将日志输出到文件。RollingFileAppender
支持文件滚动,当文件达到一定大小或日期变化时,会创建新的日志文件。
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="logs\log.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
-
<file>
:指定日志文件的路径和名称。 -
<appendToFile>
:设置是否将日志追加到现有文件中。 -
<rollingStyle>
:指定文件滚动的方式,可选值有Size
(按文件大小滚动)、Date
(按日期滚动)等。 -
<maxSizeRollBackups>
:指定保留的旧日志文件的最大数量。 -
<maximumFileSize>
:指定每个日志文件的最大大小。 -
<staticLogFileName>
:设置是否使用静态的日志文件名。
3. 数据库附加器(AdoNetAppender)
将日志存储到数据库中。
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="1" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="Data Source=SERVER_NAME;Initial Catalog=DATABASE_NAME;User ID=USERNAME;Password=PASSWORD" />
<commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread" />
</layout>
</parameter>
<!-- 其他参数 -->
</appender>
-
<bufferSize>
:指定日志记录的缓冲区大小。 -
<connectionType>
:指定数据库连接类型。 -
<connectionString>
:指定数据库连接字符串。 -
<commandText>
:指定插入日志记录的 SQL 语句。 -
<parameter>
:定义 SQL 语句中的参数,包括参数名、数据类型和布局。
记录器(Loggers) <logger>
和 <root>
记录器用于控制不同命名空间或类的日志输出级别和使用的附加器。
1. 根记录器(Root Logger) <root>
根记录器是所有记录器的父记录器,为整个应用程序设置默认的日志级别和附加器。
<root>
<level value="ALL" />
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="RollingFileAppender" />
</root>
-
<level>
:指定日志的输出级别,可选值有ALL
、DEBUG
、INFO
、WARN
、ERROR
、FATAL
、OFF
。 -
<appender-ref>
:引用要使用的附加器,通过ref
属性指定附加器的名称。
2. 自定义记录器(Custom Logger) <logger>
为特定的命名空间或类设置日志级别和附加器,会覆盖根记录器的设置。
<logger name="YourNamespace.YourClass">
<level value="DEBUG" />
<appender-ref ref="ConsoleAppender" />
</logger>
-
name
:指定记录器的名称,通常是命名空间或类的全限定名。 -
<level>
和<appender-ref>
的作用与根记录器中的相同。
过滤器(Filters) <filter>
过滤器用于根据特定条件过滤日志记录,只允许符合条件的日志记录通过。常见的过滤器有 LevelMatchFilter
、LevelRangeFilter
等。
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="INFO" />
<levelMax value="ERROR" />
</filter>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
-
<filter>
:指定过滤器的类型。 -
<levelMin>
和<levelMax>
:指定日志级别的范围,只有在该范围内的日志记录才会被输出。
配置示例
以下是一个完整的 log4net
配置文件示例:
<log4net>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="logs\log.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="RollingFileAppender" />
</root>
</log4net>
这个配置文件将日志同时输出到控制台和文件,日志级别为 ALL
,即输出所有级别的日志。
通过合理配置 log4net
的配置文件,可以满足不同场景下的日志记录需求。