zoukankan      html  css  js  c++  java
  • Log4Net日志

    一 Log4net简介

    Log4net是基于.net开发的一款非常著名的记录日志开源组件。他最早是2001年7月由NeoWorks Limited启动的项目,基本的框架源于另外的一个非常著名的姐妹组件-log4j。Log4net记录日志的功能非常强大。它可以将日志分不同的等 级,比不同的样式,将日志输出到不同的媒介。

    Log4net可以从http://logging.apache.org/log4net/downloads.html网站下载最新版本。

    二 Log4net核心组成

    Log4net主要由五个部分组成,分别为Logger,Appenders, Filters, Layouts 和Object Renders。


    (一) Logger(日志)


    1. 记录日志的分类:

    Log4net能够以多种方式输出日志。支持的日志输出常用的主要媒介有数据库(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite,控制台,文件,事件日志(可以用事件查看器查看)和邮件等多种方式。


    2. 日志的级别

    Log4net支持多种级别的日志。优先级从高到低依次排列如下:

    FATAL > ERROR > WARN > INFO > DEBUG

    此外还有ALL(允许所有的日志请求)和OFF(拒绝所有的日志请求)这两种特殊的级别。


    (二)Appenders


    Appenders决定日志输出的方式。

    Appenders必须实现log4net.Appenders.IAppender接口。


    Log4net目前支持的输出方式包括:
    1 AdoNetAppender
        将日志记录到数据库中。可以采用SQL和存储过程两种方式。

    2 AnsiColorTerminalAppender
        在ANSI 窗口终端写下高亮度的日志事件。

    3 AspNetTraceAppender
        能用asp.net中Trace的方式查看记录的日志。

    4 BufferingForwardingAppender
        在输出到子Appenders之前先缓存日志事件。

    5 ConsoleAppender
        将日志输出到控制台。

    6 EventLogAppender
        将日志写到Windows Event Log.

    7 FileAppender
        将日志写到文件中。

    8 LocalSyslogAppender
        将日志写到local syslog service (仅用于UNIX环境下).
    9 MemoryAppender
        将日志存到内存缓冲区。

    10 NetSendAppender
        将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中显示。

    11 RemoteSyslogAppender
        通过UDP网络协议将日志写到Remote syslog service。

    12 RemotingAppender
        通过.NET Remoting将日志写到远程接收端。

    13 RollingFileAppender
        将日志以回滚文件的形式写到文件中。

    14 SmtpAppender
        将日志写到邮件中。

    15 TraceAppender
        将日志写到.NET trace 系统。

    16 UdpAppender
        将日志connectionless UDP datagrams的形式送到远程宿主或以UdpClient的形式广播。


    (三)Filters


    Appender对象将日志以缺省的方式传到输出流,然后Filter可以按照不同的标准控制日志的输出。Filter可以再配置文件中配置。最简单的形式是在appender中写明一个Threshold.这样只有级别大于或等于此Threshold的日志才被记录。

    Filters必须实现log4net.Filters.IFilter接口。


    (四)Layouts


    Layouts控制日志显示的格式样式。日志的显示格式如下:

    "%timestamp [%thread] %-5level %logger - %message%newline"

    Timestamp: 表示程序已经开始执行的时间。 单位[毫秒]。

    Thread:执行当前代码的线程。

    Level:日志的级别。

    Logger:日志相关请求的名称。

    Message: 日志消息。


    Layouts还可以控制日志的输出样式,比如以普通形式或以xml等形式输出。


    (五)Object Renderers


    这是很重要的一项,log4net将按照用户定义的标准输出日志消息。

    Object Renders必须实现log4net.ObjectRenderer.IObjectRenerer接口。


    在项目中添加引用,选择Log4net.dll。
    添加引用using log4net; using log4net.Config;
    在项目的AssemblyInfo.cs文件里添加以下的语句
    [assembly:log4net.Config.DOMConfigurator(ConfigFile="filename",   ConfigFileExtension="ext",Watch=true[false])]
    ConfigFile:指出了我们的配置文件的路径及文件名,包括扩展名。
    ConfigFileExtension:如果我们对被编译程序的程序集使用了不同的文件扩展名,那么我们需要定义这个属性,缺省的,程序集的配置文件扩展名为”config”。
    Watch (Boolean属性): log4net框架用这个属性来确定是否需要在运行时监视文件的改变。如果这个属性为true,那么FileSystemWatcher将会被用来监视文件的改变,重命名,删除等事件
    <log4net>
      
    <root>
        
    <level value="ALL" />
        
    <appender-ref ref="LogFileAppender" />
        
    <appender-ref ref="AdoNetAppender_Oracle" />
      
    </root>
    <--记录到文件中-->
      
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
        
    <param name="File" value="c:\log.txt"/>
        
    <param name="datePattern" value="MM-dd HH:mm"/>
        
    <param name="AppendToFile" value="true"/>
        
    <layout type="log4net.Layout.PatternLayout">
          
    <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
        
    </layout>
      
    </appender>

    <--记录到Oracle数据库中-->
      
    <appender name="AdoNetAppender_Oracle" type="log4net.Appender.ADONetAppender">
        
    <bufferSize value="1" />
        
    <connectionType value ="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        
    <connectionString value="data source=JTSCM;User ID=JTSCM;password=JTSCM;" />
        
    <commandText value="INSERT INTO sys_Log (datetime,thread,Log_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" />
          
    <layout type="log4net.Layout.PatternLayout">
            
    <conversionPattern value="%thread" />
          
    </layout>
        
    </parameter>
        
    <parameter>
          
    <parameterName value=":log_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>
        
    <parameter>
          
    <parameterName value=":exception" />
          
    <dbType value="String" />
          
    <layout type="log4net.Layout.ExceptionLayout" />
        
    </parameter>
      
    </appender>
    </log4net>

    代码嘛就容易多了。
      public class Log
        
    {
            
    private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

            
    /// <summary>
            
    /// 记录信息
            
    /// </summary>
            
    /// <param name="msg"></param>

            public static void Info(string msg)
            
    {
                log.Info(msg);
            }


            
    /// <summary>
            
    /// 错误信息
            
    /// </summary>
            
    /// <param name="msg"></param>

            public static void Error(string msg)
            
    {
                log.Error(msg);
            }


            
    /// <summary>
            
    /// 调试信息
            
    /// </summary>
            
    /// <param name="msg"></param>

            public static void Debug(string msg)
            
    {
                log.Debug(msg);
            }

        }
  • 相关阅读:
    php中字符与字节的区别
    sql把两值之和当作条件进行查询
    Intel® Neural Compute Stick 2
    使用OpenCV的VideoCapture 读取.mp4文件时出现以下错误:Unable to stop the stream: Inappropriate ioctl for device
    更换Raspbian Buster源
    OpenCV之cv2函数 2
    OpenCV中cv2的用法
    OpenVINO 对象识别 real_time_object_detection Movidius
    树莓派和计算棒实现图形识别 RaspBerry Pi4 with OpenVino and Movidius
    树莓派无线网卡老是掉线
  • 原文地址:https://www.cnblogs.com/batys/p/2240843.html
Copyright © 2011-2022 走看看