我正在开发一个使用C# WebAPI (.Net Framework4.8)项目,该项目使用Log4Net。目前,这有一个滚动文件和LogEntries附录(都在工作)。我的客户希望包括对AWS的集成,以便逐步淘汰LogEntries并将日志记录引入他的AWS生态系统。
我添加了以下NuGet包、AWSSDK.CloudWatchLogs和AWS.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>我无法访问此应用程序所在的服务器,但在良好的权限下,使用此文档作为指南将凭据文件放置在默认位置。此外,据我所知,如果凭据文件不正确,NuGet库将按照上述规定将错误记录到c:\logs\my_app_awslog.txt。
我的问题是:
c:\logs\my_app_awslog.txt位置没有错误日志。我不知道需要在AWS中进行任何更改/设置。我是不是遗漏了什么?
非常感谢!
发布于 2021-01-25 04:09:27
在一个具有类似设置和配置的小型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);
}发布于 2021-01-27 11:38:39
进一步的调查表明,问题是appender被忽视了。在<log4net>部分中,有一个包含appender-ref键的<root>元素。我的附件在这部分不见了。
例如。
<root>
<level value="ERROR" />
<appender-ref ref="AWS" />
<appender-ref ref="ConsoleAppender" />
</root>
</log4net>通过添加这些内容,我现在可以将日志添加到CloudWatch中,并且任何特定于库的错误都会放置在<LibraryLogFileName>c:\logs\my_app_awslog.txt</LibraryLogFileName>中。
https://stackoverflow.com/questions/62910150
复制相似问题