.NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
一、效果
-
记录日志为文档

-
记录日志到数据库

二、添加NuGet包

三、log4net.config代码配置
<?xml version="1.0" encoding="utf-8" ?>
<log4net><!-- Debug日志 --><appender name="RollingFileDebug" type="log4net.Appender.RollingFileAppender" ><!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 --><file value="logs\\" /><!-- 日志文件的命名规则 --><datePattern value="yyyy-MM-dd/'Debug.log'"/><!-- 将日志信息追加到已有的日志文件中--><appendToFile value="true" /><rollingStyle value="Size" /><maxSizeRollBackups value="100" /><maximumFileSize value="3MB" /><!-- 指定按日期切分日志文件 --><rollingStyle value="Date"/><!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false --><staticLogFileName value="false" /><!-- 最小锁定模式,以允许多个进程可以写入同一个文件 --><lockingModel type="log4net.Appender.FileAppender+MinimalLock" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%newline%newline【日志时间】: %d 【线程ID】: %thread %newline【日志级别】: %-5p %newline【日志对象】:%logger %newline【日志内容】:%m %newline" /></layout><filter type="log4net.Filter.LevelRangeFilter"><param name="LevelMin" value="Debug" /><param name="LevelMax" value="Debug" /></filter></appender><!-- Info日志 --><appender name="RollingFileInfo" type="log4net.Appender.RollingFileAppender" ><!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 --><file value="logs\\" /><!-- 日志文件的命名规则 --><datePattern value="yyyy-MM-dd/'Info.log'"/><!-- 将日志信息追加到已有的日志文件中--><appendToFile value="true" /><rollingStyle value="Size" /><maxSizeRollBackups value="100" /><maximumFileSize value="3MB" /><!-- 指定按日期切分日志文件 --><rollingStyle value="Date"/><!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false --><staticLogFileName value="false" /><!-- 最小锁定模式,以允许多个进程可以写入同一个文件 --><lockingModel type="log4net.Appender.FileAppender+MinimalLock" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%newline%newline【日志时间】:%d 【线程ID】:%thread %newline【日志级别】:%-5p %newline【日志对象】:%logger %newline【日志内容】:%m %newline" /></layout><filter type="log4net.Filter.LevelRangeFilter"><param name="LevelMin" value="Info" /><param name="LevelMax" value="Info" /></filter></appender><!-- WARN日志 --><appender name="RollingFileWarn" type="log4net.Appender.RollingFileAppender" ><!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 --><file value="logs\\" /><!-- 日志文件的命名规则 --><datePattern value="yyyy-MM-dd/'Warn.log'"/><!-- 将日志信息追加到已有的日志文件中--><appendToFile value="true" /><rollingStyle value="Size" /><maxSizeRollBackups value="100" /><maximumFileSize value="3MB" /><!-- 指定按日期切分日志文件 --><rollingStyle value="Date"/><!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false --><staticLogFileName value="false" /><!-- 最小锁定模式,以允许多个进程可以写入同一个文件 --><lockingModel type="log4net.Appender.FileAppender+MinimalLock" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%newline%newline【日志时间】:%d 【线程ID】:%thread %newline【日志级别】:%-5p %newline【日志对象】:%logger %newline【日志内容】:%m %newline" /></layout><filter type="log4net.Filter.LevelRangeFilter"><param name="LevelMin" value="Warn" /><param name="LevelMax" value="Warn" /></filter></appender><!-- Error日志 --><appender name="RollingFileError" type="log4net.Appender.RollingFileAppender" ><!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 --><file value="logs\\" /><!-- 日志文件的命名规则 --><datePattern value="yyyy-MM-dd/'Error.log'"/><!-- 将日志信息追加到已有的日志文件中--><appendToFile value="true" /><rollingStyle value="Size" /><maxSizeRollBackups value="100" /><maximumFileSize value="3MB" /><!-- 指定按日期切分日志文件 --><rollingStyle value="Date"/><!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false --><staticLogFileName value="false" /><!-- 最小锁定模式,以允许多个进程可以写入同一个文件 --><lockingModel type="log4net.Appender.FileAppender+MinimalLock" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%newline%newline【日志时间】:%d 【线程ID】:%thread %newline【日志级别】:%-5p %newline【日志对象】:%logger %newline【日志内容】:%m %newline" /></layout><filter type="log4net.Filter.LevelRangeFilter"><param name="LevelMin" value="Error" /><param name="LevelMax" value="Error" /></filter></appender><!-- Fatal日志 --><appender name="RollingFileFatal" type="log4net.Appender.RollingFileAppender" ><!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 --><file value="logs\\" /><!-- 日志文件的命名规则 --><datePattern value="yyyy-MM-dd/'Fatal.log'"/><!-- 将日志信息追加到已有的日志文件中--><appendToFile value="true" /><rollingStyle value="Size" /><maxSizeRollBackups value="100" /><maximumFileSize value="3MB" /><!-- 指定按日期切分日志文件 --><rollingStyle value="Date"/><!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false --><staticLogFileName value="false" /><!-- 最小锁定模式,以允许多个进程可以写入同一个文件 --><lockingModel type="log4net.Appender.FileAppender+MinimalLock" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%newline%newline【日志时间】:%d 【线程ID】:%thread %newline【日志级别】:%-5p %newline【日志对象】:%logger %newline【日志内容】:%m%newline" /></layout><filter type="log4net.Filter.LevelRangeFilter"><param name="LevelMin" value="Fatal" /><param name="LevelMax" value="Fatal" /></filter></appender><!--数据库配置--><appender name="logAppender_SqlServer" type="log4net.Appender.ADONetAppender"><bufferSize value="0"/><connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/><!--链接数据库配置--><connectionString value="Data Source=xxxxxxxx;Initial Catalog=xxxxxxxx;User ID=sa;Password=********;"/><commandText value="INSERT INTO LogData ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)"/><parameter><parameterName value="@log_date"/><dbType value="DateTime"/><layout type="log4net.Layout.RawTimeStampLayout"/></parameter><parameter><parameterName value="@thread"/><dbType value="String"/><size value="50"/><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%thread"/></layout></parameter><parameter><parameterName value="@log_level"/><dbType value="String"/><size value="50"/><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%level"/></layout></parameter><parameter><parameterName value="@logger"/><dbType value="String"/><size value="200"/><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%logger"/></layout></parameter><parameter><parameterName value="@message"/><dbType value="String"/><size value="2000"/><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></appender><root><!--控制级别,由低到高:ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF 比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录 如果没有定义LEVEL的值,则缺省为DEBUG--><appender-ref ref="RollingFileDebug" /><appender-ref ref="RollingFileInfo" /><appender-ref ref="RollingFileWarn" /><appender-ref ref="RollingFileError" /><appender-ref ref="RollingFileFatal" /><appender-ref ref="logAppender_SqlServer" /> <level value="DEBUG" /></root></log4net>
相关文章:
.NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
一、效果 记录日志为文档 记录日志到数据库 二、添加NuGet包 三、log4net.config代码配置 <?xml version"1.0" encoding"utf-8" ?> <log4net><!-- Debug日志 --><appender name"RollingFileDebug" type"log4net…...
Day36 贪心算法 part05
划分字母区间 一个字母区间仅有几个字母前一个字母区间有的字母后面都没有 合并区间 天才举一反三写出来了...
C#计算矩形面积:通过定义结构 vs 通过继承类
目录 一、涉及到的知识点 1.结构 2.结构和类的区别 3.继承 4.使用类继承提高程序的开发效率 5.属性 (1)属性定义 (2)get访问器 (3)set访问器 6. 属性和字段的区别 二、实例:通过定义…...
【复现】Panalog大数据日志审计系统 RCE漏洞_51
目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一: 四.修复建议: 五. 搜索语法: 六.免责声明 一.概述 Panalog大数据日志审计系统定位于将大数据产品应用于高校、 公安、 政企、 医疗、 金融、 能源等行业之中,针对网络流…...
react【五】redux/reduxToolkit/手写connext
文章目录 1、回顾纯函数2、redux2.1 redux的基本使用2.2 通过action修改store的数值2.3 订阅state的变化2.4 目录结构2.5 Redux的使用过程2.6 redux的三大原则2.7 Redux官方图 3、redux在React中的使用4、react-redux使用4.1 react-redux的基本使用4.2 异步请求 redux-thunk4.3…...
.NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
前言 很多同学都不愿给电脑设动态壁纸,其中有个重要原因就是嫌它占资源过多。今天大姚分享一个.NET开源、免费(MIT license)的一个小而快并且功能强大的 Windows 动态桌面软件,支持视频和网页动画播放:DreamScene2。 …...
jsp计算机线上教学系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
一、源码特点 JSP 计算机线上教学系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5…...
RabbitMQ的高可用机制
RabbitMQ通过多种机制提供高可用性(HA)支持,以确保消息系统的稳定性和可靠性。下面将详细介绍这些机制,并提供代码示例。 集群(Clustering) RabbitMQ的集群提供了高可用性和负载均衡。集群中的节点共享同一个Erlang分布式数据库…...
人机协同中的贝叶斯和马尔可夫
人机协同中的马尔可夫链是指在人与机器之间协同工作过程中,可能涉及到的状态转移概率模型。马尔可夫链是一种数学模型,描述了在给定当前状态下,未来状态的概率分布只依赖于当前状态,而与过去状态无关的随机过程。在人机协同工作中…...
STM32的SDIO
一.SDIO简介 SDIO,全称Secure Digital Input/Output,是一种用于在移动设备和嵌入式系统中实现输入/输出功能的接口标准。它结合了SD卡的存储功能和I/O功能,允许设备通过SD卡槽进行数据输入输出和外围设备连接。 SDIO接口通常被用于连接各种…...
Unity中的Lerp插值的使用
Unity中的Lerp插值使用 前言Lerp是什么如何使用Lerp 前言 平时在做项目中插值的使用避免不了,之前一直在插值中使用存在误区,在这里浅浅记录一下。之前看的博客或者教程还多都存在一个“永远到达不了,只能无限接近”的一个概念。可能是之前脑…...
年后上来面了一个来字节要求月薪23K,明显感觉他背了很多面试题...
最近有朋友去字节面试,面试前后进行了20天左右,包含4轮电话面试、1轮笔试、1轮主管视频面试、1轮hr视频面试。 据他所说,80%的人都会栽在第一轮面试,要不是他面试前做足准备,估计都坚持不完后面几轮面试。 其实&…...
代码随想录算法训练营DAY20 | 二叉树 (8)
一、LeetCode 701 二叉搜索树中的插入操作 题目链接: 701.二叉搜索树中的插入操作https://leetcode.cn/problems/insert-into-a-binary-search-tree/description/ 思路:见缝插针罢辽。 class Solution {public TreeNode insertIntoBST(TreeNode root, i…...
2023年全球软件开发大会(QCon北京站2023)2月:核心内容与学习收获(附大会核心PPT下载)
本次峰会是一个汇集了最新技术趋势、最佳实践和创新思维的盛会。对于从事软件开发和相关领域的专业人士来说,参加这样的大会将有助于他们了解行业动态、提升技能水平、拓展职业视野,并与同行建立联系和合作。 本次峰会包含:AI基础架构、DevO…...
键盘输入4个数,从小到大排序
题目 键盘输入4个整数,从小到大排序 思路 代码 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h>//键盘输入4个整数,从小到大排序 int main() {int n1, n2, n3, n4;scanf_s("%d %d %d %d", &n1, &n2, &n3, &n4);…...
Day11-Linux系统iNode及链接知识及企业按哪里精讲
Day11-Linux系统iNode及链接知识及企业按哪里精讲 1. 文件核心 属性知识1.1 什么是索引节点(inode)。1.2 索引节点作用1.3 inode是怎么产生的?1.4 inode的特点?1.5 Linux系统读取文件的原理1.6 企业生产案例:No space …...
C# Thread的使用
在C#中,线程用于实现程序的并发执行。通过创建和管理多个线程,可以同时处理不同的任务或操作,从而提高程序性能和响应性。以下是如何在C#中使用线程的基本步骤: 创建新线程 // 使用System.Threading命名空间 using System.Threa…...
ETL数据集成工具DataX、Kettle、ETLCloud特点对比
ETL数据集成工具 对于数据仓库,大数据集成类应用,通常会采用ETL工具辅助完成。ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract) 、交互转换(transform) 、加载(load)至的端的过程当前的很多应…...
OpenAI:Sora视频生成模型技术报告(中文)
概述 视频生成模型作为世界模拟器 我们探索视频数据生成模型的大规模训练。具体来说,我们在可变持续时间、分辨率和宽高比的视频和图像上联合训练文本条件扩散模型。我们利用transformer架构,在视频和图像潜在代码的时空补丁上运行。我们最大的模型Sor…...
Java基于微信小程序的乐室预约小程序,附源码
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...
008.S3C2440中断分析|千篇笔记实现嵌入式全栈/裸机篇
1. 流程 S3C2440中断流程如下, 发生中断时,[SUB]SRCPND源挂起寄存器对应的bit位会置位, 然后[SUB]MASK屏蔽寄存器对应的bit位会卡一下,决定中断流要不要继续, 也就是说不管中断有没有被屏蔽,源挂起寄存…...
从原理图到比特流:手把手解读Vivado里那个神秘的SPI x4配置电路图(附Mode引脚设置对照表)
深入解析Vivado SPI x4配置电路:从原理图到硬件实现的完整指南 在FPGA开发中,SPI Flash配置电路的正确设计直接关系到系统能否正常启动和工作。许多工程师在第一次接触Xilinx Vivado提供的官方SPI x4配置电路图时,往往会对其中各种网络标签和…...
GCC-Net实战解析:如何通过门控跨域协作提升水下目标检测精度
1. GCC-Net:水下目标检测的新范式 水下目标检测一直是计算机视觉领域的特殊挑战。与常规场景不同,水下环境存在光线衰减、散射效应、颜色失真等问题,导致图像质量显著下降。传统方法要么直接使用原始图像(面临低对比度问题&#x…...
企业微信日程秒同步到Outlook?这个隐藏功能90%的人不知道
企业微信与Outlook日程无缝同步的终极指南:揭秘Exchange ActiveSync的高阶玩法 每次开会前手忙脚乱地在两个日历间切换?重要会议提醒因为系统不同步而错过?作为深度体验过十余种日程管理工具的效率控,我发现企业微信内置的Exchang…...
MusePublic Art Studio效果展示:复杂发型丝缕感与空气感光影表现
MusePublic Art Studio效果展示:复杂发型丝缕感与空气感光影表现 1. 惊艳效果开场:当AI遇见艺术创作 今天要展示的是MusePublic Art Studio在人物肖像生成方面的惊人表现,特别是对复杂发型丝缕感和空气感光影的细腻刻画。这款基于SDXL引擎的…...
RoboCore SMW_SX1276M0 LoRaWAN协议栈开发指南
1. 项目概述RoboCore SMW_SX1276M0 是一款面向嵌入式物联网终端的 LoRaWAN 协议栈封装库,专为 RoboCore LoRaWAN Bee v2.0 模块设计。该模块核心采用 Semtech SX1276 射频收发器,集成高灵敏度 LoRa 调制解调器、前向纠错(FEC)、自…...
[复现]神经网络(NN)+模型预测控制(MPC)算法、四旋翼无人机+非线性机器人汽车系统研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
利用rms包实现限制性立方样条回归(RCS)在生存分析中的实战应用
1. 为什么需要限制性立方样条回归? 在医学数据分析中,我们经常遇到变量与结局之间并非简单的直线关系。比如研究年龄与癌症风险时,可能发现中年人群风险最高,而年轻人和老年人风险相对较低——这种U型关系用传统线性回归会严重失真…...
CTFshow-PWN实战:利用NOP Sled绕过栈保护获取Shell
1. 理解NOP Sled技术原理 NOP Sled(空操作雪橇)是二进制漏洞利用中的经典技术,特别适合应对地址随机化(ASLR)或栈地址不确定的情况。它的核心思想就像滑雪场里的缓冲坡道——通过布置大量无操作指令(NOP&am…...
【优化求解】用于密集子图和密集子矩阵问题的凸优化附matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。👇 关注我领取海量matlab电子书和数学建模资料🍊个人信条:格物致知,完整Matl…...
