我已将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>
关于如何实施此功能或是否错过了任何想法?
答案 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软件包: