• 开箱即用


    废话少说,先上代码 log4net Demo

    好的系统都有日志,log4net 是我在.net平台下用过最爽的日志库,简单易用、功能强大。

    • 基于配置(配置很简单,一看就明,通用,拷去即用);
    • 可同时保存日志到文件、数据库、控制台输出;
    • 分门别类保存日志文件(消息、警告、错误、异常保存到不同的文件/文件夹下);
    • 使用后台线程;
    简单配置:
    • Nuget安装log4net;
    • 配置log4net:
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
      </configSections>
    
      <log4net>
        <!-- 文件保存日志 -->
        <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
          <!--日志路径: 兼容相对路径和绝对路径 -->
          <param name= "File" value= "Logsimple"/>
          <!--是否是向文件中追加日志-->
          <param name= "AppendToFile" value= "true"/>
          <!--保留天数-->
          <param name= "MaxSizeRollBackups" value= "10"/>
          <!--日志文件名是否固定不变的-->
          <param name= "StaticLogFileName" value= "false"/>
          <!--日志文件名格式为:20170112.log-->
          <param name= "DatePattern" value= "yyyyMMdd&quot;.log&quot;"/>
          <!--日志根据日期滚动-->
          <param name= "RollingStyle" value= "Date"/>
          <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%date{yyyy-MM-dd HH:mm:ss.fff} %-5p %m%n" />
          </layout>
        </appender>
    
        <!-- 控制台输出日志 -->
        <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>
    
        <root>
          <!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) -->
          <level value="all" />
          <appender-ref ref="ColoredConsoleAppender"/>
          <appender-ref ref="RollingFileAppender"/>
        </root>
      </log4net>
    </configuration>
    

    截图

    控制台

    文件

    复杂配置:分门别类、同时保存日志到文件、数据库

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
      </configSections>
    
      <log4net>
        <!-- 信息日志类 -->
        <logger name="loginfo">
          <level value="ALL" />
          <appender-ref ref="AdoNetAppender" />
          <appender-ref ref="InfoAppender" />
        </logger>
        <!-- 警告日志类 -->
        <logger name="logwarn">
          <level value="ALL" />
          <appender-ref ref="WarnAppender" />
        </logger>
        <!-- 错误日志类-->
        <logger name="logerror">
          <level value="ALL" />
          <appender-ref ref="AdoNetAppender" />
          <appender-ref ref="ErrorAppender" />
        </logger>
        <!-- 异常日志类-->
        <logger name="logfatal">
          <level value="ALL" />
          <appender-ref ref="AdoNetAppender" />
          <appender-ref ref="FatalAppender" />
        </logger>
    
        <!-- 文件保存日志 -->
        <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
          <!--日志路径: 兼容相对路径和绝对路径 -->
          <param name= "File" value= "Logcomplexinfo"/>
          <!--是否是向文件中追加日志-->
          <param name= "AppendToFile" value= "true"/>
          <!--保留天数-->
          <param name= "MaxSizeRollBackups" value= "10"/>
          <!--日志文件名是否固定不变的-->
          <param name= "StaticLogFileName" value= "false"/>
          <!--日志文件名格式为:20170112.log-->
          <param name= "DatePattern" value= "yyyyMMdd&quot;.log&quot;"/>
          <!--日志根据日期滚动-->
          <param name= "RollingStyle" value= "Date"/>
          <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%date{yyyy-MM-dd HH:mm:ss.fff} %-5p %m%n" />
          </layout>
        </appender>
    
        <appender name="WarnAppender" type="log4net.Appender.RollingFileAppender">
          <param name= "File" value= "Logcomplexwarn"/>
          <param name= "AppendToFile" value= "true"/>
          <param name= "MaxSizeRollBackups" value= "10"/>
          <param name= "StaticLogFileName" value= "false"/>
          <param name= "DatePattern" value= "yyyyMMdd&quot;.log&quot;"/>
          <param name= "RollingStyle" value= "Date"/>
          <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%date{yyyy-MM-dd HH:mm:ss.fff} %-5p %m%n" />
          </layout>
        </appender>
    
        <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
          <param name= "File" value= "Logcomplexerror"/>
          <param name= "AppendToFile" value= "true"/>
          <param name= "MaxSizeRollBackups" value= "10"/>
          <param name= "StaticLogFileName" value= "false"/>
          <param name= "DatePattern" value= "yyyyMMdd&quot;.log&quot;"/>
          <param name= "RollingStyle" value= "Date"/>
          <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%date{yyyy-MM-dd HH:mm:ss.fff} %-5p %m%n" />
          </layout>
        </appender>
    
        <appender name="FatalAppender" type="log4net.Appender.RollingFileAppender">
          <param name= "File" value= "Logcomplexfatal"/>
          <param name= "AppendToFile" value= "true"/>
          <param name= "MaxSizeRollBackups" value= "10"/>
          <param name= "StaticLogFileName" value= "false"/>
          <param name= "DatePattern" value= "yyyyMMdd&quot;.log&quot;"/>
          <param name= "RollingStyle" value= "Date"/>
          <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%date{yyyy-MM-dd HH:mm:ss.fff} %-5p %m%n" />
          </layout>
        </appender>
    
        <!-- 控制台输出日志 -->
        <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>
    
        <!-- 数据库保存 -->
        <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
          <bufferSize value="1" />
          <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
          <connectionString value="data source=.;initial catalog=test_log;integrated security=true" />
          <commandText value="INSERT INTO log([userid],[level],[ip],[msg],[exception]) VALUES (@userid,@level,@ip, @msg,@exception)" />
          <parameter>
            <parameterName value="@userid"/>
            <dbType value="Int64"/>
            <size value="64"/>
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%X{userid}"/>
            </layout>
          </parameter>
          <parameter>
            <parameterName value="@level" />
            <dbType value="String" />
            <size value="50" />
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%level" />
            </layout>
          </parameter>
          <parameter>
            <parameterName value="@ip" />
            <dbType value="String" />
            <size value="50" />
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%X{ip}" />
            </layout>
          </parameter>
          <parameter>
            <parameterName value="@msg" />
            <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>
    
      </log4net>
    </configuration>
    

    上面的AdoNetAppender附加器,是把日志保存到数据库,日志表设计:

    CREATE TABLE [log](
    id BIGINT IDENTITY(1,1) PRIMARY KEY,
    userid BIGINT,
    [level] NVARCHAR(8),
    [ip] NVARCHAR(16),
    msg NVARCHAR(1024),
    [exception] NTEXT,
    [date] DATETIME DEFAULT CURRENT_TIMESTAMP
    )
    

    截图

    根据配置名生成的文件夹

    基于日期生成的文件

    生成的异常日志

    日志保存到数据库

    Log4net中的Appender类型

    AdoNetAppender:利用ADO.NET记录到数据库的日志。
    AnsiColorTerminalAppender:在ANSI 窗口终端写下高亮度的日志事件。
    AspNetTraceAppender:能用asp.net中Trace的方式查看记录的日志。
    BufferingForwardingAppender:在输出到子Appenders之前先缓存日志事件。
    ConsoleAppender:将日志输出到控制台。
    EventLogAppender:将日志写到Windows Event Log.
    FileAppender:将日志写到文件中。
    LocalSyslogAppender:将日志写到local syslog service (仅用于UNIX环境下).
    MemoryAppender:将日志存到内存缓冲区。
    NetSendAppender:将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中显示。
    RemoteSyslogAppender:通过UDP网络协议将日志写到Remote syslog service。
    RemotingAppender:通过.NET Remoting将日志写到远程接收端。
    RollingFileAppender:将日志以回滚文件的形式写到文件中。
    SmtpAppender:将日志写到邮件中。
    TraceAppender:将日志写到.NET trace 系统。
    UdpAppender:将日志connectionless UDP datagrams的形式送到远程宿主或以UdpClient的形式广播。

    ConversionPattern相关参数设置

    %m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息
    %n(new line):换行
    %d(datetime):输出当前语句运行的时刻
    %r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数
    %t(thread id):当前语句所在的线程ID
    %p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等
    %c(class):当前日志对象的名称,例如:
    %f(file):输出语句所在的文件名。
    %l(line):输出语句所在的行号。
    %数字:表示该项的最小长度,如果不够,则用空格填充,如“%-5level”表示level的最小宽度是5个字符,如果实际长度不够5个字符则以空格填充。
    下面以一个实际的例子来说明问题,比如在配置中有“%date [%thread] (%file:%line) %-5level %logger [%property{NDC}] - %message%newline”,那么实际的日志中会是如下格式:
    “记录时间:2010-11-17 16:16:36,561 线程ID:[9] 日志级别:文件:所在行ERROR 出错类:Log4NetDemo.Program property:[(null)] - 错误描述:error
    System.Exception: 在这里发生了一个异常,Error Number:2036084948”

    废话少说,线上代码 log4net Demo

  • 相关阅读:
    SGU 107
    HDU 1724 自适应辛普森法
    POJ 1061 扩展欧几里得
    zzuli2424: 越靠近,越幸运(dfs)
    zzuli1519: 小P参加相亲大会(异或)
    zzuli1519: 小P参加相亲大会(异或)
    牛客练习赛42 A:字符串
    牛客练习赛42 A:字符串
    zzuli1511: 小P的loI
    zzuli1511: 小P的loI
  • 原文地址:https://www.cnblogs.com/grissom007/p/6284270.html
Copyright © 2020-2023  润新知