【问题标题】:AWS Cloudwatch Logs in WebApi .Net Framework 4.8WebApi .Net Framework 4.8 中的 AWS Cloudwatch 日志
【发布时间】:2020-07-15 07:57:34
【问题描述】:

我正在开发一个使用 Log4Net 的 C# WebAPI (.Net Framework 4.8) 项目。目前这有一个滚动文件和 LogEntries 附加程序(两者都有效)。我的客户希望包含与 AWS Cloudwatch 的集成,以便逐步淘汰 LogEntries 并将日志记录带入他的 AWS 生态系统。

我添加了以下 NuGet 包 AWSSDK.CloudWatchLogsAWS.Logger.Log4net 以及其他依赖项。我还在我的App.config 中添加了以下内容:

<appender name="AWS" type="AWS.Logger.Log4net.AWSAppender,AWS.Logger.Log4net">
  <LogGroup>my_app</LogGroup>
  <Region>eu-west-1</Region>
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%-4timestamp [%thread] %-5level %logger %ndc - %message%newline" />
  </layout>
  <LibraryLogFileName>c:\logs\my_app_awslog.txt</LibraryLogFileName>
</appender>

我无权访问托管此应用程序的服务器,但我有权使用此documentation 作为指南将凭据文件放置在默认位置。另外,据我所知,如果凭据文件不正确,NuGet 库会按照上述规定将错误记录到c:\logs\my_app_awslog.txt

这是我的问题:

  1. 没有日志到达 AWS Cloudwatch。
  2. 没有从 Cloudwatch NuGet 库到 c:\logs\my_app_awslog.txt 位置的错误日志。
  3. 日志仍在 LogEntries 正常工作,因此 Log4Net 集成仍然正常。

我不知道需要在 AWS 中进行任何更改/设置。我错过了什么吗?

非常感谢!

【问题讨论】:

  • 如果应用程序托管在 AWS EC2 实例上,那么与实例关联的角色应该有权写入 cloudwatch 日志。如果它不是 EC2 服务器,则使用的凭据应具有写入 cloudwatch 日志的权限。我建议确认必要的权限是否到位。
  • @ChetanRanpariya 我被告知与 EC2 实例相关联的角色有权写入 cloudwatch 日志。

标签: c# amazon-web-services log4net amazon-cloudwatchlogs


【解决方案1】:

我在一个具有类似设置和配置的小型 POC 项目中遇到了同样的问题。但是,同样的事情在有大量日志消息的 Web 应用程序项目中运行良好。

所以我在 for 循环中添加了一条日志消息,并在开头和结尾行添加了调试器以减慢应用程序的速度。它有时会起作用,但在其他一些情况下会失败。

在一条日志消息后最终让线程进入睡眠状态,使其始终如一地工作,但在某些情况下不得不增加睡眠时间。

这不适合生产应用程序,但它可能有助于了解配置和设置是否正确。

static void Main(string[] args)
{
    log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo("log4net.config"));
    AwsLogger.Info("Test log");
    Thread.Sleep(1000);
}

【讨论】:

    【解决方案2】:

    进一步调查表明,问题在于 appender 被忽略了。 在&lt;log4net&gt; 部分中,有一个&lt;root&gt; 元素包含appender-ref 键。本节缺少我的附加程序。

    例如

      <root>
        <level value="ERROR" />
        <appender-ref ref="AWS" />
        <appender-ref ref="ConsoleAppender" />
      </root>
    </log4net>
    

    通过添加此内容,我现在可以将日志记录到 CloudWatch,并且任何库特定的错误都会放在 &lt;LibraryLogFileName&gt;c:\logs\my_app_awslog.txt&lt;/LibraryLogFileName&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-19
      • 1970-01-01
      • 2015-11-23
      • 2016-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多