我正在在 asp.net core 2.0 中实现 log4net 的 AdoNetAppender,但是我猜测它不支持。我已经使用 log4.net 配置在 core 2.0 中实现了 RollingFileAppender,并且它成功地工作了。所以,如果 log4net AdoNetAppender 在 core 2.0 中不被支持,那么是否有其他方法可以将日志插入到 sql 数据库中?谢谢。
我遇到了同样的问题,并使用这个Nuget包在.NET Core解决方案中解决了它。
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 中的实现。
我曾经遇到过同样的问题,我是这样解决的:
在 ASP.NET Core 项目中添加 log4net.config.xml 文件并配置 appender。在该文件中,对于 AdoNetAppender,您可以指定 connectionString
或 connectionStringName
,但这没有意义,因为连接将为 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。