解析nlog.config时出现NLog异常-找不到目标:'EventLog' [英] NLog Exception when parsing nlog.config - Target cannot be found: 'EventLog'

查看:1036
本文介绍了解析nlog.config时出现NLog异常-找不到目标:'EventLog'的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在 Visual Studio 2017 上开发 C#.NET Core 2.2 Web-Api . 我实现了 NLog 4.6.1,如

I'm developing a C# .NET Core 2.2 Web-Api on Visual Studio 2017. I implement NLog 4.6.1 like described on github. When I start my application using IIS NLog does not write into the Elasticsearch. A error occurs at the line at program.cs

var logger = NLog.Web.NLogBuilder.ConfigureNLog("NLog.config").GetCurrentClassLogger();

我在 NLogError.log 中找到一条错误消息:

I find a error message at NLogError.log:

2019-06-12 09:00:49.1606 Error Penter code herearsing configuration from NLog.config failed. Exception: NLog.NLogConfigurationException: Exception when parsing NLog.config.  ---> System.ArgumentException: Target cannot be found: 'EventLog'
   at NLog.Config.Factory`2.CreateInstance(String itemName)
   at NLog.Config.LoggingConfigurationParser.ParseTargetsElement(ILoggingConfigurationElement targetsElement)
   at NLog.Config.LoggingConfigurationParser.ParseNLogSection(ILoggingConfigurationElement configSection)
   at NLog.Config.LoggingConfigurationParser.LoadConfig(ILoggingConfigurationElement nlogConfig, String basePath)
   at NLog.Config.XmlLoggingConfiguration.ParseNLogElement(ILoggingConfigurationElement nlogElement, String filePath, Boolean autoReloadDefault)
   at NLog.Config.XmlLoggingConfiguration.Initialize(XmlReader reader, String fileName, Boolean ignoreErrors)
   --- End of inner exception stack trace ---

我试图缩短配置文件以避免其他问题,但仍然是相同的错误.在目标"EventLog"中可以找到.

I tried to shorten my config file to avoid other problems but still same error. The target "EventLog" is to find there.

NLog.config:

NLog.config:

<?xml version="1.0" encoding="utf-8" ?>
      <nlog autoReload="true" throwExceptions="false"
          internalLogLevel="Error" internalLogFile="NLogError.log"
          xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
          <targets>
            <target name="EventLog" xsi:type="EventLog"
              layout="${longdate} ${level} ${callsite} -> ${message} 
              ${exception:format=Message,StackTrace}"
              source="MonDBSvc" />
          </targets>
          <rules>
            <logger name="MonDbSvc" minlevel="Error" writeTo="EventLog" 
              log="Application" />
          </rules>
      </nlog>

NLog.config文件和program.cs文件位于应用程序文件夹的同一根级别上.

The NLog.config file and the program.cs file are on the same root level at the application folder.

我尝试写 NL og.config nad nl og.config 作为文件名和此代码上面的行.

I tried writing NLog.config nad nlog.config for the filename and at this code line above.

什么会导致此解析问题?我该怎么解决?

感谢支持!

当我将日志级别从错误更改为警告时,我会得到更明确的消息.我确定该xml作为xml是有效的.

When I change the log level from error to warn I get a more explicit message. I'm quit shure that the xml is valid as a xml.

2019-06-12 10:27:51.3735 Info Message Template Auto Format enabled
2019-06-12 10:27:51.4347 Error Parsing configuration from NLog.config failed. Exception: NLog.NLogConfigurationException: Exception when parsing NLog.config.  ---> System.ArgumentException: Target cannot be found: 'EventLog'
   at NLog.Config.Factory`2.CreateInstance(String itemName)
   at NLog.Config.LoggingConfigurationParser.ParseTargetsElement(ILoggingConfigurationElement targetsElement)
   at NLog.Config.LoggingConfigurationParser.ParseNLogSection(ILoggingConfigurationElement configSection)
   at NLog.Config.LoggingConfigurationParser.LoadConfig(ILoggingConfigurationElement nlogConfig, String basePath)
   at NLog.Config.XmlLoggingConfiguration.ParseNLogElement(ILoggingConfigurationElement nlogElement, String filePath, Boolean autoReloadDefault)
   at NLog.Config.XmlLoggingConfiguration.Initialize(XmlReader reader, String fileName, Boolean ignoreErrors)
   --- End of inner exception stack trace ---
2019-06-12 10:27:51.4347 Warn Failed loading config from NLog.config. Invalid XML?
2019-06-12 10:27:51.4597 Debug Watching path 'C:\Repositories\DataPicker\DataPicker\DataPicker.Api' filter 'NLog.config' for changes.
2019-06-12 10:27:51.4597 Debug --- NLog configuration dump ---
2019-06-12 10:27:51.4680 Debug Targets:
2019-06-12 10:27:51.4680 Debug Rules:
2019-06-12 10:27:51.4680 Debug --- End of NLog configuration dump ---
2019-06-12 10:27:51.4680 Trace FindReachableObject<System.Object>:
2019-06-12 10:27:51.4680 Info Found 0 configuration items
2019-06-12 10:27:51.4889 Debug Targets not configured for logger: DataPicker.Api.Program
2019-06-12 10:27:55.2679 Debug ScanAssembly('NLog.Web.AspNetCore, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c')
2019-06-12 10:27:55.7717 Debug Hide assemblies for callsite
2019-06-12 10:27:55.7717 Trace Assembly 'NLog.Extensions.Logging, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c' will be hidden in callsite stacktrace
2019-06-12 10:27:55.7855 Debug ScanAssembly('NLog.Extensions.Logging, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c')
2019-06-12 10:27:55.7855 Trace Assembly 'Microsoft.Extensions.Logging, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' will be hidden in callsite stacktrace
2019-06-12 10:27:55.7855 Trace Assembly 'Microsoft.Extensions.Logging.Abstractions, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' will be hidden in callsite stacktrace
2019-06-12 10:27:55.8068 Debug Targets not configured for logger: Microsoft.AspNetCore.Hosting.Internal.ApplicationLifetime
2019-06-12 10:27:55.8068 Debug Targets not configured for logger: Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv
2019-06-12 10:27:55.8178 Debug Targets not configured for logger: Microsoft.AspNetCore.Server.Kestrel
2019-06-12 10:27:55.8465 Debug Targets not configured for logger: Microsoft.AspNetCore.DataProtection.TypeForwardingActivator
2019-06-12 10:27:55.8465 Debug Targets not configured for logger: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager
2019-06-12 10:27:55.8622 Debug Targets not configured for logger: Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.CngGcmAuthenticatedEncryptorFactory
2019-06-12 10:27:55.8622 Debug Targets not configured for logger: Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.CngCbcAuthenticatedEncryptorFactory
2019-06-12 10:27:55.8622 Debug Targets not configured for logger: Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ManagedAuthenticatedEncryptorFactory
2019-06-12 10:27:55.8776 Debug Targets not configured for logger: Microsoft.AspNetCore.DataProtection.XmlEncryption.DpapiXmlEncryptor
2019-06-12 10:27:55.8776 Debug Targets not configured for logger: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository
2019-06-12 10:27:55.9084 Debug Targets not configured for logger: Microsoft.AspNetCore.DataProtection.KeyManagement.DefaultKeyResolver
2019-06-12 10:27:55.9084 Debug Targets not configured for logger: Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider
2019-06-12 10:27:55.9084 Debug Targets not configured for logger: Microsoft.AspNetCore.DataProtection.Internal.DataProtectionStartupFilter
2019-06-12 10:27:55.9835 Debug Targets not configured for logger: Microsoft.AspNetCore.DataProtection.XmlEncryption.DpapiXmlDecryptor
2019-06-12 10:27:56.1465 Debug Targets not configured for logger: Microsoft.AspNetCore.Mvc.Formatters.JsonPatchInputFormatter
2019-06-12 10:27:56.1465 Debug Targets not configured for logger: Microsoft.AspNetCore.Mvc.Formatters.JsonInputFormatter
2019-06-12 10:27:56.1674 Debug Targets not configured for logger: Microsoft.AspNetCore.Mvc.RazorPages.Internal.RazorProjectPageRouteModelProvider
2019-06-12 10:27:56.2420 Debug Targets not configured for logger: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker
2019-06-12 10:27:56.2524 Debug Targets not configured for logger: Microsoft.AspNetCore.Mvc.Razor.Internal.RazorViewCompiler
2019-06-12 10:27:56.2524 Debug Targets not configured for logger: Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector
2019-06-12 10:27:56.2707 Debug Targets not configured for logger: Microsoft.AspNetCore.Mvc.ViewFeatures.CookieTempDataProvider
2019-06-12 10:27:56.2707 Debug Targets not configured for logger: Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionInvoker
2019-06-12 10:27:56.2814 Debug Targets not configured for logger: Microsoft.AspNetCore.Mvc.Internal.ActionSelector
2019-06-12 10:27:56.2814 Debug Targets not configured for logger: Microsoft.AspNetCore.Mvc.Internal.MvcRouteHandler
2019-06-12 10:27:56.2984 Debug Targets not configured for logger: Microsoft.AspNetCore.Builder.RouterMiddleware
2019-06-12 10:27:56.3256 Debug Targets not configured for logger: Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware
2019-06-12 10:27:56.3523 Debug Targets not configured for logger: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware
2019-06-12 10:27:56.3523 Debug Targets not configured for logger: Microsoft.AspNetCore.Server.IISIntegration.IISMiddleware
2019-06-12 10:27:56.3592 Debug Targets not configured for logger: Microsoft.AspNetCore.HttpOverrides.ForwardedHeadersMiddleware
2019-06-12 10:27:56.3592 Debug Targets not configured for logger: Microsoft.AspNetCore.Hosting.Internal.WebHost
2019-06-12 10:27:56.3783 Debug Targets not configured for logger: Microsoft.AspNetCore.Hosting.Internal.HostedServiceExecutor

