-
Notifications
You must be signed in to change notification settings - Fork 133
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
AWS logger logs to cloudwatch twice #199
Comments
Thanks for submitting the PR. This needs review from team. |
@lanierhall I'm trying to replicate the [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config")]
namespace LoggingAppSettingstEST
{
internal class Program
{
private static readonly ILog Logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
static void Main(string[] args)
{
try
{
AWSConfigs.LoggingConfig.LogTo = LoggingOptions.Log4Net;
AWSConfigs.LoggingConfig.LogResponses = ResponseLoggingOption.Always;
Logger.Debug("Info Hello Log");
Logger.Error("Error Hello Log");
var s3Client = new AmazonS3Client();
s3Client.ListBuckets();
Thread.Sleep(5000);
}
finally
{
Console.WriteLine("Hello");
}
}
}
} |
Describe the bug
AWS logger code initializes twice in certain cases.
Expected Behavior
It should only log once
Current Behavior
When calling LogManager.GetLogger it calls initialization code for the logger/appender which calls
AppConfigAWSCredentials which calls GetLogger on line 33 which starts logger code initialization all over again. The second attempt finds credentials as they were set in the first one and creates a listener. The first stack finally returns in AppConfigAWSCredentials and logs that credentials were found and then continues to setup/add a listener. There are now two listeners that both react to logs coming in and send them to cloudwatch. The fix I used was to add lock/isInitialized functionality.
Reproduction Steps
Create a project and add
And use the logger somewhere in main.
Add the following sections to your config:
Additionally:
AppConfigAWSCredentials
To reproduce the issue, you need to cause the Amazon.Runtime.AppConfigAWSCredentials object to instantiate. This is done when the FallbackCredentialsFactory intantiates the CredentialsGenerators property. In other words, create a project with aws key/secret in your app.config project and have no other way to provide aws credentials so that it looks for them there.
Possible Solution
No response
Additional Information/Context
No response
AWS .NET SDK and/or Package version used
AWS.Logger.Core 3.1.0
AWS.Logger.Log4net 3.3.0
log4net 2.0.12
AWSSDK.CloudWatchLogs 3.7.2.39
Targeted .NET Platform
4.8
Operating System and version
Windows Server 2016 Datacenter
The text was updated successfully, but these errors were encountered: