当前位置: 首页 > news >正文

.NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库

一、效果

  1. 记录日志为文档
    在这里插入图片描述

  2. 记录日志到数据库

在这里插入图片描述

二、添加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.属性 &#xff08;1&#xff09;属性定义 &#xff08;2&#xff09;get访问器 &#xff08;3&#xff09;set访问器 6. 属性和字段的区别 二、实例&#xff1a;通过定义…...

【复现】Panalog大数据日志审计系统 RCE漏洞_51

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一&#xff1a; 四.修复建议&#xff1a; 五. 搜索语法&#xff1a; 六.免责声明 一.概述 Panalog大数据日志审计系统定位于将大数据产品应用于高校、 公安、 政企、 医疗、 金融、 能源等行业之中&#xff0c;针对网络流…...

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

前言 很多同学都不愿给电脑设动态壁纸&#xff0c;其中有个重要原因就是嫌它占资源过多。今天大姚分享一个.NET开源、免费&#xff08;MIT license&#xff09;的一个小而快并且功能强大的 Windows 动态桌面软件&#xff0c;支持视频和网页动画播放&#xff1a;DreamScene2。 …...

jsp计算机线上教学系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 计算机线上教学系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5…...

RabbitMQ的高可用机制

RabbitMQ通过多种机制提供高可用性(HA)支持&#xff0c;以确保消息系统的稳定性和可靠性。下面将详细介绍这些机制&#xff0c;并提供代码示例。 集群&#xff08;Clustering&#xff09; RabbitMQ的集群提供了高可用性和负载均衡。集群中的节点共享同一个Erlang分布式数据库…...

人机协同中的贝叶斯和马尔可夫

人机协同中的马尔可夫链是指在人与机器之间协同工作过程中&#xff0c;可能涉及到的状态转移概率模型。马尔可夫链是一种数学模型&#xff0c;描述了在给定当前状态下&#xff0c;未来状态的概率分布只依赖于当前状态&#xff0c;而与过去状态无关的随机过程。在人机协同工作中…...

STM32的SDIO

一.SDIO简介 SDIO&#xff0c;全称Secure Digital Input/Output&#xff0c;是一种用于在移动设备和嵌入式系统中实现输入/输出功能的接口标准。它结合了SD卡的存储功能和I/O功能&#xff0c;允许设备通过SD卡槽进行数据输入输出和外围设备连接。 SDIO接口通常被用于连接各种…...

Unity中的Lerp插值的使用

Unity中的Lerp插值使用 前言Lerp是什么如何使用Lerp 前言 平时在做项目中插值的使用避免不了&#xff0c;之前一直在插值中使用存在误区&#xff0c;在这里浅浅记录一下。之前看的博客或者教程还多都存在一个“永远到达不了&#xff0c;只能无限接近”的一个概念。可能是之前脑…...

年后上来面了一个来字节要求月薪23K,明显感觉他背了很多面试题...

最近有朋友去字节面试&#xff0c;面试前后进行了20天左右&#xff0c;包含4轮电话面试、1轮笔试、1轮主管视频面试、1轮hr视频面试。 据他所说&#xff0c;80%的人都会栽在第一轮面试&#xff0c;要不是他面试前做足准备&#xff0c;估计都坚持不完后面几轮面试。 其实&…...

代码随想录算法训练营DAY20 | 二叉树 (8)

一、LeetCode 701 二叉搜索树中的插入操作 题目链接&#xff1a; 701.二叉搜索树中的插入操作https://leetcode.cn/problems/insert-into-a-binary-search-tree/description/ 思路&#xff1a;见缝插针罢辽。 class Solution {public TreeNode insertIntoBST(TreeNode root, i…...

2023年全球软件开发大会(QCon北京站2023)2月:核心内容与学习收获(附大会核心PPT下载)

本次峰会是一个汇集了最新技术趋势、最佳实践和创新思维的盛会。对于从事软件开发和相关领域的专业人士来说&#xff0c;参加这样的大会将有助于他们了解行业动态、提升技能水平、拓展职业视野&#xff0c;并与同行建立联系和合作。 本次峰会包含&#xff1a;AI基础架构、DevO…...

键盘输入4个数,从小到大排序

题目 键盘输入4个整数&#xff0c;从小到大排序 思路 代码 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h>//键盘输入4个整数&#xff0c;从小到大排序 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 什么是索引节点&#xff08;inode&#xff09;。1.2 索引节点作用1.3 inode是怎么产生的&#xff1f;1.4 inode的特点&#xff1f;1.5 Linux系统读取文件的原理1.6 企业生产案例&#xff1a;No space …...

C# Thread的使用

在C#中&#xff0c;线程用于实现程序的并发执行。通过创建和管理多个线程&#xff0c;可以同时处理不同的任务或操作&#xff0c;从而提高程序性能和响应性。以下是如何在C#中使用线程的基本步骤&#xff1a; 创建新线程 // 使用System.Threading命名空间 using System.Threa…...

ETL数据集成工具DataX、Kettle、ETLCloud特点对比

ETL数据集成工具 对于数据仓库&#xff0c;大数据集成类应用&#xff0c;通常会采用ETL工具辅助完成。ETL&#xff0c;是英文 Extract-Transform-Load 的缩写&#xff0c;用来描述将数据从来源端经过抽取(extract) 、交互转换(transform) 、加载(load)至的端的过程当前的很多应…...

OpenAI:Sora视频生成模型技术报告(中文)

概述 视频生成模型作为世界模拟器 我们探索视频数据生成模型的大规模训练。具体来说&#xff0c;我们在可变持续时间、分辨率和宽高比的视频和图像上联合训练文本条件扩散模型。我们利用transformer架构&#xff0c;在视频和图像潜在代码的时空补丁上运行。我们最大的模型Sor…...

Java基于微信小程序的乐室预约小程序,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…...

Unity 2021.3新手实战:C#脚本+物理系统+UI交互三模块协同开发

1. 这不是“又一个Unity入门教程”&#xff0c;而是我带6个实习生从零做出可玩Demo的真实复盘你点开这个标题&#xff0c;大概率是刚装完Unity&#xff0c;对着空荡荡的Scene视图发呆——新建一个Cube&#xff0c;拖进一个C#脚本&#xff0c;写了个Debug.Log("Hello"…...

机器人导航核心技术:深度感知与传感器融合的工程实践

1. 项目概述&#xff1a;从“看见”到“理解”的机器人导航革命在机器人技术领域&#xff0c;导航能力是其智能化的核心体现。传统的机器人导航&#xff0c;无论是依赖预设地图的循迹&#xff0c;还是基于简单激光雷达的避障&#xff0c;都像是蒙着眼睛在熟悉的房间里摸索——虽…...

AI Agent如何重构数据分析工作流:从数据清洗到洞察生成的7步自动化闭环(附企业级架构图)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI Agent如何重构数据分析工作流&#xff1a;从数据清洗到洞察生成的7步自动化闭环&#xff08;附企业级架构图&#xff09; 传统数据分析依赖人工串联多个工具与脚本&#xff0c;耗时长、容错低、知识…...

虚幻引擎Pak文件可视化分析工具原理与实践

1. 为什么一个Pak文件查看器值得花两周重写三遍&#xff1f;虚幻引擎项目打包后生成的.pak文件&#xff0c;对绝大多数开发者来说就是个“黑盒”——你清楚它装着所有资源&#xff1a;贴图、音频、蓝图、关卡数据&#xff0c;甚至UAsset序列化后的二进制结构&#xff1b;但你完…...

《离别的最后》的内容入口:收尾场景如何被记住

从内容传播角度看&#xff0c;《离别的最后》的入口在“最后”这个收束动作。它不是笼统告别&#xff0c;而是写到一段关系、一个阶段或一次转身即将落下尾音的时刻。这首歌不适合被写成普通伤感推荐。更准确的角度&#xff0c;是把它放在收尾场景里&#xff1a;删掉草稿、收起…...

工业级大模型学习之路021:LangChain零基础入门教程(第四篇):文档加载与文本分块技术

一、文档处理是 RAG 系统的基石1.1 为什么文档处理决定了 RAG 系统的上限&#xff1f;RAG 系统的核心逻辑是 **"检索相关文档片段 → 喂给大模型生成回答"**&#xff0c;整个流程的质量完全依赖于文档处理环节&#xff1a;如果文档解析失败&#xff0c;再好的检索和生…...

观察Taotoken按Token计费模式如何帮助项目控制预算

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 观察Taotoken按Token计费模式如何帮助项目控制预算 对于依赖大模型API进行开发的团队和个人而言&#xff0c;成本控制是一个贯穿项…...

告别报错!手把手教你用Pycharm 2023.2 + Git搞定Manim社区版安装(附国内镜像源配置)

Manim社区版极速安装指南&#xff1a;PyCharm 2023.2与Git的完美协作方案 当数学可视化遇上Python开发神器PyCharm&#xff0c;Manim社区版的安装过程却常常成为新手的第一道门槛。不同于常规教程的线性步骤&#xff0c;我们将以"问题-解决"为主线&#xff0c;直击两…...

联发科MT6833与MT6853 5G核心板:规格对比与产品选型实战指南

1. 项目概述&#xff1a;两款5G安卓核心板的定位与价值在当前的移动设备开发领域&#xff0c;尤其是面向中高端市场的智能手机、平板电脑以及各类智能终端&#xff0c;选择一颗性能强劲、功能集成度高且成本可控的核心处理器平台&#xff0c;是决定产品成败的关键。联发科&…...

Agent怎样做到在信创环境全栈兼容?2026企业级智能体信创适配技术全解析

进入2026年&#xff0c;随着信创&#xff08;信息技术应用创新&#xff09;产业进入深水区&#xff0c;企业数字化转型已不再仅仅是简单的“去IOE”或系统迁移&#xff0c;而是演变为以AI Agent&#xff08;智能体&#xff09;为核心的新型生产力重构。在这一背景下&#xff0c…...