1

I have been using NLog for a couple of months now, just logging to the Event Log, however that is not at all ideal in any scenario imho.

I am wondering, is it possible to create your own Program or Service log with NLog? It doesn't seem like it according to the list of supported targets over at http://nlog-project.org/wiki/Targets

Is anyone able to shed some light on this?

4

1 回答 1

2

您完全可以创建一个应用程序来存储并向您显示其他应用程序的所有日志,但您可能需要扩展 NLog,这就是我为我的工作场所所做的。例如 :

  1. 创建一个通用数据库,该数据库可以存储 NLog 中的所有日志和其他类型的日志(如果需要)。

  2. 制作一个自定义布局渲染器,它使用您的日志信息创建一个 XML(我在制作系统时不尝试XmlEncode LayoutRenderer,我认为现在会很棒)

  3. 找到一种通过网络发送 XML 的方法,我使用了 Transactionnal MSMQ,但 NLog 中只存在非事务性目标,所以我创建了(=复制粘贴原始文件并进行了一些增强)我自己的目标

  4. 创建一个接收日志 XML 并将它们插入数据库的服务

  5. 最后,创建一个使用数据库的应用程序,向您展示您的环境中发生的事情

如果您有时间,这是一个强有力的解决方案。对于我们的生产环境,它为我们节省了很多倍。但这取决于你到底需要什么

* 编辑 2013-01-25:*

要在应用程序和服务日志树中创建自己的日志:请参阅这篇解释如何创建自己的日志和附带的事件源的帖子

如果他不存在,Nlog 也可以创建一个事件源,但是正如您在这篇文章中看到的那样,应用程序需要读取密钥的权限:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Security

或者您可以简单地以管理员身份运行该应用程序。

一旦你创建了自己的日志和他的事件源,你现在可以正常使用 Nlog,配置如下:

<targets>
  <target xsi:type="EventLog" name="event" layout="${message}"
          machineName="." log="myLog" source="myEventSource"/>
</targets>
<rules>
  <logger name="myLogger" writeTo="event"/>
</rules>

希望能帮助到你

于 2013-01-24T10:12:15.063 回答