Apache logging services logo

Apache log4net™ 配置示例

概述

本文档介绍了内置追加器的配置示例。这些配置旨在与 log4net.Config.DOMConfiguratorlog4net.Repository.Hierarchy.Hierarchy 一起使用。

这些示例绝不是追加器的详尽配置。有关可以指定给每个追加器的参数的完整列表以及每个选项的更多详细信息,请参阅追加器的 SDK 文档。

AdoNetAppender

AdoNetAppender 的配置取决于为目标数据库选择的提供程序。以下是一些示例。

MS SQL Server

以下示例展示了如何配置 AdoNetAppender 以将消息记录到 SQL Server 数据库。事件以 100 个(BufferSize)为一批写入。ConnectionType 指定用于连接到数据库的 System.Data.IDbConnection 的完全限定类型名称。ConnectionString 是特定于数据库提供程序的。CommandText 是预备语句或存储过程,在本例中是预备语句。预备语句或存储过程的每个参数都用其名称、数据库类型和呈现参数值的布局指定。

数据库表定义为

CREATE TABLE [dbo].[Log] (
    [Id] [int] IDENTITY (1, 1) NOT NULL,
    [Date] [datetime] NOT NULL,
    [Thread] [varchar] (255) NOT NULL,
    [Level] [varchar] (50) NOT NULL,
    [Logger] [varchar] (255) NOT NULL,
    [Message] [varchar] (4000) NOT NULL,
    [Exception] [varchar] (2000) NULL
)
                    

追加器配置为

<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
    <bufferSize value="100" />
    <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    <connectionString value="data source=[database server];initial catalog=[database name];integrated security=false;persist security info=True;User ID=[user];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>
    <parameter>
        <parameterName value="@log_level" />
        <dbType value="String" />
        <size value="50" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%level" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value="@logger" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%logger" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%message" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value="@exception" />
        <dbType value="String" />
        <size value="2000" />
        <layout type="log4net.Layout.ExceptionLayout" />
    </parameter>
</appender>
                    

MS Access

此示例展示了如何将事件写入 Access 数据库。

<appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender">
    <connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\log\access.mdb;User Id=;Password=;" />
    <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message]) VALUES (@log_date, @thread, @log_level, @logger, @message)" />
    <parameter>
        <parameterName value="@log_date" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value="@thread" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%thread" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value="@log_level" />
        <dbType value="String" />
        <size value="50" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%level" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value="@logger" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%logger" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="1024" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%message" />
        </layout>
    </parameter>
</appender>
                    

Oracle9i

此示例展示了如何将事件写入 Oracle9i 数据库。

数据库表定义为

create table log (
   Datetime timestamp(3),
   Thread varchar2(255),
   Log_Level varchar2(255),
   Logger varchar2(255),
   Message varchar2(4000)
   );
                    

追加器配置为

<appender name="AdoNetAppender_Oracle" type="log4net.Appender.AdoNetAppender">
    <connectionType value="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    <connectionString value="data source=[mydatabase];User ID=[user];Password=[password]" />
    <commandText value="INSERT INTO Log (Datetime,Thread,Log_Level,Logger,Message) VALUES (:log_date, :thread, :log_level, :logger, :message)" />
    <bufferSize value="128" />
    <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>
    <parameter>
        <parameterName value=":log_level" />
        <dbType value="String" />
        <size value="50" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%level" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value=":logger" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%logger" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value=":message" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%message" />
        </layout>
    </parameter>
</appender>
                    

Oracle8i

此示例展示了如何将事件写入 Oracle8i 数据库。

数据库表定义为

CREATE TABLE CSAX30.LOG
(
      THREAD      VARCHAR2(255),
      LOG_LEVEL   VARCHAR2(255),
      LOGGER      VARCHAR2(255),
      MESSAGE     VARCHAR2(4000)
)
TABLESPACE CSAX30D LOGGING
                    

追加器配置为

