内容
安装日志
nog可以在NuGet上下载。
如果只安装NLog.Config软件包,则NLog和NLog.Schema这两个软件包将安装在一起,以实现启动配置和智能识别。
使用GUI或在软件包管理控制台中使用以下命令Install-Package NLog.Config
那么,你现在可以编译并运行你自己的APP应用程序,它可以使用NLog的功能。
配置NLog输出的目标
如果配置了一个或多个NLog targets,NLog将只生成相应的项目。
NLog可以使用NLog.config的XML配置文件来配置您的APP应用程序。 (必须始终修改文件属性以进行复制。 以下是简单的NLog.config配置内容。
xmlns 3360 xsi=' http://www.w3.org/2001/XML架构-instance '
注:这里,targets表示写入方式,上述的logfile表示使用txt文件的方式进行记录,logconsole表示在控制台进行记录,rules表示与写入方式对应的规则也可以用代码方式构成例如,下面的代码类似于:
var config=new nlog.config.logging configuration (;
var log file=new nlog.targets.filetarget ({ filename=' file.txt ',Name='logfile' } );
varlogconsole=new nlog.targets.console target ({ name=' log console ' } );
config.logging rules.add (new nlog.config.logging rule (' * ',LogLevel.Info,logconsole ) );
config.logging rules.add (new nlog.config.logging rule (' * ',LogLevel.Debug,logfile ) );
nog.log manager.configuration=config;
日志信息的写入
获取记录器并向记录器写入消息的方法示例:
var logger=nlog.log manager.getcurrentclasslogger (;
Logger.info(Helloworld );
如果正确设置了NLog targets,则上述代码会将信息输出到设置的targets。
logger具有名称,可以通过logging-rules (请参见上面配置示例中的name='*”)重定向到所需的目标。
使用nlog.log manager.getcurrentclasslogger ()可以创建包含命名空间的调用类名的logger . 也可以使用指定显式名称(.nlog.logmanager.getlogger ) )
logger可以使用各种logging-rules (请参见以上配置示例中的minLevel )配置的LogLevels,并将用户相关信息重定向到targets的:
logger未绑定到特定目标。 写入一个logger的消息可以根据logging-rules进行配置,并可以写入多个目标。 通过保持这种隔离,可以在代码中保留日志记录。 此外,通过在一个位置更新配置,可以轻松更改日志的创建方式和位置。 也可以显示过滤器日志消息。
日志级别
每个记录中的信息都有一个日志级别,用于指示该记录信息的重要性或详细程度。 NLog可以根据日志消息的名称和日志级别路由日志消息。
NLog支持以下日志记录级别: Trace -非常详细的日志,包括最详细的信息,例如协议的有效载荷。 通常,此日志级别仅在开发过程中使用。
调试-调试信息、仅次于跟踪的详细信息,在生产环境中通常无效
信息性消息,通常在生产环境中有效;
Warn -警告消息。 通常用于不重要的问题。 这些问题能否恢复,是暂时的障碍。
错误消息-经常记录Exceptions“异常”信息;
故障-非常严重的错误!
公共类别我的类别
{
privatestaticnlog.logger logger=nlog.log manager.getcurrentclassloger (;
公共语音我的方法1 (
{
logger.trace (sampletracemessage
");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");
}
}
布局和布局渲染器
布局和布局渲染器 可以配置日志消息如何写入NLog targets.
下面展示了一个大多数 NLog targets 使用的简单布局方式 SimpleLayout :
也可以进行相应的配置,以获取更详尽的信息:
你也可以使用更复杂的布局,而不是简单的布局:
更详尽信息,参考: Layouts
日志最佳实践每个类中,Logger 应该被设置成一个静态变量
每创建一个 Logger 都会有一定的性能损耗,因为它必须获取锁和分配对象
因此建议像这样创建logger:
namespace MyNamespace
{
public class MyClass
{
private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
}
}
Logger 应该处理字符串格式化
避免预先执行字符串分配或字符串连接,而是让日志记录器执行格式化。这将允许NLog推迟格式化并减少开销。
因此,建议您这样执行日志:
logger.Info("Hello {0}", "Earth");Logger 应该记录异常
避免将异常作为格式化参数,而是将其显式地作为第一个参数提供。这将帮助NLog目标提供更好的日志记录。
try
{
}
catch (Exception ex)
{
logger.Error(ex, "Something bad happened");
}
从 NLog.config XML配置文件中验证配置
默认情况下,NLog 允许记录所有异常,因此,日志记录的问题不会导致应用程序中断。但是为更多的应用程序记录日志是至关重要的,所以如果 NLog 配置文件的实例错误,那将是致命的.
增加 throwConfigExceptions="true" 会使 NLog 在配置文件错误的情况下抛出异常:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
throwConfigExceptions="true">
类似的有 throwExceptions="true", 但它不能在生产环境中使用,因为它会对应用程序造成破坏. 它被设计用在单元测试、本地故障排除中.详见Troubleshooting ConfigurationRemember to Flush
当应用停止运行时,NLog 默认会自动尝试刷新. Microsoft Windows 给.Net应用程序在被终止前执行关机(通常是2秒)的时间。如果一个 NLog配置了需要网络传输的 NLog Tagets (Http、Mail、Tcp)运行在Linux/Windows,那么执行一个手动的 Flush/Shutdown 是一个明智之举.
NLog.LogManager.Shutdown(); // 刷新并关闭内部线程和计时器。
运行在Mono/Linux 的 .NET 应用在进入应用程序关闭阶段前,必需去停止线程和计时器. 如果未执行完成会导致未处理的异常和分割错误,以及其他不可预知的行为。
封装器
NLog 支持特殊类型的 targets ,这些类自己本身不做任何日志记录,但是会修改其它 loggers 的行为. 这些loggers被称为封装器. 一般常用的是:AsyncWrapper - 提供异步方式缓冲执行目标写入,可以提高性能;
BufferingWrapper - 简单批处理日志信息. 可能仅在某些日志事件发生时才发送批处理(例如 异常信息);
AsyncWrapper 提供一个便捷的快捷设置方式,在配置文件中添加 async="true" 即可:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
这样设置之后,所有写入文件的日志将以异步的方式,可以提高调用线程的响应能力。
参考资料: