1、引用NuGet包(System.Data.SqlClient)
2、创建SqlServer数据库表(ProgramLog)
CREATE TABLE ProgramLog (
Id INT IDENTITY(1,1) PRIMARY KEY,
[Date] DATETIME,--记录时间
[Level] NVARCHAR(128),--日志级别
[RunTime] VARCHAR(128),--执行时长
[Thread] NVARCHAR(256),--线程号
[Line] NVARCHAR(256),--行号
[Message] NVARCHAR(max),--描述
[Exception] NVARCHAR(2000),--详情
[Logger] NVARCHAR(256) --类名
);
3、更新配置文件(log4net.config),这里此配置文件属性,复制到输出目录,需设置为:始终复制
<?xml version="1.0" encoding="utf-8"?>
<log4net>
<!--根配置-->
<root>
<!--日志级别:可选值: ERROR > WARN > INFO > DEBUG -->
<level value="ERROR"/>
<level value="WARN"/>
<level value="INFO"/>
<level value="DEBUG"/>
<appender-ref ref="AdoNetAppender" />
<appender-ref ref="ErrorLog" />
<appender-ref ref="WarnLog" />
<appender-ref ref="InfoLog" />
<appender-ref ref="DebugLog" />
</root>
<!--正常日志:记录正常日志-->
<!-- appender 定义日志输出方式 将日志以回滚文件的形式写到数据库中。-->
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<!--日志缓存写入条数 设置为0时只要有一条就立刻写到数据库-->
<bufferSize value="0" />
<!-- 数据库连接字符串 -->
<connectionType value="System.Data.SqlClient.SqlConnection,System.Data.SqlClient, Version=4.6.1.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<connectionString value="Data Source=.;Initial Catalog=MainAPI;User ID=sa;Password=svse;Integrated Security=True;" />
<!-- 日志表的结构 -->
<commandText value="INSERT INTO [dbo].[ProgramLog]([Level],[RunTime],[Thread],[Line],[Message],[Exception],[Logger],[Date])VALUES (@log_level,@log_runtime,@thread,@log_line,@message,@exception,@logger,@log_date)"/>
<parameter>
<parameterName value="@log_level" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level" />
</layout>
</parameter>
<parameter>
<parameterName value="@log_runtime" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%r" />
</layout>
</parameter>
<parameter>
<parameterName value="@log_line" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%L"/>
</layout>
</parameter>
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread" />
</layout>
</parameter>
<parameter>
<parameterName value="@logger" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger" />
</layout>
</parameter>
<parameter>
<parameterName value="@message" />
<dbType value="String" />
<size value="4000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message" />
</layout>
</parameter>
<parameter>
<parameterName value="@exception" />
<dbType value="String" />
<size value="2000" />
<layout type="log4net.Layout.ExceptionLayout" />
</parameter>
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
</appender>
<!-- 错误 Error.log-->
<appender name="ErrorLog" type="log4net.Appender.RollingFileAppender">
<!--目录路径,可以是相对路径或绝对路径-->
<param name="File" value="log"/>
<!--文件名,按日期生成文件夹-->
<param name="DatePattern" value="/yyyy-MM-dd/"Error.log""/>
<!--追加到文件-->
<appendToFile value="true"/>
<!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
<rollingStyle value="Composite"/>
<!--写到一个文件-->
<staticLogFileName value="false"/>
<!--单个文件大小。单位:KB|MB|GB-->
<maximumFileSize value="200MB"/>
<!--最多保留的文件数,设为"-1"则不限-->
<maxSizeRollBackups value="-1"/>
<!--日志输出格式//行号影响性能??-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%n=====================================================================================================
%n[日志级别]%-5level
%n[记录时间]%date
%n[执行时间]%r
%n[线程]%t
%n[文件]%F
%n[行号]%L
%n[类名]%logger
%n[描述]%message
%n[详情]%exception"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="ERROR" />
<param name="LevelMax" value="ERROR" />
</filter>
</appender>
<!-- 警告 Warn.log-->
<appender name="WarnLog" type="log4net.Appender.RollingFileAppender">
<!--目录路径,可以是相对路径或绝对路径-->
<param name="File" value="log"/>
<!--文件名,按日期生成文件夹-->
<param name="DatePattern" value="/yyyy-MM-dd/"Warn.log""/>
<!--追加到文件-->
<appendToFile value="true"/>
<!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
<rollingStyle value="Composite"/>
<!--写到一个文件-->
<staticLogFileName value="false"/>
<!--单个文件大小。单位:KB|MB|GB-->
<maximumFileSize value="200MB"/>
<!--最多保留的文件数,设为"-1"则不限-->
<maxSizeRollBackups value="-1"/>
<!--日志格式-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%n=====================================================================================================
%n[日志级别]%-5level
%n[记录时间]%date
%n[执行时间]%r
%n[线程]%t
%n[文件]%F
%n[行号]%L
%n[类名]%logger
%n[描述]%message
%n[详情]%exception"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="WARN" />
<param name="LevelMax" value="WARN" />
</filter>
</appender>
<!-- 信息 Info.log-->
<appender name="InfoLog" type="log4net.Appender.RollingFileAppender">
<!--目录路径,可以是相对路径或绝对路径-->
<param name="File" value="log"/>
<!--文件名,按日期生成文件夹-->
<param name="DatePattern" value="/yyyy-MM-dd/"Info.log""/>
<!--追加到文件-->
<appendToFile value="true"/>
<!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
<rollingStyle value="Composite"/>
<!--写到一个文件-->
<staticLogFileName value="false"/>
<!--单个文件大小。单位:KB|MB|GB-->
<maximumFileSize value="200MB"/>
<!--最多保留的文件数,设为"-1"则不限-->
<maxSizeRollBackups value="-1"/>
<!--日志格式-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%n=====================================================================================================
%n[日志级别]%-5level
%n[记录时间]%date
%n[执行时间]%r
%n[线程]%t
%n[文件]%F
%n[行号]%L
%n[类名]%logger
%n[描述]%message
%n[详情]%exception"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="INFO" />
</filter>
</appender>
<!-- 调试 Debug.log-->
<appender name="DebugLog" type="log4net.Appender.RollingFileAppender">
<!--目录路径,可以是相对路径或绝对路径-->
<param name="File" value="log"/>
<!--文件名,按日期生成文件夹-->
<param name="DatePattern" value="/yyyy-MM-dd/"Debug.log""/>
<!--追加到文件-->
<appendToFile value="true"/>
<!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
<rollingStyle value="Composite"/>
<!--写到一个文件-->
<staticLogFileName value="false"/>
<!--单个文件大小。单位:KB|MB|GB-->
<maximumFileSize value="200MB"/>
<!--最多保留的文件数,设为"-1"则不限-->
<maxSizeRollBackups value="-1"/>
<!--日志格式-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%n=====================================================================================================
%n[日志级别]%-5level
%n[记录时间]%date
%n[执行时间]%r
%n[线程]%t
%n[文件]%F
%n[行号]%L
%n[类名]%logger
%n[描述]%message
%n[详情]%exception"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="DEBUG" />
<param name="LevelMax" value="DEBUG" />
</filter>
</appender>
</log4net>
4、Log4net官方写入数据库文档:https://logging.apache.org/log4net/release/config-examples.html
5、程序中调用日志功能
Log4netHelper.Info("token 认证 成功1"); Log4netHelper.Warning("token 认证 成功222"); Log4netHelper.Debug("token 认证 成功3233"); Log4netHelper.Error("token 认证 成功444");