.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");
posted @ 2024-05-20 16:42  时光巷尾  阅读(51)  评论(0编辑  收藏  举报