Error with Log4Net configuration in .Net 6 : Failed to find and create specified appenders

146 Views Asked by At

In my .NET 6 application, when I try to log errors using Log4Net, errors are not logged in SQL Server table. While debugging I can see attached error in ILogSQLLogger.Logger.Repository.

I am not sure how to fix this. Can someone please explain the issue here?

My Log4Net.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>
    <root>
      <level value="ALL"/>
      <appender-ref ref="FileAppender"/>
      <appender-ref ref="ADONetAppender"/>
    </root>
    <appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="C:\Logs\ErrorLog.txt"/>
      <lockingModel type="log4net.Appender.RollingFileAppender+MinimalLock"/>
      <appendToFile value="true"/>
      <rollingStyle value="Date"/>
      <datePattern value="_yyyyMMdd"/>
      <staticLogFileName value="false"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%message%newline"/>
      </layout>
      <preserveLogFileNameExtension value="true"/>
    </appender>
    <appender name="ADONetAppender" type="myproject.CustomClass.UserAdoNetAppender">
      <bufferSize value="1"/>
      <reconnectonerror value="True"/>
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
      <connectionString value="Server=10.100.200.144;Database=UserDB;User Id=pswd1;Password=pswd1;persist security info=true;Trusted_Connection=false;MultipleActiveResultSets=True;"/>
      <commandText value="INSERT INTO dbo.Log (MethodName,Error) VALUES (@Param1, @Param2) "/>
      <parameter>
        <parameterName value="@Param1"/>
        <dbType value="AnsiString"/>
        <size value="50"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%property{Param1}"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@Param2"/>
        <dbType value="AnsiString"/>
        <size value="64"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%property{Param2}"/>
        </layout>
      </parameter>
      
    </appender>
    
    <logger name="FileLogger" additivity="false">
      <level value="ALL"/>
      <appender-ref ref="FileAppender"/>
    </logger>
    <logger name="SQLLogger" additivity="false">
      <level value="ALL"/>
      <appender-ref ref="ADONetAppender"/>
    </logger>
  </log4net>
</configuration>

In my Startup.cs, I have this code:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseSwagger();
    app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "MyApp"));
    var logRepository = LogManager.GetRepository(Assembly.GetEntryAssembly());

    XmlConfigurator.Configure(logRepository, new FileInfo("log4net.config"));

    app.UseHttpsRedirection();
    app.UseRouting();
    app.UseAuthorization();
    app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
    app.UseCors();
}

This is the error I get :

enter image description here

I have tried adding different packages such as MicroKnights.Log4NetAdoNetAppender but nothing works.

0

There are 0 best solutions below