<appender name="AdoNetAppender_Oracle" type="log4net.Appender.AdoNetAppender">
    <connectionType value ="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    <connectionString value="data source=<dsname>;User ID=<userid>;Password=<password>" />
    <commandText value="INSERT INTO Log (Log_Level,Logger,Message) VALUES (:log_level, :logger, :message)" />
    <bufferSize value="250" />
    <parameter>
        <parameterName value=":log_level" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%level" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value=":logger" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%logger" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value=":message" />
        <dbType value="String" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%message" />
        </layout>
    </parameter>
</appender>
                    

IBM DB2

此示例展示了如何将事件写入 IBM DB2 8.2 数据库。以下语法也适用于旧版本的 DB2 数据库服务器。

数据库表定义为

CREATE TABLE "myschema.LOG" (
    "ID" INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (
        START WITH +1
        INCREMENT BY +1
        MINVALUE +1
        MAXVALUE +2147483647
        NO CYCLE
        NO CACHE
        NO ORDER
    ),
    "DATE" TIMESTAMP NOT NULL,
    "THREAD" VARCHAR(255) NOT NULL,
    "LEVEL" VARCHAR(500) NOT NULL,
    "LOGGER" VARCHAR(255) NOT NULL,
    "MESSAGE" VARCHAR(4000) NOT NULL,
    "EXCEPTION" VARCHAR(2000)
)
IN "LRGTABLES";
                    

追加器配置为

<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
    <bufferSize value="100" />
    <connectionType value="IBM.Data.DB2.DB2Connection,IBM.Data.DB2, Version=8.1.2.1" />
    <connectionString value="server=192.168.0.0;database=dbuser;user Id=username;password=password;persist security info=true" />
    <commandText value="INSERT INTO myschema.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>
    <parameter>
        <parameterName value="@log_level" />
        <dbType value="String" />
        <size value="500" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%level" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value="@logger" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%logger" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%message" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value="@exception" />
        <dbType value="String" />
        <size value="2000" />
        <layout type="log4net.Layout.ExceptionLayout" />
    </parameter>
</appender>
                    

SQLite

此示例展示了如何将事件写入 SQLite 数据库。这已针对 SQLite .NET 提供程序 的 v0.21 版本进行了测试。

SQLite 没有强类型列或字段长度,但建议您仍然包含这些信息以提高可读性。数据库表定义为

CREATE TABLE Log (
    LogId        INTEGER PRIMARY KEY,
    Date        DATETIME NOT NULL,
    Level        VARCHAR(50) NOT NULL,
    Logger        VARCHAR(255) NOT NULL,
    Message        TEXT DEFAULT NULL
);
                    

追加器配置为

<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
    <bufferSize value="100" />
    <connectionType value="Finisar.SQLite.SQLiteConnection, SQLite.NET, Version=0.21.1869.3794, Culture=neutral, PublicKeyToken=c273bd375e695f9c" />
    <connectionString value="Data Source=c:\\inetpub\\wwwroot\\logs\\log4net.db;Version=3;" />
    <commandText value="INSERT INTO Log (Date, Level, Logger, Message) VALUES (@Date, @Level, @Logger, @Message)" />
    <parameter>
        <parameterName value="@Date" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.RawTimeStampLayout" />
    </parameter>
    <parameter>
        <parameterName value="@Level" />
        <dbType value="String" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%level" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value="@Logger" />
        <dbType value="String" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%logger" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value="@Message" />
        <dbType value="String" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%message" />
        </layout>
    </parameter>
</appender>
                    

AspNetTraceAppender

以下示例展示了如何配置 AspNetTraceAppender 以将消息记录到 ASP.NET TraceContext。如果消息低于级别 WARN,则将它们写入 System.Web.TraceContext.Write 方法。如果它们是 WARN 或更高级别,则将它们写入 System.Web.TraceContext.Warn 方法。

