部署到我的EC2时,NLog似乎不再正常工作。在本地部署时,我在记录聊天时没有问题。另一方面,它正在快速写入内部日志并忽略它是否应该写入内部日志的值。
我已经尝试将要使用的协议类型从TCP切换到UDP,从而阻止它写入错误(但也不允许它连接到PaperTrail,这是重点)。我也试过关闭内部日志记录,这也行不通。重温我的NLog.config,以及多次完成初始教程。我还检查了端口的防火墙设置,端口的EC2安全组设置以及防火墙上的应用程序权限。
NLog版本:“4.6.2”
平台:.Net 4.5
当前NLog配置(xml或C#,如果相关)
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
autoReload="true"
throwExceptions="false"
internalLogLevel="false" internalLogFile="c:\temp\nlog-internal.log">
<extensions>
<add assembly="NLog.Targets.Syslog" />
</extensions>
<targets>
<target name="syslog" type="Syslog">
<messageCreation>
<facility>Local7</facility>
<rfc5424 hostname="${machinename}-Ragnarok" appName="ChatServer-Ragnarok" />
</messageCreation>
<messageSend>
<protocol>TCP</protocol>
<tcp>
<server>logs.papertrailapp.com</server>
<port>REDACTED</port>
<tls>
<enabled>true</enabled>
</tls>
</tcp>
</messageSend>
</target>
<target name="logfile" xsi:type="File" fileName="file.txt" />
<target name="logconsole" xsi:type="Console" />
</targets>
<rules>
<logger name="*" minLevel="Trace" appendTo="syslog" />
<logger name="*" minlevel="Info" writeTo="logconsole" />
<logger name="*" minlevel="Debug" writeTo="logfile" />
</rules>
</nlog>
实际错误如下(日志中每隔几秒重复一次):2019-04-15 13:35:22.3986警告SendAsync失败异常:System.NullReferenceException:对象引用未设置为对象的实例。 at NLog.Targets.Syslog.MessageSend.SocketInitializationForWindows.KeepAliveConfigurationIsUpToDate(KeepAliveConfig keepAliveConfig)在NLog.Targets.Syslog.MessageSend.SocketInitializationForWindows.ApplyKeepAliveValues(套接字套接字,KeepAliveConfig keepAliveConfig)在NLog.Targets.Syslog.MessageSend.SocketInitialization.SetKeepAlive(套接字套接字) ,KeepAliveConfig keepAliveConfig)在NLog.Targets.Syslog.MessageSend.Tcp.Init()的NLog.Targets.Syslog.MessageSend.MessageTransmitter.b__21_0(任务_)NLog.Targets.Syslog.Extensions.TaskExtensions。<> c__DisplayClass0_01.<Then>b__0(Task t)
at System.Threading.Tasks.ContinuationResultTaskFromTask
1.InnerInvoke ()at System.Threading.Tasks.Task.Execute()
有没有人对如何使其工作/为什么它在部署时不起作用有任何想法?
现在只是一个权宜之计,只需将以下内容添加到配置中,这样就不会在“Keep Alive”上崩溃
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
autoReload="true"
throwExceptions="false"
internalLogLevel="false" internalLogFile="c:\temp\nlog-internal.log">
<extensions>
<add assembly="NLog.Targets.Syslog" />
</extensions>
<targets>
<target name="syslog" type="Syslog">
<messageCreation>
<facility>Local7</facility>
<rfc5424 hostname="${machinename}-Ragnarok" appName="ChatServer-Ragnarok" />
</messageCreation>
<messageSend>
<protocol>TCP</protocol>
<tcp>
<server>logs.papertrailapp.com</server>
<port>REDACTED</port>
<tls>
<enabled>true</enabled>
</tls>
<keepAlive>
<enabled>false</enabled>
<time>15</time>
</keepAlive>
</tcp>
</messageSend>
</target>
<target name="logfile" xsi:type="File" fileName="file.txt" />
<target name="logconsole" xsi:type="Console" />
</targets>
<rules>
<logger name="*" minLevel="Trace" appendTo="syslog" />
<logger name="*" minlevel="Info" writeTo="logconsole" />
<logger name="*" minlevel="Debug" writeTo="logfile" />
</rules>
</nlog>
我添加的代码如下:
<keepAlive>
<enabled>false</enabled>
<time>15</time>
</keepAlive>
编辑:一个修复程序刚刚推送到NLog.Targets.Syslog的git,它完全修复了这个问题。 https://github.com/luigiberrettini/NLog.Targets.Syslog/pull/183