首页 > 数据库 >.NET6中使用Log4net记录日志(二)记录日志到SqlServer数据库

.NET6中使用Log4net记录日志(二)记录日志到SqlServer数据库

时间:2024-05-20 16:40:17浏览次数:32  
标签:Log4net 记录 -- 线程 日志 记录时间 NVARCHAR 类名

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/&quot;Error.log&quot;"/>
    <!--追加到文件-->
    <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/&quot;Warn.log&quot;"/>
    <!--追加到文件-->
    <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/&quot;Info.log&quot;"/>
    <!--追加到文件-->
    <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/&quot;Debug.log&quot;"/>
    <!--追加到文件-->
    <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");

 

标签:Log4net,记录,--,线程,日志,记录时间,NVARCHAR,类名
From: https://www.cnblogs.com/sgxw/p/18202314

相关文章

  • Linux 终端复用器tmux,实现任务后台运行,即会话不间断,踩坑及使用要点记录
    1.同类型的还有比较老screen命令,tmux功能更多2.解决的问题比如正在终端ssh连接到服务器执行一个安装或打包任务,过程很长,期间不能中断,情况1:你想执行其他命令需要再开一个终端情况2:网络不稳定断联,任务会失败,就需要重新执行;情况3:你到点下班了,任务还在执行,晚上公司......
  • 日志过滤器
    1.安全相关的关键字认证失败regex复制代码Failed\s+passwordInvalid\s+userauthentication\s+failureFailed\s+publickeyFailed\s+keyboard-interactive/pam用户相关regex复制代码useradd\[userdel\[usermod\[sudo:\s+.+:.*\s+COMMAND=SSH相关regex复制代码sshd:......
  • Windows 日志也可能会被篡改和删除。这可能是因为某些恶意软件试图隐藏其存在或活动,或
    Windows日志也可能会被篡改和删除。这可能是因为某些恶意软件试图隐藏其存在或活动,或者是因为攻击者试图擦除他们的痕迹。为了防止日志的篡改和删除,用户应该采取以下措施:限制对日志的访问权限,以确保只有受信任的用户才能访问和修改日志。定期备份日志,并在必要时将其保......
  • rthread学习记录汇总-不断更新
    1、rthread同Linux类似,包含了所有主流的芯片、cpu架构,可从官方获取最新的rt-thread源码后进行裁剪 2、可从rthread官网下载env工具,env工具可用来对rtthread源码生成mdk/iar工程命令式scons--target=mdk5  scons--targe=iarscons自带的编译固件功能,命令为scnons,默认用......
  • .Net6 web API (Log日志)
    前言需要给项目打上日志可以查询哪里的信息 下面是步骤注意:不能允许没有任何监控的系统上线如何监控---日志记录需要日志信息的持久化-保存到文件中,保存到数据库中;11.11og4net日志记录1、Nuget引l入程序包Log4net+Microsoft.Extensions.Logging.Log4Net.AspNetcore2、......
  • 记录一次控件刷新后消失,错位的解决方法
    winform界面控件过多,持续刷新会出现控件消失,错位等现实问题,双缓存也不能解决。使用以下的刷新方式之后不再出现控件显示问题。privatevoidRefreshDataOnUI(){if(this.InvokeRequired){this.Invoke((MethodInvoker)delegate{//在......
  • LuckFox-pico 入门记录一:编译环境与GPIO
    LuckFoxRV1106点灯本文使用VMwave+ubuntu20.04虚拟机,并用CLion开发linux,简单记录一下配置过程;1虚拟机安装拿到板子,首先是配置环境,虚拟机选择ubuntu20.04,安装教程随便搜一下就行,网络配置选择NAT就行,可以不选择桥接模式,其他没有什么注意事项。比较难的一点是samba共享文件夹......
  • 记一次流量爆发导致服务器无响应的记录
    5月16日晚上7点40,发现hjdang.com的网页又打不开了。回去登陆腾讯云,发现是来自单一网页的Quark浏览器的流量大爆发,由/d/1776916731646734577带来223.67.102.60--[17/May/2024:17:51:46+0800]"GET/d/1776916731646734577HTTP/1.1"20010362"-""Mozilla/5.0(Linux;U;An......
  • 记录freeswitch的一个2833问题
    概述freeswitch是一款简单好用的VOIP开源软交换平台。运营商内部新老系统混用,互联互通的问题较多,其中以DTMF码的问题最多,花样也多。环境CentOS7.9freeswitch1.10.7问题描述问题现象正常的fs业务服务器,呼叫正常,部分呼叫报错DTMF收码失败。内部测试,呼叫正常,信令正常,媒体......
  • PVE学生自用记录
    PVE记录这篇博客主要记录自己大二阶段配置和使用PVE的过程。什么是PVE说到PVE,大家可能会想到PlaysersVsEnvironment,但是这里肯定不是指的游戏中的模式了,而是一个操作系统。它的全称为:ProxmoxVE,是一个运行虚拟机和容器的平台。基于DebianLinux完全开源。最大的灵活性,实......