`
jiasongmao
  • 浏览: 649974 次
  • 性别: 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的使用测试

    本测试demo,简单的介绍了nlog日志的使用方法,包括配置文件的设置。

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

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

    很实用的NLog配置分享

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

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

    主要给大家介绍了关于.Net项目中NLog的配置和使用的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用.Net具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

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

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

    NLog-v2.0.0.2000

    在.net中也有非常多的日志工具,今天介绍下NLog。NLog特别好的地方就是和Vs(Visual Studio)开发环境的集成。

    使用NLog给Asp.Net Core做请求监控的方法

    主要介绍了使用NLog给Asp.Net Core做请求监控的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    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;...

    详解.Net core2.0日志组件Log4net、Nlog简单性能测试

    主要介绍了详解.Net core2.0日志组件Log4net、Nlog简单性能测试,比较log4net、nlog的文件写入性能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    .net core从零开始学习

    .net core 6.0 webapi Resful风格; EFCore的使用,异步编程,搭建...日志系统Nlog的使用; 缓存的详解,内存缓存,分布式缓存; JWT的基本使用; SignalR的基本介绍,前后端例子的使用; DDD领域驱动设计的简单介绍;

    NLogTest.7z

    根据配置好的文件,简单介绍如何使用NLog写Log文件; 对应的框架是.Net 4.0;默认Log文件在exe同一个目录下; 代码测试可以运行。

    .NET Core3.0 日志 logging的实现

    多年的经验,日志记录是软件开发的...后面会介绍前三种日志框架如何与.NETcore3.0结合起来进行使用。 内置日志记录提供程序 ASP.NETCore 提供以下提供程序: 控制台-可以在控制台查看日志输出 调试-vs工具 -》开始

    APIGatewayDemo:使用Ocelot构建API网关的简单示例

    在这里介绍如何使用Ocelot的最简单的示例。 有关更多信息,请遵循。 链接在这里: #2 Jwt Auth演示 使用Ocelot和Jwt Auth的简单演示。 有关更多信息,请遵循。 链接在这里: #3记录演示 使用Ocelot和NLog的...

    .Net开源日志管理LogMaster4Net.zip

    它能帮助你在一个中心位置管理多个程序的日志。因此如果在你的系统中...入门介绍:http://www.cnblogs.com/Leo_wl/p/4449289.html作者的博客文章:http://www.cnblogs.com/jzywh/p/logmaster4net.htmlLog4Net的用法:...

    详解.Net Core中的日志组件(Logging)

    之前写过NLog使用的文章)。 2、默认配置 新建.Net Core Web Api项目,添加下面代码。 [Route(api/[controller])] public class ValuesController : Controller { ILogger&lt;ValuesController&gt; logger;  /

    InterpolatedLogging:围绕ILogger(Microsoft扩展日志记录,Serilog,NLog等)的包装程序以接受插值字符串

    插值测井扩展日志记录库以使用内插字符串写入日志消息而不会丢失结构化属性名称介绍大多数日志记录库支持结构化日志记录: logger . Info ( " User {UserName} created Order {OrderId} at {Date}, operation took {...

    ASP.NET WMS仓库管理系统

    这是一款仓库管理系统,主要采用了netcore3.1+mysql/sqlserver+EFCor架构,适合进行二次开发管理系统使用。 二、主要功能: 用户管理 角色管理 部门管理 数据字典管理 系统日志管理 登陆统计 仓库管理 入库...

Global site tag (gtag.js) - Google Analytics