asp.net core版本:5.0
log4net:2.0
一般情况下,我比较习惯把日志记录到日志文件中。但这种方式有一个缺点:把项目发布到生产环境后,每次查看日志都需要远程登录到服务器去查看日志文件,有点不太方便,所以我想把日志写入到数据库中。
首先我们新建一个asp.net core webapi项目,nuget添加如下包:
向日志系统中添加log4net:
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
}).ConfigureLogging(logBuilder =>
{
logBuilder.AddLog4Net();
});
配置log4net.config:
<?xml version="1.0" encoding="utf-8"?>
<log4net>
<logger name="actionLog">
<level value="ERROR" />
<appender-ref ref="adoNetAppender_SqlServer"/>
</logger>
<appender name="adoNetAppender_SqlServer" type="log4net.Appender.ADONetAppender">
<!--日志缓存写入条数 设置为0时只要有一条就立刻写到数据库 生产环境可改为10-100写入一次-->
<bufferSize value="1" />
<!-- 日志数据库连接类型(此处非常重要,写错会导致无法写入数据库) -->
<connectionType value="System.Data.SqlClient.SqlConnection,System.Data"/>
<!--日志数据库连接串-->
<connectionString value="server=.;database=TestDb;uid=sa;pwd=123456" />
<!--日志数据库脚本-->
<commandText value="INSERT INTO LogError(LogDateTime,HttpMethod,Uri,ErrMessage,ErrStackTrace) VALUES(@LogDateTime,@HttpMethod,@Uri,@ErrMessage,@ErrStackTrace)" />
<!--日志时间 -->
<parameter>
<parameterName value="@LogDateTime" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
<parameterName value="@HttpMethod" />
<dbType value="String" />
<layout type="LogDemo.LogDbConfig.ActionLayoutPattern">
<conversionPattern value = "%pattern{HttpMethod}"/>
</layout>
<