NLog简介

安装NLog


asp.net core需要使用另外一个教程

在VS里安装NLog.Config包,这个包会自动安装NLog 包和NLog.Schema包。

NLog.Config包会在vs项目中自动生成一个NLog.config文件。

配置nlog的输出


NLog只会在配置一个(或更多)NLog目标(Target)的情况下产生输出。

NLog可以通过添加一个NLog.config来配置。配置文件到您的应用程序项目(文件属性:总是复制)。这是NLog.config的内容的一个简单示例:




    
        
        
    

    
        
        
    

下面是编程方式进行配置:

var config = new NLog.Config.LoggingConfiguration();

var logfile = new NLog.Targets.FileTarget("logfile") { FileName = "file.txt" };
var logconsole = new NLog.Targets.ConsoleTarget("logconsole");
            
config.AddRule(LogLevel.Info, LogLevel.Fatal, logconsole);
config.AddRule(LogLevel.Debug, LogLevel.Fatal, logfile);
            
NLog.LogManager.Configuration = config;

写log消息


Example of how to acquire a logger and writing a message to the logger:

var logger = NLog.LogManager.GetCurrentClassLogger();
logger.Info("Hello World");

log等级

每条日志消息都有相关的日志级别,它可以识别消息的重要性/详细信息。NLog可以根据日志记录器的名称和日志级别来路由日志消息。
NLog支持以下日志级别:

  • trace - 非常详细的日志,它可能包括大量的信息,例如协议有效负载。这个日志级别通常只在开发期间启用
  • debug - 调试信息,比跟踪更少,通常在生产环境中不会启用
  • Info - 信息消息,通常在生产环境中启用
  • warn - 警告消息,通常用于可以恢复的非关键问题或临时故障
  • Error - 错误消息——大多数情况下这些都是Exceptions
  • Fatal - 非常严重的错误!
public class MyClass
{
  private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();

  public void MyMethod1()
  {
    logger.Trace("Sample trace message");
    logger.Debug("Sample debug message");
    logger.Info("Sample informational message");
    logger.Warn("Sample warning message");
    logger.Error("Sample error message");
    logger.Fatal("Sample fatal error message");

    // alternatively you can call the Log() method
    // and pass log level as the parameter.
    logger.Log(LogLevel.Info, "Sample informational message");


    // Example of logging an exception
    try
    {

    }
    catch (Exception ex)
    {
        logger.Error(ex, "ow noos!"); // render the exception with ${exception}
        throw;
    }


  }
}

日志输出信息的格式


可以配置如何将一个消息写入NLog目标
如下是大多数NLog目标所使用的默认简单格式:


下面示例可以显示更多信息:


参考全部格式:Layout Renderers

最佳实践


1. Logger应该是每个类中的静态变量

创建一个新的Logger有开销,因为它必须获得锁和分配对象。因此推荐如下方式创建Logger

namespace MyNamespace
{
  public class MyClass
  {
    private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
  }
}

2. Logger应该处理字符串格式

避免预先执行字符串分配或字符串串联,而是让记录器执行格式化。这将允许NLog延迟格式化并减少开销。

logger.Info("Hello {0}", "Earth");

3. Logger应该放在异常里处理

避免将异常作为格式化参数,而是将其显式地作为第一个参数提供。这将有助于NLog目标提供更好的日志记录。

try
{
}
catch (Exception ex)
{
    logger.Error(ex, "Something bad happened");
}

4. 从NLog.config验证XML配置

默认情况下,NLog吞下所有异常,所以日志记录的问题不会导致应用程序中断。但是对于很多应用程序来说,日志记录是非常重要的,所以如果初始的NLog配置失败了,那么它就是致命的。
添加throwConfigExceptions="true",当配置出现问题时可以让NLog知道




还有一个throwExceptions="true"的设置,它不应该在生产中使用,因为它会对应用程序造成严重破坏。它用于单元测试和本地故障排除。
参见配置故障排除

5.

NLog在默认情况下会尝试在应用程序关闭时自动刷新。Microsoft Windows.NET应用程序在终止前执行关机(通常是2秒)的时间是有限的。如果有一个NLog以NLog为目标的NLog,需要网络流量(Http、Mail、Tcp),那么在运行linux/windows上独立运行时,这是一个非常好的主意。

NLog.LogManager.Shutdown(); // Flush and close down internal threads and timers

你可能感兴趣的:(NLog简介)