`
jiasongmao
  • 浏览: 666745 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

NLog的介绍使用

    博客分类:
  • .NET
 
阅读更多

NLog是什么

NLog是一个基于.NET平台编写的类库,我们可以使用NLog在应用程序中添加极为完善的跟踪调试代码。
NLog是一个简单灵活的.NET日志记录类库。通过使用NLog,我们可以在任何一种.NET语言中输出带有上下文的(contextual information)调试诊断信息,根据喜好配置其表现样式之后发送到一个或多个输出目标(target)中。
NLog的API非常类似于log4net,且配置方式非常简单。NLog使用路由表(routing table)进行配置,这样就让NLog的配置文件非常容易阅读,并便于今后维护。
NLog遵从BSD license,即允许商业应用且完全开放源代码。任何人都可以免费使用并对其进行测试,然后通过邮件列表反馈问题以及建议。
NLog支持.NET、C/C++以及COM interop API,因此我们的程序、组件、包括用C++/COM 编写的遗留模块都可以通过同一个路由引擎将信息发送至NLog中。
简单来说Nlog就是用来记录项目日志的组件

NLog日志输出目标

文件 比如TXT、Excel
文本控制台
Email
数据库
网络中的其它计算机(通过TCP或UDP)
基于MSMQ的消息队列
Windows系统日志

NLog使用

  直接用NuGet安装就行了

 简单的Demo

 

<?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="c:\temp\nlog-internal.log">
  <variable name="myvar" value="myvalue"/>
  <targets>
    <target xsi:type="File" name="SimpleDemoFile" fileName="../../../Logs/SimpleDemo.txt" layout="${message}" encoding="UTF-8"/>
  </targets>
  <rules>
    <logger name="SimpleDemo" level="Error" writeTo="SimpleDemoFile"/>
  </rules>
</nlog>

 

 

 

using NLog;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _2017011301SimpleDemo
{
    class Program
    {
      public static Logger logger = LogManager.GetLogger("SimpleDemo");
        static void Main(string[] args)
        {
            Console.WriteLine("执行开始");
            logger.Error("Hello World");
            Console.WriteLine("执行结束");
            Console.ReadKey();
        }
    }
}

 

 

输出到  ../../../Logs/SimpleDemo.txt 内容为 Hello World

 

NLog配置

<?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="c:\temp\nlog-internal.log">
<variable name="myvar" value="myvalue"/>
<targets> </targets>
<rules> </rules>
</nlog>

xmlns=“http://www.nlog-project.org/schemas/NLog.xsd” 这表示默认命名空间
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 这个命名空间里面的元素或者属性就必须要以xsi:这种方式来写
比如schemaLocation就是他的一个属性,所以写成xsi:schemaLocation
而默认命名空间不带类似xsi这种,其实xml标签名称有个专业叫法叫做QName,而如果没有前面的xsi:这种一般叫做NCName
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
表示把定义这个命名空间的schema文件给引用进来,好让开发类型工具能够解析和验证你的xml文件是否符合语法规范
等同于

简单来说 上面是用来验证你XML格式是否正确的。

InternalLogFile="c:\log\nlog.txt" //NLog内部日志文件位置 
internalLogLevel="Debug" //日志级别 
autoReload:一旦启动程序,这时候NLog.config文件被读取后,知道程序再启动都不会再读取配置文件了。假如我们不想停掉程序,比如说服务器哪能说停就停哈。这就用上这个配置了,这个配置功能是,一旦你对配置文件修改,程序将会重新读取配置文件,也就是自动再配置。

throwExceptions//NLog日志系统抛出异常
internalLogFile="c:\log\nlog.txt" //NLog内部日志文件位置 
internalLogLevel="Debug" //日志级别 

<variable /> - 定义配置文件中用到的变量
<targets /> - 定义日志的目标/输出
<rules /> - 定义日志的路由规则

 

Layout布局

几种常见的
${var:basePath} basePath是前面自定义的变量
${longdate} 日期格式 2017-01-17 16:58:03.8667
${shortdate}日期格式 2017-01-17 
${date:yyyyMMddHHmmssFFF} 日期 20170117165803866
${message} 输出内容
${guid} guid
${level}日志记录的等级
${logger} 配置的logger

NLog记录等级

Trace - 最常见的记录信息,一般用于普通输出
Debug - 同样是记录信息,不过出现的频率要比Trace少一些,一般用来调试程序
Info - 信息类型的消息
Warn - 警告信息,一般用于比较重要的场合
Error - 错误信息
Fatal - 致命异常信息。一般来讲,发生致命异常之后程序将无法继续执行。
自上而下,等级递增。

NLog等级使用

指定特定等级 如:level="Warn" 
指定多个等级 如:levels=“Warn,Debug“ 以逗号隔开
指定等级范围 如:minlevel="Warn" maxlevel="Error"

 

Logger使用

从配置文件读取信息并初始化 两种常用的方式

根据配置的路由名获生成特定的logger Logger logger = LogManager.GetLogger("LoggerDemo");

初始化为当前命名空间下当前类的logger  Logger logger = LogManager.GetCurrentClassLogger();

区别是logger的name不一样 前者是LoggerDemo,后者是当前命名空间+点+当前类名 如类比较多,并且往同一个日志文件记录,建议用GetCurrentClassLogger

 

Logger有以下三种常用的写入方式

logger.Error("这是DatabaseDemo的错误信息");
logger.Error(“ContentDemo {0}:{1}”,“时间”,DateTime.Now.ToString());需要拼接字符串的话推荐这种,NLog做了延迟处理,用的时候才拼接。
logger.Log(LogLevel.Error, "这是ContentDemo");

Logger发邮件参数

smtpServer=“*****” 邮件服务器 例如126邮箱是smtp.126.com
smtpPort=“25“端口
smtpAuthentication=“Basic“ 身份验证方式 基本
smtpUserName=“*****“ 邮件服务器用户名
smtpPassword=“******”邮件服务器密码
enableSsl=“false”是否使用安全连接 需要服务器支持
addNewLines=“true” 开头与结尾是否换行
from=“****” 发件邮箱
to=“XXXX@XX.com,XXXXX@XX.com”收件邮箱 多个以逗号分隔
subject=“subject:${machinename}报错“ 邮件主题
header=“---------------------开头-------------------------“ 邮件开头
body=“${newline}${message}${newline}“ 邮件内容
footer=“---------------------结尾-------------------------“ 邮件结尾

 

 

<?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="true"
      internalLogLevel="Off"
      internalLogFile="c:\temp\nlog-internal.log">

  <!-- optional, add some variables
  https://github.com/nlog/NLog/wiki/Configuration-file#variables
  -->
  <variable name="basePath" value="C:\Users\Zachary\Desktop\练习\20170113NLog\Logs\"/>

  <targets>
    <target xsi:type="Mail"
            name="SendMail"
            smtpServer="你的邮件服务器"
            smtpPort="你的邮件服务器端口"
            smtpAuthentication="Basic"
            smtpUserName="你的邮件服务器名"
            smtpPassword="你的邮件服务器密码"
            enableSsl="false"
            addNewLines="false"
            from="你的发件邮箱"
            to="你的收件邮箱"
            subject="subject:${machinename}报错"
            header="---------------------开头-------------------------"
            body="${newline}${message}${newline}"
            footer="---------------------结尾-------------------------"
            encoding="UTF-8"/>
  </targets>

  <rules>
    <logger name="*" level="Error"  writeTo="SendMail"></logger>
  </rules>
</nlog>

 

 

Logger写入数据库参数

<target xsi:type="Database"
name="DatabaseFile"
dbProvider=“System.Data.SqlClient”数据库类型
commandText=“Insert into ErrorLog(ID, Content, CreateTime) Values(@id, @content, @createTime);”插入操作
connectionString=“data source=.;initial catalog=NLog;user id=sa;password=******;”> 数据库连接字符串 跟我们webcofig中的一样
<parameter name=“@id” layout=“${guid}” /> 参数
<parameter name="@content" layout="${message}" />
<parameter name="@createTime" layout="${date:format=yyyy\-MM\-dd HH\:mm\:ss.fff} " />
</target>

 需在数据库里提前建好表

 

 

<?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="true"
      internalLogLevel="Off"
      internalLogFile="../../../Logs/nlog-internal.log">

  <targets>
    <target xsi:type="Database"
            name="DatabaseFile"
            dbProvider="System.Data.SqlClient"
            commandText="Insert into ErrorLog(ID, Content, CreateTime) Values(@id, @content, @createTime);"
            connectionString="data source=.;initial catalog=NLog;user id=sa;password=你的数据库密码;">
    <parameter name="@id" layout="${guid}" />
    <parameter name="@content" layout="${message}" />
    <parameter name="@createTime" layout="${date:format=yyyy\-MM\-dd HH\:mm\:ss.fff} " />
    </target>
  </targets>
  <rules>
    <logger name="Database" level="Error" writeTo="DatabaseFile"/>
  </rules>
</nlog>

 

 

NLog.config可以单独放,也可以放在WebConfig里。

在configuration配置

 

<configSections>
    <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
  </configSections>

 

 

然后把NLog.config里面放在后面就行了。

 

<configuration>
  <configSections>
    <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
  </configSections>
  <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="true"
      internalLogLevel="Off"
      internalLogFile="c:\temp\nlog-internal.log">
    <variable name="myvar" value="myvalue"/>
    <targets async="false">
      <target xsi:type="File" name="WebDemoFile" fileName="C:\Users\Zachary\Desktop\练习\20170113NLog\Logs\${date:yyyyMMddHHmm}WebDemo.txt" layout="${longdate} ${message}" encoding="UTF-8"/>
    </targets>
    <rules>
      <logger name="WebDemo" level="Error" writeTo="WebDemoFile"/>
    </rules>
  </nlog>
</configuration>

 

 

 

 

分享到:
评论

相关推荐

    Nlog的使用测试

    本文将详细介绍NLog的使用方法以及如何配置文件,帮助你更好地理解和应用这一工具。 首先,让我们了解NLog的基本概念。NLog提供了一个简单的方式来记录应用程序中的事件,如错误、警告和信息,这些事件可以被写入到...

    NLog v4.7.11最新版Demo

    下面将详细介绍NLog的主要特性、使用方法以及如何在项目中集成NLog v4.7.11。 **NLog的主要特性:** 1. **灵活性**:NLog支持多种日志目标,如文件、控制台、数据库、电子邮件等,可以根据不同的需求配置不同的...

    C# 使用NLog记录日志

    本篇将详细介绍如何在C#项目中使用NLog进行日志记录。 首先,我们需要引入NLog库。如果你的项目是.NET Core或.NET Standard,可以通过NuGet包管理器安装NLog及其依赖项;如果是.NET Framework项目,可以使用NuGet或...

    .Net项目中NLog的配置和使用实例详解

    本篇将详细介绍NLog的配置和使用实例。 首先,要在项目中引入NLog,需要通过NuGet包管理器安装NLog包。在Visual Studio中,可以通过右键点击项目 -&gt; 管理NuGet程序包 -&gt; 搜索NLog -&gt; 安装NLog来完成添加。 接下来...

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

    在本文中,我们将详细介绍如何使用NLog在Asp.Net Core中进行日志记录,并满足特定需求。 需求分析: 1. 自动写入日志到数据库和文件:NLog允许配置多个目标(Targets),如文件和数据库,以实现日志的多渠道记录。 ...

    vs 日志类工具Nlog

    以上就是关于NLog的基本介绍,通过它,开发者可以方便地集成日志功能,提升.NET应用程序的维护性和稳定性。NLog的灵活性、可扩展性和强大的配置能力,使其成为了.NET开发中的首选日志工具之一。

    ASP.NET Core开发教程之Logging利用NLog写日志文件

    本文主要介绍了ASP.NET Core 开发-Logging 使用NLog 写日志文件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 NLog 可以适用于 .NET Core 和 ASP.NET Core 。 ASP.NET Core已经内置...

    NLog4.4.12-slf4net.0.1.32.1-common.logging.3.4.1

    `nlog.4.4.12.nupkg` 文件是NuGet包,用于方便地在项目中安装和管理NLog依赖,使得在项目中添加、配置和使用NLog变得简单快捷。 2. **Slf4net** Simple Logging Facade for .NET (Slf4net) 是一个轻量级的日志接口...

    很实用的NLog配置分享

    NLog是一个基于.NET平台编写的类库,我们可以使用NLog在应用程序中添加极为完善的跟踪调试代码。本文主要介绍的是关于NLog配置的相关内容,下面话不多说了,来一起看看详细的介绍吧 NLog配置 新建一个文件命名为NLog...

    22-10-13-08-SqlSugarAcquaintance(第3方日志中间件NLog-v5.0.4)

    本节将重点介绍如何利用NLog v5.0.4版本与SqlSugarCore结合,实现日志的持久化存储。 首先,NLog是一个广泛使用的、高度可配置的日志记录库,支持多种目标(如文件、数据库、控制台等)以及自定义日志格式。它允许...

    ASP.NET Core与NLog集成的完整步骤

    任何人都可以免费使用并对其进行测试,然后通过邮件列表反馈问题以及建议。 下面话不多说了,来一起看看详细的介绍吧。 步骤 1 在项目的project.json中添加依赖NLog.Extensions.Logging: dependencies: { NLog....

    AspNetCoreNlog:ASP.NET Core NLog MS SQL Server PostgreSQL MySQL Elasticsearch

    本文介绍如何在使用NLog登录到Microsoft SQL Server的ASP.NET Core应用程序中设置日志记录。 NLog.Web.AspNetCore Nuget包已添加到csproj文件中的依赖项中。 &lt; TargetFramework&gt;...

    LogViewer (Log4j, NLog)-开源

    今天我们要介绍的是一款名为“LogViewer”的开源软件,它专门针对Log4j和NLog这两种广泛使用的日志框架设计,能够帮助开发者和运维人员高效地读取、搜索和过滤日志信息。 LogViewer是一款高效且功能丰富的日志查看...

    SplunkNLogTarget:Splunk Storm 的 NLog 目标

    在C#项目中,使用`SplunkNLogTarget`需要对NLog的配置文件(通常是`nlog.config`)进行修改。首先,需要在`targets`部分添加一个名为`SplunkNLogTarget`的新目标,指定连接信息,如主机地址、端口、hec令牌等。例如...

    slf4net:.Net的简单日志记录外观

    slf4net项目充当各种日志记录框架(例如log4net和NLog)的轻量级... 如果未配置记录仪工厂,则将使用NOPLogger(无操作记录仪)。 开始记录。 using System ; namespace slf4net . Samples { public class MyClass

    Wpf log4net 日志

    本教程将详细介绍如何在WPF应用中集成log4net,以便实现每天生成一个独立日志文件的需求。 首先,我们需要在WPF项目中添加对log4net库的引用。这可以通过NuGet包管理器完成,搜索并安装"log4net"包。安装完成后,...

    c#(csharp)串口通信程序

    下面将详细介绍如何在C#中实现串口通信,以及如何利用第三方日志库记录和分析接收到的数据。 首先,我们需要了解串行通信的基本概念。串口通信,也称为串行接口通信,是通过串行数据线逐位传输信息的方式。在C#中,...

Global site tag (gtag.js) - Google Analytics