65.9K
CodeProject 正在变化。 阅读更多。
Home

如何在 VisualStudio 2013 中使用 NLog (2.1 & 3.1)

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.90/5 (46投票s)

2014年3月26日

CPOL

6分钟阅读

viewsIcon

111050

downloadIcon

1821

这将让您使用 VS2013 和 NLog 快速开始日志记录。

您可以下载并运行这些文件以查看它们的工作原理。

注意:为了减小下载大小,我从解决方案中删除了包,所以您第一次构建它时,它会从 NuGet 下载它们。

注意:您可以在这里找到一篇更新的文章:如何在 VisualStudio 2015 中使用 NLog (4.2)。

引言

我一直在尝试快速使用 NLog 将消息记录到控制台和/或文件,但遇到了各种问题。有很多教程、博客等等,建议您这样做或那样做,但大部分数据都相当过时(从 2006 年到 2010 年?),所以为了节省大家的时间,这里是快速设置,让您可以使用 NLogVisualStudio 2013 快速上手。

第 1 步:打开 VS2013,创建一个新的控制台项目

没什么特别的。您可以随意命名,随意放置。

  • 额外奖励:向控制台打印“hello world!”。

第 2 步:从 NuGet 获取 NLog

转到“工具 -> NuGet 包管理器 -> 管理解决方案的 NuGet 包...”

第 2.1 步:获取 NLog 包

就像 1..2..3 一样简单... 搜索、指向鼠标、点击。

注意:当前版本是 3.1。本教程同样适用于它。

第 2.2 步:获取 NLog 配置

这里的情况与我看到的教程有些不同。您需要手动将 NLog 配置(它也会为您安装 NLog 架构)添加到您的包中

如果没有这个,您将无法做很多事情,并且会遇到令人沮丧的错误,例如

原因是(正如它所建议的)它找不到架构。原因我也不清楚,但手动安装配置将添加所需的 NLog.xsd 架构文件,让您从此愉快地编写代码。

注意:在 NLog 3.1 上,安装配置将安装 Schema,但您不会在已安装的包中看到它。别担心,它仍然在那里:)

第 3 步:编辑您的 NLog 配置

前面的步骤应该已在您的解决方案中创建了一个名为 NLog.config 的配置文件。打开它,查看内部,它应该看起来像

<?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">
 
  <targets>
    <!-- add your targets here -->
  
    <!--
    <target xsi:type="File" 
            name="f" 
            fileName="${basedir}/logs/${windows-identity:domain=false}.log"
            layout="${longdate} ${uppercase:${level}} ${message}" />
     -->
  </targets>

  <rules>
    <!-- add your logging rules here -->
    
    <!--
    <logger name="*" minlevel="Trace" writeTo="f" />
     -->
   
  </rules>
</nlog>

删除默认 target rules 的注释,您就可以开始记录到文件了。

第 3.1 步 额外得分

如果您想记录到控制台,您可以替换上面(或添加,以同时记录到两者)到您的 targets 部分

<target  xsi:type="Console" 
            name="console" 
            layout="${shortdate} ${level} ${message}" />

并到您的 rules 部分

<logger name="*" minlevel="Trace" writeTo="console" />

额外奖励:将上面的 Console 更改为 ColoredConsole,并记录不同类型以查看结果:)

第 4 步:编辑您的 Main 方法

您可以简单地将此复制/粘贴到您的 main 方法中

static void Main(string[] args)
{
   /*
    * Welcome to this NLog demo
    */
    Console.Out.WriteLine("Greetings, some loggings is about to take place.");
    Console.Out.WriteLine("");

   /*
    * This creates your logger. 
    * Notice that in the config file we defined that everything should go into the file.
    * (and if you set the console, it'll output to it as well).
    */
    Logger logger = LogManager.GetCurrentClassLogger();

      Console.Out.WriteLine("Let's assume you're going to work, and using the bus to get there:");
      Console.Out.WriteLine("------------------------------------------------------------------");
      logger .Trace("Trace: The chatter of people on the street");
      logger .Debug("Debug: Where are you going and why?");
      logger .Info("Info: What bus station you're at.");
      logger .Warn("Warn: You're playing on the phone and not looking up for your bus");
      logger .Error("Error: You get on the wrong bus.");
      logger .Fatal("Fatal: You are run over by the bus.");
    
    /*
     * Closing app
     */
    Console.Out.WriteLine("");
    Console.Out.WriteLine("Done logging.");
    Console.Out.WriteLine("Hit any key to exit");
    Console.ReadKey();
}

