Невозможно вызвать пользовательский appender для Log4Net в .Net Core API - PullRequest
0 голосов
/ 15 апреля 2019

Вот мой код. Я использую только ссылку Microsoft.Extensions.Logging.Log4Net.AspNetCore Я получаю следующее исключение в окне отладки. Можете ли вы помочь мне в настройке файла конфигурации log4net.

log4net: configuring repository [log4net-default-repository] using XML element
log4net: Configuring Repository [log4net-default-repository]
log4net: Configuration update mode [Merge].
log4net: Logger [root] Level string is [Error].
log4net: Logger [root] level set to [name="ERROR",value=70000].
log4net: Loading Appender [AuditAppender] type: [Logger.Log4NetAuditAppender]
log4net:ERROR Could not create Appender [AuditAppender] of type [Logger.Log4NetAuditAppender]. Reported error follows.
System.TypeLoadException: Could not load type 'Logger.Log4NetAuditAppender' from assembly 'log4net, Version=2.0.8.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a'.
   at System.Reflection.RuntimeAssembly.GetType(RuntimeAssembly assembly, String name, Boolean throwOnError, Boolean ignoreCase, ObjectHandleOnStack type, ObjectHandleOnStack keepAlive)
   at System.Reflection.RuntimeAssembly.GetType(String name, Boolean throwOnError, Boolean ignoreCase)
   at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.ParseAppender(XmlElement appenderElement)
log4net:ERROR Appender named [AuditAppender] not found.

Startup.cs

  public void ConfigureServices(IServiceCollection services) 
    { 
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); 
    services.AddLogging(builder => builder.AddLog4Net("log4net.config")); 
    }

  public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
    { 

    loggerFactory.AddLog4Net(); 
    app.UseMvc(); 
    }

my log4.net config

 <?xml version="1.0" encoding="utf-8"?> 
    <log4net debug="true"> 
    <root> 
    <level value="Error" /> 
    <appender-ref ref="AuditAppender" /> 
    </root> 
    <appender name="AuditAppender" type="Logger.Log4NetAuditAppender,Logger"> 
    </appender> 

    </log4net>

мой пользовательский аппендер

public class Log4NetAuditAppender : AppenderSkeleton 
    { 
    public Log4NetAuditAppender(){ 
    } 
    protected override void Append(LoggingEvent loggingEvent) 
    { 
    Console.WriteLine("coming inside"); 
    } 
    } 
    }

мой контроллер

 [Route("api/[controller]")] 
    [ApiController] 
    public class ValuesController : ControllerBase 
    {

    private ILogger<ValuesController> _logger; 
    public ValuesController(ILogger<ValuesController> logger) { _logger = logger;}

    [HttpGet("{id}")] 
    public ActionResult<string> Get(int id) 
    {
      _logger.LogInformation("test", null);
       return "value";
    }

1 Ответ

0 голосов
/ 12 июля 2019

У меня была та же проблема, после добавления имени сборки после полного имени класса в теге appender, оно было решено.

<appender name="AuditAppender" type="Logger.Log4NetAuditAppender,Logger"> 

Просто замените ", Logger" на, и оно должно работать.

...