user3533755
user3533755

Reputation: 191

How to disable builtin logger for .net core

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

Answers (1)

Mohammad Ramezani
Mohammad Ramezani

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

Related Questions