不支持.Net core 2.0中的log4net AdoNetAppender?

时间:2017-10-10 15:29:13

标签: c# asp.net-core-2.0 log4net-appender adonetappender

我正在 asp.net core 2.0 中实施log4net AdoNetAppender ,但我猜它不支持。我在核心2.0&中实现了log4net RollingFileAppender 。它使用log4.net配置成功。那么,如果log4net AdoNetAppender在核心2.0中不支持,还有其他方法可以将日志插入到核心2.0中的sql数据库吗?

谢谢

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题并解决了在.net核心解决方案

中使用这个nuget包的问题

https://www.nuget.org/packages/MicroKnights.Log4NetAdoNetAppender

您可以在

上找到有关如何进行此设置的详细信息

https://github.com/microknights/Log4NetAdoNetAppender

其他选项可能是指https://svn.apache.org/repos/asf/logging/log4net/tags/log4net-1_2_9/src/Appender/AdoNetAppender.cs

中的实施

答案 1 :(得分:0)

我遇到了同样的问题。我已通过以下方式修复它:

使用appender将 log4net.config.xml 文件添加到ASP.NET Core项目。在 AdoNetAppender 的此文件中,您可以指定connectionStringconnectionStringName但它没有意义,因为连接将是null

因此,将连接字符串添加到 appsettings.json 而不是

"ConnectionStrings": {
   "Log": "Data Source=localhost\\SQLEXPRESS;Initial Catalog=Log.Database;User ID=sa;Password=;MultipleActiveResultSets=True"
}

然后配置

ILoggerRepository logRepository = log4net.LogManager.GetRepository(Assembly.GetExecutingAssembly());
XmlConfigurator.Configure(logRepository, new FileInfo("log4net.config"));\

并手动分配连接字符串

ILog _databaseLogger = log4net.LogManager.GetLogger("DBLogger");
var repository = _databaseLogger?.Logger.Repository;
if (repository != null) 
{
    _adoAppender = repository.GetAppenders()
        .FirstOrDefault(a => a is AdoNetAppender) as AdoNetAppender;

    if (_adoAppender != null && string.IsNullOrEmpty(_adoAppender.ConnectionStringName)) 
    {
        _adoAppender.ConnectionString = "some connection string from appsettings.json";
        _adoAppender.ActivateOptions();
    }
}

ActivateOptions()调用重新初始化appender。