.Net使用日志框架NLog

在Nuget中安装NLog

NLog可以直接使用Nuget安装:PM > Install-Package Nlog

使用NLog

NLog的使用方式基本上和其它的Log库差不多,分为Trace、Debug、Info、Error、Fatal五个等级

    private static Logger logger = LogManager.GetCurrentClassLogger();
    static void Main(string[] args)
    {
        logger.Trace("Trace Message");
        logger.Debug("Debug Message");
        logger.Info("Info Message");
        logger.Error("Error Message");
        logger.Fatal("Fatal Message");
    }

不过它提供的方法倒是蛮多的,光Trace就有42种重载形式。虽然功能强大事件好事,但某种程度上也增加了学习成本。

配置NLog

执行了上面的语句后,实际上是没有任何效果的。因为我们还没有配置日志的输出路径。这个输出路径一般是在配置文件中配置的(也支持硬编码),NLog支持两种配置文件格式

  • 配置信息嵌入在.NET应用程序标准的*.exe.config或者web.config文件里
  • 保存在独立文件里,也叫单一格式

第一张方式比较常规,但我不喜欢这种方式,因为它和其它与日志无关的配置写在一块儿了,不方便在不同的项目中共享配置。这里主要介绍下独立文件的方式。NLog支持如下三种文件名的配置文件:"NLog.config"、"*.exe.nlog"和"NLog.dll.nlog",我比较喜欢第一种。不管哪一种,其内容是一样的,一个简单的示例如下:

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <targets>
        <target name="console" xsi:type="Console" />
        <target name="debugger" xsi:type="Debugger" layout="${date:format=HH\:mm\:ss.fff}: ${message}" />
        <target name="error_file" xsi:type="File"
                        fileName="${basedir}/Logs/Error/${shortdate}/error.txt" maxArchiveFiles="30"
                        layout="${longdate} | ${level:uppercase=false} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}" />
    </targets>
    <rules>
        <!--<logger name="*" writeTo="console" />-->
        <logger name="*" minlevel="Debug" writeTo="debugger" />
        <logger name="*" minlevel="Error" writeTo="error_file" />
    </rules>
</nlog>

它主要包括两个部分:输出目标target路由规则rule。下面就分别介绍一下他们。

输出目标target

每个target代表一个输出目标,它主要包含两个属性:name和type。name是输出模板的名称,在后面的路由规则中使用,type则是输出类型,常见的有

  • Console        输出到控制台
  • Debugger     输出到
  • File        输出到文件
  • Mail        输出为邮件发送
  • Network        输出到网络地址
  • Database        输出到数据库

当选择某一种类型的时候,还需要配置相应的参数。如输出类型是File时,我们要配置日志路径filename,这里是可以使用一些变量的(花括号里面的部分),我这里的例子:

fileName="${basedir}/Logs/Error/${shortdate}/error.txt"

输出的日志格式为 /Log/2014-10-01/err.txt    每天生成一个文件夹,非常方便。

输出格式的控制:

有的时候,我们需要对时间、异常等这些对象的输出格式进行控制。它们可以通过修改layout参数来实现。这一部分是相对比较复杂的,不在本文讨论范围之列,有空的话我再专门介绍下。

顺便这儿也贴一个我常用的配置文档:

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <targets>
        <!--屏幕打印消息-->
        <target name="console" xsi:type="ColoredConsole"
                        layout="${date:format=HH\:mm\:ss}> ${message}"/>

        <!--VS输出窗口-->
        <target name="debugger" xsi:type="Debugger"
                        layout="${date:format=HH\:mm\:ss} | ${level:padding=-5} | ${message}" />

        <!--保存至文件-->
        <target name="error_file" xsi:type="File" maxArchiveFiles="30"
                        fileName="${basedir}/Logs/Error/${shortdate}/error.txt"
                        layout="${longdate} | ${level:uppercase=false:padding=-5} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}" />
    </targets>
    <rules>
        <!--<logger name="*" writeTo="console" />-->
        <logger name="*" minlevel="Debug" writeTo="debugger" />
        <logger name="*" minlevel="Error" writeTo="error_file" />
    </rules>
</nlog>

路由规则rule

路由规则主要用于将日志和输出目标匹配起来,它一般有如下几个属性

  • name - 记录者的名字 (允许使用通配符*)
  • minlevel - 匹配日志范围的最低级别
  • maxlevel - 匹配日志范围的最高级别
  • level - 匹配的单一日志级别
  • levels - 匹配的一系列日志级别,由逗号分隔。
  • writeTo - 规则匹配时日志应该被写入的一系列目标,由逗号分隔。

看上去有好几个属性,实际上用起来还是比较简单的,例如我前面的三条规则解释如下:

    <logger name="*" writeTo="console" />    将所有的日志输出到控制台中
    <logger name="*" minlevel="Debug" writeTo="debugger" />            将Debug级别以上的日志输出到Debugger中
    <logger name="*" minlevel="Error" writeTo="error_file" />        将Error级别以上的日志输出到文件中