推荐答案

找不到关于目标的"EventLog"错误

无法实例化Target类时,引发找不到目标"错误.因为您可以将目标插入NLog,所以NLog不知道哪些可用正手.另请注意,并非所有平台都提供所有目标.

About the Target cannot be found: 'EventLog' error

The "Target cannot be found" error is thrown when the Target class cannot be instantiated. As you could plug in targets into NLog, NLog don't know which are available forehand. Please also note that not all targets are available in all platforms.

后一种情况也适用于eventlog目标-并非在所有平台上都可用:

The latter is als the case for the eventlog target - is not available in all platforms:

请参见 https://github.com/NLog/NLog/wiki/Wiki/EventLog-目标

受支持的平台:受限制(仅适用于Net35,Net40,Net45和NetStandard 2.0.注意:NetStandard 2.0必须使用NLog.WindowsEventLog程序包)

Platforms Supported: Limited (Only available for Net35, Net40, Net45 and NetStandard 2.0. Note: NetStandard 2.0 must use NLog.WindowsEventLog package)

如果您使用的是.NET Core 1.x,它将无法正常工作-Microsoft不会移植API,因为事件日志仅适用于Windows.

If you're using .NET Core 1.x, it won't work - Microsoft did not port the API because the eventlog is Windows only.

对于.NET Core 2,您需要安装 NLog.WindowsEventLog 软件包,然后将此添加到您的nlog.config中(在顶部):

For .NET Core 2 you need to install the NLog.WindowsEventLog package and add this in your nlog.config (on top):

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

请注意:您发布的错误将告诉您该目标不可用.该配置似乎是有效的,不需要在记录器代码中进行任何更改. NLog.config或nlog.config也不是问题.

Please note: the error you're posting will tell that the target is unavailable. The config seems to be valid and no changes are needed in the logger code. Also NLog.config or nlog.config is not an issue.

也许我错过了,但是为什么要使用eventlog目标进行弹性搜索呢?有一个弹性搜索目标.软件包 https://www.nuget.org/packages/NLog.Targets.ElasticSearch

Maybe I missed it, but why using the eventlog target for Elastic search? There is a Elastic search target. Package https://www.nuget.org/packages/NLog.Targets.ElasticSearch

此软件包支持.NET Standard 1.3+和.NET Standard 2 +

This package supports .NET Standard 1.3+ and .NET Standard 2+

用法:

<nlog>
  <extensions>
    <add assembly="NLog.Targets.ElasticSearch"/>
  </extensions>
  <targets>
    <target name="elastic" xsi:type="BufferingWrapper" flushTimeout="5000">
      <target xsi:type="ElasticSearch"/>
    </target>
  </targets>
  <rules>
    <logger name="*" minlevel="Info" writeTo="elastic" />
  </rules>
</nlog>

这篇关于解析nlog.config时出现NLog异常-找不到目标:'EventLog'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