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
的配置文件,可以满足不同场景下的日志记录需求。