• Log4net_配置


    Log4net 有三个主要组件:loggers,appenders 和 layouts这三个组件一起工作使得开发者能够根据信息类型和等级(Level)记录信息,以及在运行时控制信息的格式化和信息的写入位置(如控制台,文件,内存,数据库等)。过滤器(filter)帮助这些组件,控制追加器(appender)的行为和把对象转换成字符串的对象渲染。

    日志(Loggers)等级

    该规则是 log4net 的核心。它假设等级是有序的。对于标准等级,具有 DEBUG < INFO < WARN < ERROR < FATAL。

    用相同的参数调用 log4net.LogManager.GetLogger 方法总是返回引用一个完全相同 logger 对象。如下所示:

    ILog x = LogManager.GetLogger("wombat");
    ILog y = LogManager.GetLogger("wombat");

    x 和 y 完全引用一个相同的 logger 对象。

    因此,有可能配置一个日志器,然后在代码中的任何地方都可以检索到相同的实例。在生物学上,父母总是先于它们的孩子,而 log4net 日志器可以以任何顺序创建和配置。具体地说,一个“父”日志器将发现和链接到它的后代,即使它在它的后代之后才实例化。

    log4net 环境的配置通常是在应用程序初始化。优先的方法是读取一个配置文件。

    追加器(Appenders)

    已经实现的输出方式有:

    • AdoNetAppender 将日志记录到数据库中。可以采用SQL和存储过程两种方式。
    • AnsiColorTerminalAppender 将日志高亮输出到ANSI终端。
    • AspNetTraceAppender  能用asp.net中Trace的方式查看记录的日志。
    • BufferingForwardingAppender 在输出到子Appenders之前先缓存日志事件。
    • ConsoleAppender 将日志输出到应用程序控制台。
    • EventLogAppender 将日志写到Windows Event Log。
    • FileAppender 将日志输出到文件。
    • ForwardingAppender 发送日志事件到子Appenders。
    • LocalSyslogAppender 将日志写到local syslog service (仅用于UNIX环境下)。
    • MemoryAppender 将日志存到内存缓冲区。
    • NetSendAppender 将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中显示。
    • OutputDebugStringAppender 将日志输出到Debuger,如果程序没有Debuger,就输出到系统Debuger。如果系统Debuger也不可用,将忽略消息。
    • RemoteSyslogAppender 通过UDP网络协议将日志写到Remote syslog service。
    • RemotingAppender 通过.NET Remoting将日志写到远程接收端。
    • RollingFileAppender 将日志以回滚文件的形式写到文件中。
    • SmtpAppender 将日志写到邮件中。
    • SmtpPickupDirAppender 将消息以文件的方式放入一个目录中,像IIS SMTP agent这样的SMTP代理就可以阅读或发送它们。
    • TelnetAppender 客户端通过Telnet来接受日志事件。
    • TraceAppender 将日志写到.NET trace 系统。
    • UdpAppender 将日志以无连接UDP数据报的形式送到远程宿主或用UdpClient的形式广播。

    AdoNetAppender:

    MS SQL Server:

    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
    )
    mssqlserver
    <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>
    appender配置:

    MS Access:

    <appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender">
        <connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:logaccess.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>
    建立数据表同“MS SQL Server” appender配置:

     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>
    appender配置:

    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>
    appender配置:

    实际上,你会发现,建立数据表都是差不多的,appender配置几乎也一致。如果我们每种数据库的表字段都保持一致,实际上,只需要改:connectionType、connectionString、commandText

    <connectionType value="Npgsql.NpgsqlConnection, Npgsql" />
          <connectionString value="Server=localhost;Port=5432;Database=pp_log;User Id=postgres;Password=123;" />
          <commandText value="INSERT INTO log (date,thread,level,logger,message,exception) VALUES (:log_date, :thread, :log_level,:logger, :message, :exception)" />
    

      

    AspNetTraceAppender:

    这段配置可将日志信息输出到页面的Trace上下文环境。如果日志的级别低于WARN,会以System.Web.TraceContext.Write方法输出;如果级别为WARN或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的主要作用是将输出到指定类型(这里是LogFileAppender)的Appender的日志信息进行缓存。bufferSize属性指定了缓存的数量,如果value为5,那么将在信息量达到6条的时候,把这些日志批量输出。appender-ref属性指定了缓存的Appender类型,同root节点一样,这里可以指定多个。

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

      

    ColoredConsoleAppender:

    ColoredConsoleAppender将日志信息输出到控制台。默认情况下,日志信息被发送到控制台标准输出流。下面这个示例演示了如何高亮显示Error信息。

    <!-- 控制台前台显示日志 -->
        <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
          <mapping>
            <level value="ERROR" />
            <foreColor value="Red, HighIntensity" />
          </mapping>
          <mapping>
            <level value="Info" />
            <foreColor value="Green" />
          </mapping>
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%n%date{HH:mm:ss,fff} [%-5level] %m" />
          </layout>
    
          <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="Info" />
            <param name="LevelMax" value="Fatal" />
          </filter>
        </appender>
    

      

    ConsoleAppender:

    ConsoleAppender将日志信息输出到控制台标准输出流。

    <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将日志写入本地机器的应用程序事件日志中。默认情况下,该日志的源(Source)是AppDomain.FriendlyName,也可以手动指定其它名称。

    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" >
        <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
        </layout>
    </appender>
    

      

    FileAppender:

    FileAppender将日志信息输出到指定的日志文件。

    File指定了文件名称,可以使用相对路径,此时日志文件的位置取决于项目的类型(如控制台、Windows Forms、ASP.NET等);也可以使用绝对路径;甚至可以使用环境变量,如<file value="${TMP}log-file.txt" />。
    AppendToFile指定是追加到还是覆盖掉已有的日志文件。
    还可以添加如下属性<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />来使用最小锁定模型(minimal locking model),以允许多个进程可以写入同一个文件。

    <appender name="LogFileAppender" type="log4net.Appender.FileAppender" >
        <param name="File" value="WebUtilClient.log" />
        <param name="AppendToFile" value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
        </layout>
    </appender>
    

      

    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
          <!--日志路径-->
          <param name= "File" value= "D:App_LogServicelogTestLog"/>
          <!--是否是向文件中追加日志-->
          <param name= "AppendToFile" value= "true"/>
          <!--log保留天数-->
          <param name= "MaxSizeRollBackups" value= "10"/>
          <!--日志文件名是否是固定不变的-->
          <param name= "StaticLogFileName" value= "false"/>
          <!--日志文件名格式为:2008-08-31.log-->
          <param name= "DatePattern" value= "yyyy-MM-dd&quot;.read.log&quot;"/>
          <!--日志根据日期滚动-->
          <param name= "RollingStyle" value= "Date"/>
          <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n %loggername" />
          </layout>
        </appender>
    View Code平时使用的配置如下

    日志器可以采用多个追加器,在配置文件中,可以直接这样使用:

     <root>
          <level value="ALL" />
          <appender-ref ref="ColoredConsoleAppender" />
          <appender-ref ref="UdpAppender" />
        </root>
    

      

  • 相关阅读:
    LeetCode
    lintcode--剑指offer
    lintcode--剑指offer---41--50道
    LeetCode中的bug!!!!!!
    常用知识点
    lintcode--剑指offer---31--40道
    LeetCode--链表
    Java设计实践课练习题
    lintcode--剑指offer---21--30道
    Java设计实践课的LeetCode题目
  • 原文地址:https://www.cnblogs.com/ingstyle/p/6655534.html
Copyright © 2020-2023  润新知