Reputation: 191
I am using log4net
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddDbContext<DataContext>(options => {
options.UseInMemoryDatabase("bjsports");
});
builder.Logging.AddLog4Net("log4net.config");
builder.Services.AddHostedService<SportsbookEventService>();
builder.Services.AddHostedService<SportsbookEventService1>();
//builder.Services.AddHostedService<SportEventService>();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
My appsettings
{
"ConnectionStrings": {
"DefaultConnection": "Data Source=localhost; Initial Catalog=bjsports"
},
"AllowedHosts": "*"
}
And then my log4net config
<log4net>
<root>
<level value="WARN" />
<appender-ref ref="ConsoleAppender" />
</root>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<param name="Threshold" value="INFO" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%date [%thread] %level %logger - %message%newline" />
</layout>
</appender>
</log4net>
However, in my logging:
info: Microsoft.Hosting.Lifetime[14]
Now listening on: https://localhost:7008
info: Microsoft.Hosting.Lifetime[14]
Now listening on: http://localhost:5008
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: XXX
warn: <MYCLASS>[0]
XXX
2022-06-11 09:20:25,055 [32] WARN XXX
warn: <MYCLASS>[0]
XXX
2022-06-11 09:20:25,212 [32] WARN XXX
I am getting log4net output as well as a copy of my logs into the built in logger. How do I make it so my logs only get output to log4net and not the built in logger?
Edit - added more to the main to show entire code.
Upvotes: 1
Views: 3863
Reputation: 460
You can ignore default logging factory in asp.net core services with ClearProviders extension method on ILoggingBuilder :
builder.Logging.ClearProviders();
So you should first clear default providers then register your logger provider as follow:
builder.Logging.ClearProviders();
builder.Logging.AddLog4Net("log4net.config");
Upvotes: 2