如果您遵循了上述所有建议,您应该会看到类似以下内容

课外活动

以下部分已删除,但我仍然强烈建议您查看官方 NLog 页面了解级别(此处:日志级别),并进行一些探索,看看您可以用 NLog 实现什么。

我上面的文章是基于网上的一些文章和示例。

官方教程

  • https://github.com/nlog/nlog/wiki/Tutorial - 我只是感到沮丧,因为它似乎相当过时,并且对我不起作用。您没有 EXE 安装程序,而且您无法使 Empty NLog Configuration File 工作,因为它不存在。

CodeProject 教程

  • NLog 简介 - 这篇文章包含大量信息,并深入探讨了配置文件的功能。我强烈建议阅读它以了解 NLog 的可能性。如果您尝试从其中复制代码,您可能需要注意大小写,例如:将 filename 更改为 fileName (该教程已有 8 年历史,我想它针对的是 NLog 1...)。

布局渲染器

${shortdate}
${logger}
${stacktrace} 

日志查看器

如果需要,您可以安装一些外部日志查看器。它们通过捕获消息并以您选择的 GUI 打印出来,从而省去了您查看文件或控制台的麻烦。

哨兵

我发现 [Sentinel] 可以工作。它不是很新(2011年),设置不是很清楚,但添加了所需的配置(他们网站上有一个示例)后,它就相当简单了。

为了将来的参考和方便,添加到您的 <targets> 部分

 <target xsi:type="NLogViewer"
            name="viewer"
            address="udp://127.0.0.1:9999"/> 

添加到您的 <rules> 部分

 <logger name="*"
            minlevel="Debug"
            writeTo="viewer" />
收割者

不知何故 [Harvester]对我似乎不起作用.

一些额外的研究,以下是如何让收割者也为您工作的方法

将其添加到 <targets> 上方

 <extensions>
        <add assembly="Harvester.Integration.NLog, Version=2.0.2.0, Culture=neutral, PublicKeyToken=2335e074c59acad6"/>
    </extensions>

然后将其添加到 <targets> 部分

    <target xsi:type="Harvester" 
            name="Harvester" 
            bufferType="NamedPipeBuffer" 
            binding ="\\.\pipe\Harvester" 
            mutexName="HarvesterMutex" />

最后,将其添加到您的 <rules> 部分

     <logger name="*" 
            minlevel="Trace"
            writeTo="Harvester" />

我很确定您可以在其他地方找到其他的。

BareTail

这是我最近发现的一个小瑰宝。您可以在这里找到它。您可以下载免费版本,我目前正在使用它。

与上面两种解决方案不同,BareTail 只会监控文本文件的更改。这意味着如果您已经将日志记录到文本文件中,则无需添加另一个目标或担心安装另一个程序。只需运行它,将其指向文本文件,它就会监控它。

它有一个“跟随尾部”的选项,这意味着当文件增长时它会继续向下滚动,您可以轻松设置您想要的任何文本模式的突出显示颜色,这样您就可以轻松地跟踪您认为重要的任何内容。

更多文章

总结

我简直不敢相信没有一个地方能提供所有这些信息来快速开始日志记录。请注意,您也可以在代码中定义您的日志记录器(请参阅我上面链接的 CodeProject 文章),但我发现配置(一旦它们起作用)非常容易使用。我希望这能帮助您快速开始您的日志记录。欢迎留下评论和投票。

历史

2015 年 11 月 12 日
  • 添加了新文章链接(Nlog 4.2 与 VS 2015)
  • 删除了课外活动部分,因为它可能过于以性别为基础,让一些读者感到不舒服。
  • 小幅修正。
2014 年 10 月 6 日
  • 更新并使用 NLog 3.1 进行了测试
  • 将 BareTail 添加到日志查看器。
  • 将控制台上的跟踪级别从 Warn 更改为 Trace。
2014 年 6 月 16 日
  • 感谢评论中的一个好提示,将“Log.Trace”...更新为“logger.Trace”以反映正确的变量名。(在下载代码中,它有点不同,在那里它被用作“Log”,因为它是一个静态全局变量)。
2014年5月10日
  • 拼写错误
  • 为减小下载大小删除了包(当您第一次构建项目时,NuGet 会自动获取它们)
2014年5月9日
  • 添加了日志级别以及何时使用它们
  • 用“交互式”演示更新代码
2014 年 4 月 1 日
  • 修复了一个可能抛出异常的拼写错误
  • 添加了 Sentinel 的配置
  • 添加了 Harvester 的配置
2014 年 3 月 26 日
  • 首次发布
© . All rights reserved.