zoukankan      html  css  js  c++  java
  • wpf Log4net的配置和使用

    现在项目涉及的是cs客户端,在项目中使用log4net记录本地日志和异常信息,这里项目做完了,想着自己做一个demo,测试记录一下log4Net的配置使用。

    第一步、新建一个wpf应用程序,项目右键 -----》点击NuGet程序包 -----》搜索lognet -------》点击安装

    第二步:在app.config中添加节点  (当然,如果是Web项目就是 web.config)

    配置文件代码如下:

    <configuration>
      <configSections>
        <!--log4net配置-->
        <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
      </configSections>
      <!--log4net配置-->
      <log4net>
        <!--定义输出到文件中-->
        <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
          <!--定义文件存放位置-->
          <!--file可以指定具体的路径 D://logfile.txt。-->
          <file value="D://logfile.txt"/>
          <!--如果放在Debug下,当然名字你可以改 -->
          <!--<file value="log//logfile.txt"/>-->
          <appendToFile value="true"/>
          <rollingStyle value="Date"/>
          <!--备份log文件的个数最多10个-->
          <maxSizeRollBackups value="10" />
          <!--每个log文件最大是2M,如果超过2M将重新创建一个新的log文件,并将原来的log文件备份。-->
          <maximumFileSize value="2MB" />
          <datePattern value="yyyyMMdd-HH:mm:ss"/>
          <layout type="log4net.Layout.PatternLayout">
            <!--输出格式-->
            <!--样例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info-->
            <conversionPattern value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline"/>
          </layout>
        </appender>
        <!--定义日志的输出媒介-->
        <root>
          <!--指定将此级别及以上的log打印到log文件中-->
          <level value="DEBUG"/>
          <!--文件形式记录日志-->
          <appender-ref ref="LogFileAppender"/>
        </root>
      </log4net>
    </configuration>

    把配置加到app.config中,如图所示

    第三步:

     在项目中找到Properties文件夹中找到AssemblyInfo.cs 在代码追后 添加 [assembly: log4net.Config.XmlConfigurator(Watch = true)]

    第四步:添加操作log4net的后台代码

    xaml文件创建按钮

    <Button Name="logBtn" Click="LogBtn_Click" Content="创建日志" Width="60" Height="30"></Button>

    xaml.cs 添加执行操作代码

    private void LogBtn_Click(object sender, RoutedEventArgs e)
            {
                string strLog = String.Format("[Thread ID:{0}]{1}", AppDomain.GetCurrentThreadId(), "Log4net写入日志配置处理");
                WriteLog(strLog);
            }
    
            private void WriteLog(string exp = null, string loggerName = "InfoLogger")
            {
    //新建的一个静态类 LogObject.Log(loggerName).Info(exp);
    LogObject.Log(loggerName).Error(exp); }

    public static class LogObject
        {
    
            public static ILog Log(string LoggerName)
            {
    //log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
      return LogManager.GetLogger(LoggerName); } }

    第五步:

    找到文件路径D://logfile.txt 查看日志!

    静态类中获取日志对象的另一种写法:这个是程序自动获取当前程序对象     (上面的我是通过WriteLog方法传入的)

    ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
    return log;

    日志输出:

     

    如果要在程序刚运行和退出的时候写入日志,在App.xaml.cs中加入:

    public static readonly ILog Log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
            protected override void OnStartup(StartupEventArgs e)
            {
                base.OnStartup(e);
                Log.Info("==Startup=====================>>>");
            }
            protected override void OnExit(ExitEventArgs e)
            {
                Log.Info("<<<========================End==");
                base.OnExit(e);
            }

    先再运行编译后的exe文件

    然后退出程序,看结果

    我们可以看到程序在进入和退出的时候也写入了日志。 

    扩展的知识点

    日志记录器(Logger)的级别顺序: 
        分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级 从高到低分别是 ERROR、WARN、INFO、DEBUG。 
        通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别, 则应用程序中所有DEBUG级别的日志信息将不被打印出来。(比定义低的级别不会被打印出来)

        优先级高的将被打印出来。项目上生产环境时候建议把debug的日志级别重新调为warn或者更高,避免产生大量日志。

  • 相关阅读:
    经典的Java基础面试题集锦
    2016春招Android开发实习生(网易传媒)笔试
    十三、集合点和事务
    十一、LoadRunner组成和工作原理
    Java+selenium之WebDriver常见特殊情况如iframe/弹窗处理(四)
    修改jar包内容并打包上传到私服
    Information:java: Multiple encodings set for module chunk platf "GBK" will be used by compile
    十、创建、运行和监控测试场景
    在gitlab新建分支,IDEA切换时找不到的解决办法
    Git 代码撤销、回滚到任意版本(当误提代码到本地或master分支时)
  • 原文地址:https://www.cnblogs.com/likui-bookHouse/p/11052053.html
Copyright © 2011-2022 走看看