<appender name="AspNetTraceAppender" type="log4net.Appender.AspNetTraceAppender" >
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>
                

BufferingForwardingAppender

以下示例展示了如何配置 BufferingForwardingAppender 以在将消息传递到 ConsoleAppender 之前缓冲 100 条消息。

<appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender" >
    <bufferSize value="100"/>
    <!--
        The value here may be an enum name or a number which can be
        cast to the required set of flags. 
        
        The default value is All, which may negatively impact performance enough to warrant
        changing it to fix less data.
        
        More information can be found at
        https://github.com/apache/logging-log4net/blob/master/src/log4net/Core/FixFlags.cs
    -->    
    <fix value="All"/>
    <appender-ref ref="ConsoleAppender" />
</appender>
                

此示例展示了如何仅传递重要事件。指定了一个 LevelEvaluator,其阈值为 WARN。这意味着只有在记录了级别为 WARN 或更高级别的消息时才会传递事件。最多 512 个(BufferSize)先前任何级别的消息也将被传递以提供上下文信息。未发送的消息将被丢弃。

<appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender" >
    <bufferSize value="512" />
    <lossy value="true" />
    <evaluator type="log4net.Core.LevelEvaluator">
        <threshold value="WARN"/>
    </evaluator>
    <appender-ref ref="ConsoleAppender" />
</appender>
                

ColoredConsoleAppender

以下示例展示了如何配置 ColoredConsoleAppender 以将消息记录到控制台。默认情况下,消息将发送到控制台标准输出流。此示例展示了如何突出显示错误消息。

<appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
    <mapping>
        <level value="ERROR" />
        <foreColor value="White" />
        <backColor value="Red, HighIntensity" />
    </mapping>
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>
                

此示例展示了如何对多个级别进行着色。

<appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
    <mapping>
        <level value="ERROR" />
        <foreColor value="White" />
        <backColor value="Red, HighIntensity" />
    </mapping>
    <mapping>
        <level value="DEBUG" />
        <backColor value="Green" />
    </mapping>
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>
                

ConsoleAppender

以下示例展示了如何配置 ConsoleAppender 以将消息记录到控制台。默认情况下,消息将发送到控制台标准输出流。

<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>
                

此示例展示了如何将日志消息定向到控制台错误流。

<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
    <target value="Console.Error" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>
                

EventLogAppender

以下示例展示了如何配置 EventLogAppender 以使用 AppDomain.FriendlyName 的事件 Source 将日志记录到本地计算机上的 Application 事件日志。

<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" >
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>
                

此示例展示了如何配置 EventLogAppender 以使用特定的事件 Source

<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" >
    <applicationName value="MyApp" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>
                

有关如何设置事件日志以允许 EventLogAppender 写入它的更多信息,请参阅常见问题解答:为什么 EventLogAppender 不起作用?

FileAppender

以下示例展示了如何配置 FileAppender 以将消息写入文件。指定的文件是 log-file.txt。每次日志记录过程启动时,将追加到该文件而不是覆盖它。

<appender name="FileAppender" type="log4net.Appender.FileAppender">
    <file value="log-file.txt" />
    <appendToFile value="true" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>
                

此示例展示了如何使用环境变量 TMP 配置要写入的文件名。还指定了用于写入文件的编码。

<appender name="FileAppender" type="log4net.Appender.FileAppender">
    <file value="${TMP}\log-file.txt" />
    <appendToFile value="true" />
    <encoding value="unicodeFFFE" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>
                

此示例展示了如何配置追加器以使用允许多个进程写入同一文件的最小锁定模型。

<appender name="FileAppender" type="log4net.Appender.FileAppender">
    <file value="${TMP}\log-file.txt" />
    <appendToFile value="true" />
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>
                

此示例展示了如何配置追加器以使用“进程间”锁定模型。

