zoukankan      html  css  js  c++  java
  • C# NLog 配置

    首先用NuGet安装NLog依赖DLL

    NLog

    NLog.Config

    NLog.Schema

    NLog配置文件NLog.config:

    <?xml version="1.0" encoding="utf-8" ?>
    <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
          autoReload="true"
          throwExceptions="false"
          internalLogLevel="Off"
          internalLogFile="d:
    log
    log-internal.log">
    
      <!-- optional, add some variables
      https://github.com/nlog/NLog/wiki/Configuration-file#variables
      -->
      <!--<variable name="myvar" value="myvalue"/>-->
    
      <variable name="logDir" value="${basedir}/nlog"/>
      <variable name="logFileName" value="${date:format=yyyyMMdd}.txt"/>
      <variable name="logArchiveFileName" value="${date:format=yyyyMMdd}_{#}.txt"/>
      <variable name="logLayout" value="${date:format=yyyy-MM-dd HH:mm:ss.fff} [${level}] ${message}"/>
    
      <!--
      See https://github.com/nlog/nlog/wiki/Configuration-file
      for information on customizing logging rules and outputs.
       -->
    
      <targets>
    
        <!--
        add your targets here
        See https://github.com/nlog/NLog/wiki/Targets for possible targets.
        See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possible layout renderers.
        -->
    
        <!--
        Write events to a file with the date in the filename.
        <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
                layout="${longdate} ${uppercase:${level}} ${message}" />
        -->
    
        <target xsi:type="File" name="info"
                layout="${logLayout}"
                fileName="${logDir}/info/${logFileName}"
                archiveFileName="${logDir}/info/${logArchiveFileName}"
                archiveAboveSize="10485760"
                archiveNumbering="Sequence"
                maxArchiveFiles="100"
                concurrentWrites="true"
                keepFileOpen="true"
                openFileCacheTimeout="30"
                encoding="UTF-8" />
    
        <target xsi:type="File" name="debug"
                layout="${logLayout}"
                fileName="${logDir}/debug/${logFileName}"
                archiveFileName="${logDir}/debug/${logArchiveFileName}"
                archiveAboveSize="10485760"
                archiveNumbering="Sequence"
                maxArchiveFiles="100"
                concurrentWrites="true"
                keepFileOpen="true"
                openFileCacheTimeout="30"
                encoding="UTF-8" />
    
        <target xsi:type="File" name="error"
                layout="${logLayout}"
                fileName="${logDir}/error/${logFileName}"
                archiveFileName="${logDir}/error/${logArchiveFileName}"
                archiveAboveSize="10485760"
                archiveNumbering="Sequence"
                maxArchiveFiles="100"
                concurrentWrites="true"
                keepFileOpen="true"
                openFileCacheTimeout="30"
                encoding="UTF-8" />
    
      </targets>
    
      <rules>
        <!-- add your logging rules here -->
    
        <!--
        Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace)  to "f"
        <logger name="*" minlevel="Debug" writeTo="f" />
        -->
    
        <logger name="*" minlevel="Info" maxlevel="Info" writeTo="info" />
    
        <logger name="*" minlevel="Debug" maxlevel="Debug" writeTo="debug" />
    
        <logger name="*" minlevel="Error" maxlevel="Error" writeTo="error" />
    
      </rules>
    </nlog>
    View Code

    变量定义:

    private Logger _log = NLog.LogManager.GetLogger("NLogTest");
    View Code

    或者:

    private Logger _log = NLog.LogManager.GetCurrentClassLogger();
    View Code

    写日志示例:

    private void button4_Click(object sender, EventArgs e)
    {
        Task.Run(() =>
        {
            Log("==== 开始 ========");
            Stopwatch stopwatch = new Stopwatch();
            stopwatch.Start();
            List<Task> taskList = new List<Task>();
            Task tsk = null;
            int taskCount = 0;
    
            tsk = Task.Run(() =>
            {
                for (int i = 0; i < n; i++)
                {
                    _log.Info("测试日志 " + i.ToString("000000"));
                    Interlocked.Increment(ref taskCount);
                }
            });
            taskList.Add(tsk);
    
            tsk = Task.Run(() =>
            {
                for (int i = 0; i < n; i++)
                {
                    _log.Debug("测试日志 " + i.ToString("000000"));
                    Interlocked.Increment(ref taskCount);
                }
            });
            taskList.Add(tsk);
    
            tsk = Task.Run(() =>
            {
                for (int i = 0; i < n; i++)
                {
                    _log.Error("测试日志 " + i.ToString("000000"));
                    Interlocked.Increment(ref taskCount);
                }
            });
            taskList.Add(tsk);
    
            Task.WaitAll(taskList.ToArray());
            Log("Task Count=" + taskCount);
    
            Log("==== 结束 " + ",耗时:" + stopwatch.Elapsed.TotalSeconds.ToString("0.000") + " 秒 ========");
            stopwatch.Stop();
        });
    }
    View Code

     

  • 相关阅读:
    DrawSVG
    Cool!15个创意的 CSS3 文本效果【下篇】
    分享最新15个加速 Web 开发的框架和工具
    Unsplash.it
    Cool!15个超炫的 CSS3 文本特效【上篇】
    Codrops 实验:使用 Vibrant.js 提取图像颜色
    Javscript调用iframe框架页面中函数的方法
    竞争的残酷性暂时只体现在产业竞争上(老美有发达的制药、农业、军工、金融、航空、航天、石油、化工等产业,还有以芯片为代表的高端服务业)
    Qt元对象(Meta-Object)系统与反射
    安晓辉:程序员在公司没事干时候,做什么好?(产品上想多一点,设计上想多一点,技术上做深一点、做宽一点,思维框架上学多一点)
  • 原文地址:https://www.cnblogs.com/s0611163/p/15369498.html
Copyright © 2011-2022 走看看