另外,NLOG支持配置多个路由规则,可以非常方便我们的输出。

简单的封装:

前面已经列举过NLog的使用方法,虽然其使用并不算发杂,但一个简单的Wrapper可以降低使用门槛,规范使用方式,甚至方便后期切换日志框架,很多时候还是非常有必要的。这里给一个简单的封装:

    class Logger
    {
        NLog.Logger logger;

        private Logger(NLog.Logger logger)
        {
            this.logger = logger;
        }

        public Logger(string name)
            :this(NLog.LogManager.GetLogger(name))
        {
        }

        public static Logger Default { get; private set; }
        static Logger()
        {
            Default = new Logger(NLog.LogManager.GetCurrentClassLogger());
        }

        public void Debug(string msg, params object[] args)
        {
            logger.Debug(msg, args);
        }

        public void Debug(string msg, Exception err)
        {
            logger.Debug(msg, err);
        }

        public void Info(string msg, params object[] args)
        {
            logger.Info(msg, args);
        }

        public void Info(string msg, Exception err)
        {
            logger.Info(msg, err);
        }

        public void Trace(string msg, params object[] args)
        {
            logger.Trace(msg, args);
        }

        public void Trace(string msg, Exception err)
        {
            logger.Trace(msg, err);
        }

        public void Error(string msg, params object[] args)
        {
            logger.Error(msg, args);
        }

        public void Error(string msg, Exception err)
        {
            logger.Error(msg, err);
        }

        public void Fatal(string msg, params object[] args)
        {
            logger.Fatal(msg, args);
        }

        public void Fatal(string msg, Exception err)
        {
            logger.Fatal(msg, err);
        }
    }

到此这篇关于.Net使用日志框架NLog的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Nlog日志框架集成Seq扩展包

    什么是Seq? 正如我们使用不同的日志框架来为我们的应用程序收集各类日志信息, 这些信息可以有效的帮助我们快速诊断应用程序中发生的各类问题, 尽管如此,对于常见的日志框架而言, 它们往往只是解决了日志功能快速集成以及如何配置输出保存等功能. 对于那些不间断运行的应用程序而言, 日志的存储和维护工作会变得异常麻烦, 如果想灵活的在不同时间段去查找日志, 根据不同的日志类型快速的定位问题, 这会变得非常困难,所以为了解决这些问题, Seq就登场了.Seq提供了收集应用程序日志.搜索过滤.警告以及图表

  • ASP.NET Core使用NLog输出日志记录

    ASP.NET Core 中的日志记录 https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/logging/?view=aspnetcore-2.1 日志级别:Trace ->Debug-> Information ->Warning-> Error-> Critical 级别包含范围由大到小 ,如 Trace 就包含了所有信息. 基础用法 public class HomeController : Contro

  • .NET日志框架Nlog使用介绍

    目录 快速安装 快速配置 快速使用 详解配置 添加支持Console输出 输出至CSV文件 配置日志大小 配置日志分级 配置生成规则 日志过滤器 条件语言 条件函数 NLog是一个基于.NET平台编写的类库,我们可以使用NLog在应用程序中添加极为完善的跟踪调试代码. NLog是一个简单灵活的.NET日志记录类库.通过使用NLog,我们可以在任何一种.NET语言中输出带有上下文的(contextual information)调试诊断信息,根据喜好配置其表现样式之后发送到一个或多个输出目标(ta

  • ASP.NET Core使用NLog记录日志

    目录 一.前言 二.使用NLog 1.引入NLog 2.添加配置文件 3.在控制器中使用 4.读取指定位置的配置文件 5.封装 一.前言 在所有的应用程序中,日志功能是不可或缺的模块,我们可以根据日志信息进行调试.查看产生的错误信息,在ASP.NET Core中我们可以使用log4net或者NLog日志组件来实现记录日志的功能,这里讲解如何在ASP.NET Core中使用NLog. 这里采用的是.NET Core 3.1创建应用程序. 那么什么是NLog呢? NLog是一个基于.NET平台编写的

  • Asp.Net Core用NLog记录日志操作方法

    需求 1.日志自动写入到数据库.写入到文件 2.appsettings.json数据库连接更改后,不需要去改NLog中的连接地址,启动网站或项目时自动检测变动然后去更改,以appsettings.json为准,保持同步. 3.写入日志时,除了NLog自带的字段,新增LogType自定义字段记录日志类型,例如网站日志.中间件日志等 4.统一的写日志方法,不用每次get一个logger对象(或依赖注入)来记日志 安装包 在nuget中安装NLog和NLog.Web.AspNetCore ,这两个是N

  • .Net Core 使用NLog记录日志到文件和数据库的操作方法

    NLog 记录日志是微软官方推荐使用. 接下来,通过配置日志记录到文件和Sql Server数据库. 第一步:首先添加包NLog.Config (可通过微软添加包命令Install-Package 包名进行添加,也可以通过管理NuGet程序包进行添加),添加成功后会生成NLog.config配置文件.并对该配置文件进行配置.详细配置可参考Git上 NLog说明. 一下是我个人配置. <?xml version="1.0" encoding="utf-8" ?&

  • .Net使用日志框架NLog

    在Nuget中安装NLog NLog可以直接使用Nuget安装:PM > Install-Package Nlog 使用NLog NLog的使用方式基本上和其它的Log库差不多,分为Trace.Debug.Info.Error.Fatal五个等级 private static Logger logger = LogManager.GetCurrentClassLogger(); static void Main(string[] args) { logger.Trace("Trace Me

  • 解读ASP.NET 5 & MVC6系列教程(9):日志框架

    框架介绍 在之前的.NET中,微软还没有提供过像样的日志框架,目前能用的一些框架比如Log4Net.NLog.CommonLogging使用起来多多少少都有些费劲,和java的SLF4J根本无法相比.但在新版的ASP.NET5中,可谓是牛气冲天,微软提供的Microsoft.Framework.Logging框架集可谓就是.NET版的SLF4J,提供相应的接口,其它第三方组件可以根据接口实现自己的实现. ILoggerFactory接口 ILoggerFactory接口是日志的入库点,在系统中通

  • .net新兴日志框架Serilog简介

    Serilog是.net下的新兴的日志框架,本文这里简单的介绍一下它的用法. 首先安装Nuget包: Install-Package Serilog Install-Package Serilog.Sinks.Console 其中包Serilog是Log核心库,Serilog.Sinks.Console是Log的控制台输出库,这个也是日志框架的一贯策略,一个核心库加多个输出库组合使用,这样可以保持良好的扩展性. 简单的示例: using (var log = new LoggerConfigur

  • 浅谈Java日志框架slf4j作用及其实现原理

    SLF4J是一个日志框架抽象层,底下绑定具体的日志框架,比如说Log4J,Logback,Java Logging API等.SLF4J也有自身的默认实现,但是我们还是主要以日志框架抽象层的身份使用SLF4J. 要使用SLF4J,得包含对"org.slf4j:slf4j-api"的依赖. 简单回顾门面模式 slf4j是门面模式的典型应用,因此在讲slf4j前,我们先简单回顾一下门面模式, 门面模式,其核心为外部与一个子系统的通信必须通过一个统一的外观对象进行,使得子系统更易于使用.用一

  • 浅谈Spring Boot日志框架实践

    Java应用中,日志一般分为以下5个级别: ERROR 错误信息 WARN 警告信息 INFO 一般信息 DEBUG 调试信息 TRACE 跟踪信息 Spring Boot使用Apache的Commons Logging作为内部的日志框架,其仅仅是一个日志接口,在实际应用中需要为该接口来指定相应的日志实现. SpringBt默认的日志实现是Java Util Logging,是JDK自带的日志包,此外SpringBt当然也支持Log4J.Logback这类很流行的日志实现. 统一将上面这些 日志

  • golang日志框架之logrus的使用

    golang日志库 golang标准库的日志框架非常简单,仅仅提供了print,panic和fatal三个函数对于更精细的日志级别.日志文件分割以及日志分发等方面并没有提供支持.所以催生了很多第三方的日志库,但是在golang的世界里,没有一个日志库像slf4j那样在Java中具有绝对统治地位.golang中,流行的日志框架包括logrus.zap.zerolog.seelog等. logrus是目前Github上star数量最多的日志库,目前(2018.08,下同)star数量为8119,fo

  • SpringBoot2 集成log4j2日志框架的实现

    前言 Log4j2是 Log4j 的进化版本,并提供了许多 Logback 可用的改进,同时解决了 Logback 体系结构中的一些固有问题.而且日志处理中我们会用到kafka作为日志管道.而kafka客户端依赖与Logback的兼容不是很完美,你可以选择排除依赖冲突或者使用Log4j2 . <!-- more --> 排除Logback依赖 Spring Boot 2.x默认使用Logback日志框架,要使用 Log4j2必须先排除 Logback. <dependency> &

  • SpringBoot logback日志框架使用过程解析

    一.基本知识说明 SpringBoot默认使用logback作为日志框架 ,所以引入起步依赖后就可以直接使用logback,不需要其他依赖. SpringBoot会默认加载classpath:logback.xml或者classpath:logback-spring.xml 作为日志的配置文件,在springboot项目中可以直接把日志配置文件放在resources目录下. 简单使用时也可以不使用日志配置文件,将日志相关的配置直接放在application.yml中,如下 #日志设置 loggi

随机推荐