<appender name="FileAppender" type="log4net.Appender.FileAppender">
    <file value="${TMP}\log-file.txt" />
    <appendToFile value="true" />
    <lockingModel type="log4net.Appender.FileAppender+InterProcessLock" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>
                

在您更改锁定模型以允许多个进程记录到同一文件之前,请阅读 常见问题解答

ForwardingAppender

以下示例展示了如何配置 ForwardingAppender。转发追加器允许使用一组约束来装饰追加器。在此示例中,ConsoleAppender 用级别为 WARNThreshold 进行装饰。这意味着直接定向到 ConsoleAppender 的事件将被记录,无论其级别如何,但定向到 ForwardingAppender 的事件只有在级别为 WARN 或更高时才会传递到 ConsoleAppender。此追加器仅在特殊情况下使用。

<appender name="ForwardingAppender" type="log4net.Appender.ForwardingAppender" >
    <threshold value="WARN"/>
    <appender-ref ref="ConsoleAppender" />
</appender>
                

ManagedColoredConsoleAppender

以下示例展示了如何配置 ManagedColoredConsoleAppender 以将消息记录到控制台。默认情况下,消息将发送到控制台标准输出流。此示例展示了如何突出显示错误消息。

<appender name="ManagedColoredConsoleAppender" type="log4net.Appender.ManagedColoredConsoleAppender">
    <mapping>
        <level value="ERROR" />
        <foreColor value="White" />
        <backColor value="Red" />
    </mapping>
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>
                

此示例展示了如何对多个级别进行着色。

<appender name="ManagedColoredConsoleAppender" type="log4net.Appender.ManagedColoredConsoleAppender">
    <mapping>
        <level value="ERROR" />
        <foreColor value="DarkRed" />
    </mapping>
    <mapping>
        <level value="WARN" />
        <foreColor value="Yellow" />
    </mapping>
    <mapping>
        <level value="INFO" />
        <foreColor value="White" />
    </mapping>
    <mapping>
        <level value="DEBUG" />
        <foreColor value="Blue" />
    </mapping>

    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %-5level %-20.20logger: %message%newline"/>
    </layout>
</appender>
                

MemoryAppender

使用配置文件配置 MemoryAppender 的可能性很小,但如果您想这样做,方法如下。

<appender name="MemoryAppender" type="log4net.Appender.MemoryAppender">
    <onlyFixPartialEventData value="true" />
</appender>
                

NetSendAppender

以下示例展示了如何配置 NetSendAppender 以将消息传递到特定用户的屏幕。由于此追加器通常仅用于重要通知,因此指定了级别为 ErrorThreshold。此示例将消息传递到机器 SQUARE 上的用户 nicko。但是,使用 Windows Messenger 服务并非总是那么简单,使用此配置的一种可能结果是 Server 将广播寻找 WINS 服务器,然后它将要求 WINS 服务器将消息传递到 Recipient,WINS 服务器将将其传递到用户登录的第一个终端。

<appender name="NetSendAppender" type="log4net.Appender.NetSendAppender">
    <threshold value="ERROR" />
    <server value="SQUARE" />
    <recipient value="nicko" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>
                

OutputDebugStringAppender

以下示例展示了如何配置 OutputDebugStringAppender 以将日志消息写入 OutputDebugString API。

<appender name="OutputDebugStringAppender" type="log4net.Appender.OutputDebugStringAppender" >
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>
                

RemotingAppender

以下示例展示了如何配置 RemotingAppender 以将日志事件传递到指定的 Sink(在此示例中,接收器是 tcp://localhost:8085/LoggingSink)。在此示例中,由于 BufferSize,事件以 95 个事件为一批传递。没有事件被丢弃。OnlyFixPartialEventData 选项允许追加器忽略某些日志事件属性,这些属性的生成速度可能非常慢(例如,调用位置信息)。

<appender name="RemotingAppender" type="log4net.Appender.RemotingAppender" >
    <sink value="tcp://localhost:8085/LoggingSink" />
    <lossy value="false" />
    <bufferSize value="95" />
    <onlyFixPartialEventData value="true" />
</appender>
                

此示例配置了 RemotingAppender 以仅在记录了级别为 ERROR 或更高级别的事件时才传递事件。传递事件时,最多 200 个(BufferSize)先前事件(无论级别如何)将被传递以提供上下文。未传递的事件将被丢弃。

<appender name="RemotingAppender" type="log4net.Appender.RemotingAppender" >
    <sink value="tcp://localhost:8085/LoggingSink" />
    <lossy value="true" />
    <bufferSize value="200" />
    <onlyFixPartialEventData value="true" />
    <evaluator type="log4net.Core.LevelEvaluator">
        <threshold value="ERROR"/>
    </evaluator>
</appender>
                

RollingFileAppender

RollingFileAppender 基于 FileAppender,并具有与该追加器相同的选项。

以下示例展示了如何配置 RollingFileAppender 以写入文件 log.txt。写入的文件将始终称为 log.txt,因为指定了 StaticLogFileName 参数。该文件将根据大小约束(RollingStyle)进行滚动。最多保留 10 个(MaxSizeRollBackups)每个 100 KB(MaximumFileSize)的旧文件。这些滚动的文件将被命名为:log.txt.1log.txt.2log.txt.3 等…

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="log.txt" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="100KB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>
                

此示例展示了如何配置 RollingFileAppender 以在日期周期内滚动日志文件。此示例将每分钟滚动一次日志文件!要更改滚动周期,请调整 DatePattern 值。例如,日期模式 "yyyyMMdd" 将每天滚动一次。有关可用模式的列表,请参阅 System.Globalization.DateTimeFormatInfo

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="logfile" />
    <appendToFile value="true" />
    <rollingStyle value="Date" />
    <datePattern value="yyyyMMdd-HHmm" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>
                

此示例展示了如何配置 RollingFileAppender 以在日期周期内以及日期周期内的文件大小内滚动日志文件。对于每一天,只保留最后 10 个 1MB 的文件。

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="logfile" />
    <appendToFile value="true" />
    <rollingStyle value="Composite" />
    <datePattern value="yyyyMMdd" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="1MB" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>
                

此示例展示了如何配置 RollingFileAppender 以在每次程序执行时滚动一次日志文件。将 appendToFile 属性设置为 false 以防止追加器覆盖现有文件。将 maxSizeRollBackups 设置为负 1 以允许无限数量的备份文件。文件大小必须有限制,但这里设置为 50 GB,如果日志文件在单次运行期间超过此大小限制,那么它也会被滚动。

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="logfile.txt" />
    <appendToFile value="false" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="-1" />
    <maximumFileSize value="50GB" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>
                

SmtpAppender

以下示例展示了如何配置 SmtpAppender 通过 SMTP 邮件发送日志事件。ToFromSubjectSmtpHost 是必需的参数。此示例展示了如何仅发送重要事件。指定了一个 LevelEvaluator,其阈值为 WARN。这意味着将为每个记录的 WARN 或更高级别的消息发送一封电子邮件。每封电子邮件还将包含最多 512 (BufferSize) 条任何级别的先前消息,以提供上下文。未发送的消息将被丢弃。

<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
    <to value="[email protected]" />
    <from value="[email protected]" />
    <subject value="test logging message" />
    <smtpHost value="SMTPServer.domain.com" />
    <bufferSize value="512" />
    <lossy value="true" />
    <evaluator type="log4net.Core.LevelEvaluator">
        <threshold value="WARN"/>
    </evaluator>
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" />
    </layout>
</appender>
                

此示例展示了如何配置 SmtpAppender 以每封电子邮件包含 512 (BufferSize) 条消息的方式发送所有消息。

<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
    <to value="[email protected]" />
    <from value="[email protected]" />
    <subject value="test logging message" />
    <smtpHost value="SMTPServer.domain.com" />
    <bufferSize value="512" />
    <lossy value="false" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" />
    </layout>
</appender>
                

此示例展示了邮件消息更详细的格式化布局。

<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender,log4net">
    <to value="[email protected]" />
    <from value="[email protected]" />
    <subject value="test logging message" />
    <smtpHost value="SMTPServer.domain.com" />
    <bufferSize value="512" />
    <lossy value="false" />
    <evaluator type="log4net.Core.LevelEvaluator,log4net">
        <threshold value="WARN" />
    </evaluator>
    <layout type="log4net.Layout.PatternLayout,log4net">
        <conversionPattern value="%property{log4net:HostName} :: %level :: %message %newlineLogger: %logger%newlineThread: %thread%newlineDate: %date%newlineNDC: %property{NDC}%newline%newline" />
    </layout>
</appender>
                

SmtpPickupDirAppender

SmtpPickupDirAppender 的配置与 SmtpAppender 相似。唯一的区别是,它不是指定 SmtpHost 参数,而是必须指定 PickupDir

PickupDir 参数是一个必须存在的路径,执行 appender 的代码必须具有在该目录中创建新文件和写入文件的权限。该路径相对于应用程序的基目录 (AppDomain.BaseDirectory)。

以下示例展示了如何配置 SmtpPickupDirAppender 通过 SMTP 邮件发送日志事件。ToFromSubjectPickupDir 是必需的参数。此示例展示了如何仅发送重要事件。指定了一个 LevelEvaluator,其阈值为 WARN。这意味着将为每个记录的 WARN 或更高级别的消息发送一封电子邮件。每封电子邮件还将包含最多 512 (BufferSize) 条任何级别的先前消息,以提供上下文。未发送的消息将被丢弃。

<appender name="SmtpPickupDirAppender" type="log4net.Appender.SmtpPickupDirAppender">
    <to value="[email protected]" />
    <from value="[email protected]" />
    <subject value="test logging message" />
    <pickupDir value="C:\SmtpPickup" />
    <bufferSize value="512" />
    <lossy value="true" />
    <evaluator type="log4net.Core.LevelEvaluator">
        <threshold value="WARN"/>
    </evaluator>
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" />
    </layout>
</appender>
                

TraceAppender

以下示例展示了如何配置 TraceAppender 将消息记录到 System.Diagnostics.Trace 系统。这是 .net 基类库提供的跟踪系统。有关如何配置跟踪系统的更多详细信息,请参阅 MSDN 文档中的 System.Diagnostics.Trace 类。

<appender name="TraceAppender" type="log4net.Appender.TraceAppender">
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>
                

UdpAppender

以下示例展示了如何配置 UdpAppender 将事件发送到指定 RemotePort 上的 RemoteAddress

<appender name="UdpAppender" type="log4net.Appender.UdpAppender">
    <localPort value="8080" />
    <remoteAddress value="224.0.0.1" />
    <remotePort value="8080" />
    <layout type="log4net.Layout.PatternLayout, log4net">
        <conversionPattern value="%-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>
                

DynamicPatternLayout

当标头或页脚应包含可能随时间变化的信息时,应使用 DynamicPatternLayout。与每次调用时都不会重新评估的静态 PatternLayout 相比,DynamicPatternLayout 会在每次调用时重新评估模式。例如,它允许在标头和/或页脚中包含当前日期时间,而静态 PatternLayout 则无法做到这一点。

以下示例展示了如何配置 DynamicPatternLayout

<layout type="log4net.Layout.DynamicPatternLayout"> 
  <param name="Header" value="%newline**** Trace Opened Local: %date{yyyy-MM-dd HH:mm:ss.fff} UTC: %utcdate{yyyy-MM-dd HH:mm:ss.fff} ****%newline"/> 
  <param name="Footer" value="**** Trace Closed %date{yyyy-MM-dd HH:mm:ss.fff} ****%newline"/> 
</layout>