C# AWS CloudWatch日志记录在一台机器上工作,而不是在另一台机器上工作

C# AWS CloudWatch日志记录在一台机器上工作,而不是在另一台机器上工作,c#,amazon-cloudwatch,nlog,C#,Amazon Cloudwatch,Nlog,我有2个EC2 Windows 10实例。使用C#和AWSSDK.CloudWatchLogs,我能够从其中一个向AWS CloudWatch写入数据,但不能从另一个写入。我可以用下面的代码复制这个: C#代码: app.config: <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section na

我有2个EC2 Windows 10实例。使用C#和AWSSDK.CloudWatchLogs,我能够从其中一个向AWS CloudWatch写入数据,但不能从另一个写入。我可以用下面的代码复制这个:

C#代码:

app.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog" />
  </configSections>

  <nlog throwExceptions="true"
        internalLogFile="c:\temp\allpurposeducklog.txt"
        internalLogLevel="Info"
        xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <targets>
      <target name="console" xsi:type="Console" layout="${longdate} | ${level} | ${machinename}| ${message}" />
      <target name="aws" xsi:type="AWSTarget" logGroup="Ducks_and_stuff" region="us-west-2" layout="${machinename} ${longdate} | ${level} | ${message}" />
    </targets>
    <rules>
      <logger name="*" minlevel="Trace" writeTo="console, aws" />
    </rules>
  </nlog>

  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
  </startup>
</configuration>
另一台机器对CloudWatch高兴地嘎嘎作响(两台机器都对控制台嘎嘎作响)

发生故障的机器与工作机器位于同一VPC中,具有相同的IAM角色、可用性区域和安全组。这两台机器都使用CloudWatch代理正常工作,该代理监视Windows内存并在内存过低时触发警报


我很难再缩小范围了。思想?AWS中是否有记录故障原因的地方?谢谢。

由于程序在日志记录后很快退出,NLog可能仍在忙于编写日志。如果目标使用异步日志记录,NLog需要知道它应该等待写入

通常建议在程序退出前留出一些时间。在
Main
末尾添加:

LogManager.Shutdown();
这将提供最大15秒的非直瞄时间

如果时间不够,您可以先刷新并等待,例如最多30秒

LogManager.Flush(TimeSpan.FromSeconds(30));
LogManager.Shutdown();

另见

谢谢,朱利安。我仍然会收到“NLog.NLogRuntimeException:异步异常已发生。-->System.TimeoutException:等待30秒后刷新所有目标时超时”形式的超时。我的aws-logger-errors.txt文件(我刚刚注意到)显示了类似的超时异常。在AWS管道系统中感觉有些东西仍然不稳定。。。。。。就像那样,重启修复了它。我不知道为什么。也许我配置的IAM角色或安全组需要重新启动?我可能会尝试编辑我的问题,以获得更多的理解。
LogManager.Shutdown();
LogManager.Flush(TimeSpan.FromSeconds(30));
LogManager.Shutdown();