.NET6中使用Log4net记录日志(二)记录日志到SqlServer数据库
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");