Closed alwaqfi closed 6 months ago
So that's weird, there's no way for this library to get past the build stage without this working. If you add in an explicit package reference to Serilog, rerun dotnet restore
, does it work?
<ItemGroup>
...
<PackageReference Include="Serilog" Version="[2.5.0,)" />
...
</ItemGroup
Thank you @wparad
I tried that but still the same error.
This is how my csproj file look like
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
</PropertyGroup>
<ItemGroup>
<Content Include="..\.dockerignore">
<Link>.dockerignore</Link>
</Content>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Serilog" Version="3.1.1" />
<PackageReference Include="AWSSDK.CloudWatchLogs" Version="3.7.305.1"/>
<PackageReference Include="Destructurama.Attributed" Version="4.0.0"/>
<PackageReference Include="Serilog.Exceptions" Version="8.4.0"/>
<PackageReference Include="Serilog.Extensions.Hosting" Version="8.0.0"/>
<PackageReference Include="Serilog.Sinks.AwsCloudWatch" Version="4.2.19"/>
<PackageReference Include="Serilog.Sinks.Console" Version="5.0.1"/>
</ItemGroup>
</Project>
What happens when you explicitly use the other constructor and explicitly pass in the ITextFormatter
:
public static LoggerConfiguration AmazonCloudWatch(
this LoggerSinkConfiguration loggerConfiguration,
string logGroup,
ILogStreamNameProvider logStreamNameProvider,
LogEventLevel restrictedToMinimumLevel = LogEventLevel.Verbose,
int batchSizeLimit = 100,
int batchUploadPeriodInSeconds = 10,
bool createLogGroup = true,
int queueSizeLimit = 10000,
byte maxRetryAttempts = 5,
LogGroupRetentionPolicy logGroupRetentionPolicy = LogGroupRetentionPolicy.OneWeek,
ITextFormatter textFormatter = null,
IAmazonCloudWatchLogs cloudWatchClient = null)
as new Serilog.Formatting.Json.JsonFormatter()
from the Serilog package?
Thank you @wparad ,
Still the same issue. I just tried to work with bar minimum code and packages but no luck. I tried to use the same version/package number in the cloudwatch sink but no luck too.
public static class HostingExtensions
{
public static IHostBuilder UseAmazonCloudWatchLogger(this IHostBuilder hostBuilder)
{
var client = new AmazonCloudWatchLogsClient(new BasicAWSCredentials("....AccessKey....", "....SecretKey...."), RegionEndpoint.CACentral1);
return hostBuilder.UseSerilog(
(host, log) => log
.MinimumLevel.Information()
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.MinimumLevel.Override("Microsoft.AspNetCore", LogEventLevel.Warning)
.WriteTo.AmazonCloudWatch(
$"logs/{host.HostingEnvironment.EnvironmentName}",
AppDomain.CurrentDomain.FriendlyName,
LogEventLevel.Information,
cloudWatchClient: client,
appendUniqueInstanceGuid: false,
appendHostName: false,
textFormatter: new JsonFormatter(),
logGroupRetentionPolicy: LogGroupRetentionPolicy.TwoWeeks)
);
}
}
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
</PropertyGroup>
<ItemGroup>
<Content Include="..\.dockerignore">
<Link>.dockerignore</Link>
</Content>
</ItemGroup>
<ItemGroup>
<PackageReference Include="AWSSDK.CloudWatchLogs" Version="[3.5.0.9,)" />
<PackageReference Include="Serilog.Extensions.Hosting" Version="8.0.0"/>
<PackageReference Include="Serilog.Sinks.AwsCloudWatch" Version="4.2.19"/>
</ItemGroup>
</Project>
This will be fixed in #132, you can, easily get around this by using the preferred options
object instead:
var formatter = new JsonFormatter();
// options for the sink defaults in https://github.com/Cimpress-MCP/serilog-sinks-awscloudwatch/blob/master/src/Serilog.Sinks.AwsCloudWatch/CloudWatchSinkOptions.cs
var options = new CloudWatchSinkOptions
{
// the name of the CloudWatch Log group for logging
LogGroupName = logGroupName,
// the main formatter of the log event
TextFormatter = formatter,
// other defaults defaults
MinimumLogEventLevel = Serilog.Events.LogEventLevel.Debug,
BatchSizeLimit = 100,
QueueSizeLimit = 10000,
Period = TimeSpan.FromSeconds(10),
CreateLogGroup = true,
LogStreamNameProvider = new DefaultLogStreamProvider(),
RetryAttempts = 5
};
and then:
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.AmazonCloudWatch(options, client)
.CreateLogger();
Thank you so much @wparad
In our case we configure everything in appsettings. Could someone please review the PR?
Issue:
After update cloudwatch sink to v4.2.17/19 I started getting this error when running the app however it works fine in v4.1.15.
Issue introduced in version:
4.2.17
Full error content
To reproduce:
Create empty Asp.Net Project
Add code below:
var builder = WebApplication.CreateBuilder(args); builder.Host.UseAmazonCloudWatchLogger(); var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
public static class HostingExtensions { public static IHostBuilder UseAmazonCloudWatchLogger(this IHostBuilder hostBuilder) {
}