zoukankan      html  css  js  c++  java
  • winform--使用log4net日志记录--配置和使用

    1,添加引用 log4net

    2,在项目Properties->AssemblyInfo.cs文件中 添加[assembly: log4net.Config.XmlConfigurator()]

    //log4net配置(第一种方式)
    //在项目Properties->AssemblyInfo.cs文件中 添加[assembly: log4net.Config.XmlConfigurator()]
    [assembly: log4net.Config.XmlConfigurator()]
    
    //log4net配置(第二种方式)
    //[assembly: log4net.Config.DOMConfigurator(ConfigFileExtension = "config", Watch = true)]
    //[assembly: log4net.Config.DOMConfigurator(ConfigFile = "filename", ConfigFileExtension = "ext", Watch = true / false)]
    //参数可以省略
    
    //ConfigFile:指出了我们的配置文件的路径及文件名,包括扩展名。可省略
    //configfileextension:如果我们对被编译程序的程序集使用了不同的文件扩展名,那么我们需要定义这个属性,缺省的,程序集的配置文件扩展名为”config”。
    //watch(boolean属性) : log4net框架用这个属性来确定是否需要在运行时监视文件的改变。如果这个属性为true,那么filesystemwatcher将会被用来监视文件的改变,重命名,删除等事件。
    

    3,找到App.config。如果没有这个配置文件,就右键添加 应用程序配置文件

     4,在App.config中<configuration> </configuration>添加,

      <!--在配置选项中加入log4net的引用-->
    <!--特别注意:configSections必须放在configuration的下面的位置--> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections> <log4net> <!--root:定义日志输出的方式和等级--> <root> <!--控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF--> <!--比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录--> <!--如果没有定义LEVEL的值,则缺省为DEBUG--> <level value="ALL" /><!--定义输出的信息等级为所有其中包括Fatal.Error.Warn.Info.Debug--> <!--文件形式记录日志--> <appender-ref ref="LogFileAppender" /> </root> <!--定义logger对象的名字为logApp,以方便在代码中使用,<logger>配置项可以不配置--> <logger name="Logging"> <level value="DEBUG" /> </logger> <!--个配置文件可以有很多appender,一个appender节就相当于一个日志输出介质或方法。--> <!-- 定义输出到文件中 --> <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender"> <!--定义文件存放位置--> <file value="Log/" /> <!--是否追加到文件,默认为true,通常无需设置--> <appendToFile value="true" /> <!--变换的形式为日期,这种情况下每天只有一个日志--> <!--此时MaxSizeRollBackups和maximumFileSize的节点设置没有意义--> <rollingStyle value="Date" /> <!--变换的形式为日志大小--> <!--这种情况下MaxSizeRollBackups和maximumFileSize的节点设置才有意义--> <!--<rollingStyle value="Size"/>--> <!--这是按日期产生文件夹,并在文件名前也加上日期--> <!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置--> <datePattern value="yyyy-MM-dd&quot;.log&quot;"/> <!--日志最大可备份数,每天记录的日志文件个数,与maximumFileSize配合使用--> <maxSizeToRollBackups value="-1" /> <!--每个日志文件的最大大小--> <!--可用的单位:KB|MB|GB--> <!--不要使用小数,否则会一直写入当前日志--> <maximumFileSize value="10MB" /> <staticLogFileName value="false" /> <layout type="log4net.Layout.PatternLayout,log4net"> <!--每条日志末尾的文字说明--> <!--输出格式--> <!--样例:2008-03-26 13:42:32,111 [10] INFO Log4NetDemo.MainClass [(null)] - info--> <conversionPattern value="%d - 线程ID:[%thread] - %-5level - %m%n" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="DEBUG" /> <param name="LevelMax" value="ERROR" /> </filter> </appender> </log4net>

    格式说明:

    5,

    //TypeLog Log = new TypeLog();//用这种方式,要引入自定义TypeLog类
    public static readonly log4net.ILog log = log4net.LogManager.GetLogger("Logging"); //Logging 名字要在 App.config 中能找到
    

     

        public class TypeLog
        {
            log4net.ILog log_fatal = log4net.LogManager.GetLogger("fatal");
            log4net.ILog log_error = log4net.LogManager.GetLogger("error");
            log4net.ILog log_warn = log4net.LogManager.GetLogger("warn");
            log4net.ILog log_info = log4net.LogManager.GetLogger("info");
            log4net.ILog log_debug = log4net.LogManager.GetLogger("debug");
    
            public void Fatal(string fatal, Exception e)
            {
                log_info.Fatal(fatal, e);
            }
            public void Error(string error_info, Exception t)
            {
                log_error.Error(error_info, t);
            }
            public void Warn(string warn_info)
            {
                log_error.Warn(warn_info);
            }
            public void Info(string info)
            {
                log_info.Info(info);
            }
            public void Debug(string debug_info)
            {
                log_info.Debug(debug_info);
            }
        }
    

    6,使用

    log.Warn($"人工确认第{number}个螺丝拧紧OK");

    //Log.Info($"人工确认第{number}个螺丝拧紧OK")

    7,日志记录

    2020-03-14 15:03:59,927 - 线程ID:[1] - WARN - 人工确认第1个螺丝拧紧OK
    2020-03-14 15:04:01,899 - 线程ID:[1] - WARN - 人工确认第2个螺丝拧紧NG
    2020-03-14 15:04:04,587 - 线程ID:[1] - WARN - 人工确认第2个螺丝拧紧OK
    2020-03-14 15:04:06,639 - 线程ID:[1] - WARN - 人工确认第3个螺丝拧紧OK
    2020-03-14 15:04:08,291 - 线程ID:[1] - WARN - 人工确认第4个螺丝拧紧NG
    2020-03-14 15:04:09,856 - 线程ID:[1] - WARN - 人工确认第4个螺丝拧紧NG
    2020-03-14 15:04:11,105 - 线程ID:[1] - WARN - 人工确认第4个螺丝拧紧OK

     

      

     

  • 相关阅读:
    HttpClient 使用
    $.each 遍历
    PYTHON2.day02
    PYTHON2.day01
    PYTHON1.面向对象_day04
    PYTHON1.面向对象_day03
    PYTHON1.面向对象_day02
    PYTHON1.面向对象_day01
    PYTHON1.day21
    PYTHON1.day20
  • 原文地址:https://www.cnblogs.com/baozi789654/p/12493984.html
Copyright © 2011-2022 走看看