NLog不写入事件日志.NET Core 2.1

时间:2018-07-31 14:30:23

标签: c# logging asp.net-core nlog asp.net-core-2.1

我已将NLog添加到我的.NET核心控制台应用程序中,并且可与文件和数据库目标一起使用。但是,当我尝试使其与eventviewer一起使用时,它不会记录任何内容。当我为eventviewer目标添加代码时,文件和数据库部分不记录任何内容。当我删除它时,日志记录将再次开始工作。

我使用Powershell为该应用程序添加了新的事件查看器源,因此这不是问题。该应用程序不会崩溃或报告错误,它可以正常运行,但在包含事件查看器时不记录任何内容。

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xsi:schemaLocation="NLog NLog.xsd"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  autoReload="true"
  internalLogFile="c:\temp\console-example-internal.log"
  internalLogLevel="Info" >

<targets>    
  <target xsi:type="File" name="logfile" fileName="c:\temp\console-example.log"
        layout="${date}|${level:uppercase=true}|${message} ${exception}|${logger}|${all-e
        vent-properties}" />

<target xsi:type="Console" name="console"
        layout="[${longdate}][${machinename}][${level:uppercase=true}] ${message} ${exception}" />

<target xsi:type="EventLog" name="eventlog" source="testlogging" log="Application"
        layout="${message}${newline}${exception:format=ToString}" />

  <target xsi:type="Database" name="database" >
      <connectionString>Server=test; Database=test; User Id=sa; Password=password;</connectionString>
      <commandText>
          INSERT INTO dbo.Log (Application, Logged, Level, Message, Logger, CallSite, Exception ) 
          VALUES (@Application, @Logged, @Level, @Message, @Logger, @Callsite, @Exception);
      </commandText>
      <parameter name="@application" layout="TestLoggingApp" />
      <parameter name="@logged" layout="${date}" />
      <parameter name="@level" layout="${level}" />
      <parameter name="@message" layout="url: ${aspnet-request-url} | action: ${aspnet-mvc-action} | ${message}" />

      <parameter name="@logger" layout="${logger}" />
      <parameter name="@callSite" layout="${callsite:filename=true}" />
      <parameter name="@exception" layout="${exception:tostring}" />
  </target>    
</targets>

<rules>
   <logger name="*" minlevel="Trace" writeTo="logfile, console, database" />        
</rules>
</nlog>

关于如何实施此功能或是否错过了任何想法?

2 个答案:

答案 0 :(得分:4)

对我来说,答案是将“ NLog.WindowsEventLog”程序集添加到nlog.config的扩展区域:

<extensions>
   <add assembly="NLog.WindowsEventLog" />
</extensions>

我具有默认值:“ NLog.Web.AspNetCore”。

答案 1 :(得分:1)

.Net Core是.Net Framework的子集,不包含Windows EventLog之类的东西(因为在其他非Windows设备上不存在)。

您应该确保首先查看平台支持文档:

https://github.com/NLog/NLog/wiki/platform-support

您将看到在Windows平台上为.Net Core应用程序创建了一个特殊的Nuget软件包:

https://www.nuget.org/packages/NLog.WindowsEventLog/