NLog ILogger在登录WebServer目标时不发送Web请求

时间:2018-02-02 01:08:38

标签: c# .net-core nlog

我有一个使用NLog的项目。这对于记录到本地文件非常有用,但是当我尝试将日志消息定位到WebServer时,似乎没有任何事情发生。

nlog.config的相关部分:

<targets>
    <target xsi:type="WebService" name="ws" url="http://localhost:8088/api" protocol="HttpPost" encoding="UTF-8" >
        <parameter name="Message" type="System.String" layout="${message}" />
    </target>
</targets>

<rules>
    <logger name="QS.WebLogger" minLevel="Info" writeTo="ws" final="true" />
</rules>

然后在我的代码中:

var loggerFactory = new LoggerFactory().AddNLog();
loggerFactory.ConfigureNLog("nlog.config");
var log = loggerFactory.CreateLogger<QS.WebLogger>();;
log.LogError("error message");

我尝试了一些方法来调用LogError,但无论我尝试什么,它都会进入LogError而不会抛出错误,但我从未看到任何尝试在Fiddler中实际调用Web服务。 NLog似乎明白它应该登录到Web服务,因为它尊重final =“true”并且不会将这些消息记录到其他目标下线。

我在NLog的内部日志中收到以下消息:警告类型加载异常。异常:System.TypeLoadException:无法从程序集'System.Web,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'加载类型'System.Web.IHttpModule'。我相信这是因为该项目是.NET Core,但是期望事情仍然可行(否则将是错误,而不是警告)。

我可以找到的例子使用NLog的EventLogInfo,我无法使用它,因为NLog落后于微软的ILogger,后者不知道EventLogInfo是什么。

如何让它实际发送消息而不是静静地吞下日志消息?

1 个答案:

答案 0 :(得分:0)

Problem is maybe caused by default Proxy is not supported on NetCore. This causes an internal exception that never trickles back (so cannot be seen in the internal log)

Work-around is to add proxyType="NoProxy" to the WebService-config:

<target xsi:type="WebService" name="ws" url="http://localhost:8088/api" protocol="HttpPost" encoding="UTF-8" proxyType="NoProxy">

Created PR to improve the default config for NetCore: https://github.com/NLog/NLog/pull/2563