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

【C#】.net core 6.0 使用第三方日志插件Log4net,日志输出到控制台或者文本文档

欢迎来到《小5讲堂》
大家好,我是全栈小5。
这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解,
特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。
温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!

在这里插入图片描述

目录

  • 背景
  • 插件简介
  • 插件安装
  • 配置文件
    • 日志类型
    • 文件详情
  • 日志设置
    • 命名空间
    • 实例化
    • 日志调用
  • 输出控制台
  • 输出文本文档
  • 相关文章

背景

最近在最一些并发方式的测试,发现自己之前封装的一个日志插件报错,
尽管在写日志时已经通过锁的方式进行了优化,但是依然无法解决并发时同一个文件同时访问情况,
会频繁出现报错提示xxx.txt文件正在被另一个进程访问而不无法操作。
基于这个原因,暂时没有想好很好的优化方案,从而考虑使用第三方优秀日志插件来解决并发情况。

插件简介

Log4net 是一个稳定且功能丰富的日志库,已经存在多年并且被广泛使用。
它支持多种输出目标和格式,可以满足各种日志记录需求。
Log4net 具有灵活的配置选项,允许你根据需要定制日志记录行为。

插件安装

在项目中添加对 Log4net 的引用。可以使用 NuGet 包管理器来安装 Log4net。
选择一个合适版本进行安装,博主这里选择最新版本安装。
在这里插入图片描述

配置文件

日志类型

在 log4net 中,日志类型一般分为以下几种,对应不同的日志级别:

1.DEBUG
最详细的日志级别,通常用于打印一些调试信息,仅在开发和调试阶段使用,生产环境中通常不会记录 DEBUG 级别的日志。

2.INFO
用于记录程序正常运行时的重要信息,比如服务启动、关键流程开始或结束等。对于用户而言,通常不需要关注 INFO 级别的日志,但这些日志对于开发人员来说非常重要。

3.WARN
表明潜在的问题,但不会影响系统正常运行,比如某个接口请求参数不合法,程序采取了默认值处理;或者磁盘空间不足,但系统仍然能够正常运行。WARN 级别的日志用于提示开发人员和运维人员需要注意的问题。

4.ERROR
用于记录错误事件,但不会导致程序终止。比如捕获到了一个异常,程序进行了相应的处理,不会导致程序崩溃。ERROR 级别的日志通常需要开发人员及时关注并处理。

5.FATAL
表示严重的错误事件,可能导致程序终止。比如未捕获的异常、数据库连接失败等致命错误。FATAL 级别的日志表示系统出现了严重的错误,需要立即处理。

文件详情

此配置文件内容,按日志级别创建文件,按时间年月日时来创建文件名,同一小时内超过10M文件大小则拆分文件保存。

<?xml version="1.0" encoding="utf-8" ?>
<log4net><!--定义日志级别--><root><level value="FATAL"/><level value="ERROR"/><level value="WARN"/><level value="INFO"/><level value="DEBUG"/><appender-ref ref="FATALAppender" /><appender-ref ref="ERRORAppender" /><appender-ref ref="WARNAppender" /><appender-ref ref="INFOAppender" /><appender-ref ref="DebugAppender" /></root><!--严重错误日志--><appender name="FATALAppender" type="log4net.Appender.RollingFileAppender"><file type="log4net.Util.PatternString" value="logs\Fatal\%date{yyyyMMddHH}.log" /><appendToFile value="true" /><rollingStyle value="Size" /><staticLogFileName value="false"/><maximumFileSize value="100KB"/><maxSizeRollBackups value="-1"/><lockingModel type="log4net.Appender.FileAppender+MinimalLock" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger - %message - %line" /></layout></appender><!--调试日志--><appender name="DebugAppender" type="log4net.Appender.RollingFileAppender"><file type="log4net.Util.PatternString" value="logs\Debug\%date{yyyyMMddHH}.log" /><appendToFile value="true" /><rollingStyle value="Size" /><staticLogFileName value="false"/><maximumFileSize value="100KB"/><maxSizeRollBackups value="-1"/><lockingModel type="log4net.Appender.FileAppender+MinimalLock" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger - %message - %line" /></layout></appender>
</log4net>

通过使用不同级别的日志记录,开发人员和运维人员可以更好地了解系统的运行情况,及时发现潜在问题,并采取相应的措施进行处理。

日志设置

命名空间

using log4net;
using log4net.Config;
using System.Reflection;

实例化

// 日志插件
var logRepository = LogManager.GetRepository(Assembly.GetEntryAssembly());
XmlConfigurator.Configure(logRepository, new FileInfo(Path.Combine(AppContext.BaseDirectory, "log4net.config")));

日志调用

private static readonly ILog log = LogManager.GetLogger(typeof(SqlHelper));public void Test()
{    log.Fatal("Fatal message");log.Debug("Debug message");log.Info("Info message");log.Warn("Warn message");log.Error("Error message");
}

输出控制台

根据上面默认配置文件信息,日志信息输出到控制台里。
使用的类型是log4net.Appender.ConsoleAppender

<?xml version="1.0" encoding="utf-8" ?>
<log4net><appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger - %message%line" /></layout></appender><root><level value="DEBUG" /><appender-ref ref="ConsoleAppender" /></root>
</log4net>

在这里插入图片描述

输出文本文档

根据上面默认配置文件信息,日志信息输出到文本文档里。
使用的类型是log4net.Appender.Appender.RollingFileAppender

<?xml version="1.0" encoding="utf-8" ?>
<log4net><!--定义日志级别--><root><level value="DEBUG"/><appender-ref ref="DebugAppender" /></root><!--调试日志--><appender name="DebugAppender" type="log4net.Appender.RollingFileAppender"><file type="log4net.Util.PatternString" value="logs\Debug\%date{yyyyMMddHH}.log" /><appendToFile value="true" /><rollingStyle value="Size" /><staticLogFileName value="false"/><maximumFileSize value="100KB"/><maxSizeRollBackups value="-1"/><lockingModel type="log4net.Appender.FileAppender+MinimalLock" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger - %message - %line" /></layout></appender>
</log4net>

在这里插入图片描述

相关文章

【C#】.net core 6.0 使用第三方日志插件Log4net,配置文件详细说明
【C#】使用代码实现龙年春晚扑克牌魔术(守岁共此时),代码实现篇
【C#】使用代码实现龙年春晚扑克牌魔术(守岁共此时),流程描述篇
【C#】约瑟夫原理举例2个代码实现
【C#】List泛型数据集如何循环移动,最后一位移动到第一位,以此类推
【C#】获取文本中的链接,通过正则表达式的方法获取以及优化兼容多种格式

温故而知新,不同阶段重温知识点,会有不一样的认识和理解,博主将巩固一遍知识点,并以实践方式和大家分享,若能有所帮助和收获,这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。

相关文章:

【C#】.net core 6.0 使用第三方日志插件Log4net,日志输出到控制台或者文本文档

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌握。…...

TSINGSEE青犀煤矿矿井视频监控与汇聚融合管理视频监管平台建设方案

一、背景需求 随着我国经济的飞速发展&#xff0c;煤炭作为我国的主要能源之一&#xff0c;其开采和利用的重要性不言而喻。然而&#xff0c;煤矿事故频发&#xff0c;不仅造成了巨大的人员伤亡和财产损失&#xff0c;也对社会产生了深远的负面影响。视频监控系统作为实现煤矿智…...

C语言 - 各种自定义数据类型

1.结构体 把不同类型的数据组合成一个整体 所占内存长度是各成员所占内存的总和 typedef struct XXX { int a; char b; }txxx; txxx data; typedef struct XXX { int a:1; int b:1; …...

第四弹:Flutter图形渲染性能

目标&#xff1a; 1&#xff09;Flutter图形渲染性能能够媲美原生&#xff1f; 2&#xff09;Flutter性能优于React Native? 一、Flutter图形渲染原理 1.1 Flutter图形渲染原理 Flutter直接调用Skia 1&#xff09;Flutter将一帧录制成SkPicture&#xff08;skp&#xff…...

基础算法(三)#蓝桥杯

文章目录 11、构造11.1、小浩的ABC11.2、小新的质数序列挑战11.3、小蓝找答案11.4、小蓝的无限集 12、高精度12.1、阶乘数码(高精度*单精度) 11、构造 11.1、小浩的ABC #include<bits/stdc.h> using namespace std; #define IOS ios::sync_with_stdio(false);cin.tie(n…...

人工智能在增强数据安全方面的作用

近年来&#xff0c;人工智能&#xff08;AI&#xff09;的力量已被证明是无与伦比的。它不再是我们想象的主题。人工智能已经成为现实&#xff0c;并且越来越清楚地表明它可以让世界变得更美好。但人工智能能帮助我们增强数据安全吗&#xff1f; 由于技术的日益普及&#xff0…...

python】jupyter notebook导出pdf和pdf不显示中文问题

安装nbconvert 首先安装nbconvert才能将.ipynb文件转化为pdf、latex、html等。 conda install nbconvert安装Pandoc Pandoc官网下载地址: https://pandoc.org/installing.html 下载安装包github地址:https://github.com/jgm/pandoc/releases/tag/3.1.6.2 安装MiKTex 下载…...

通过SDKMAN安装各种版本JDK

文章目录 1. 安装SDKMAN管理器2. 通过SDK管理器安装JDK3. 参考链接 1. 安装SDKMAN管理器 安装SDKMAN的脚本为: # 1.1 安装: 如果没有权限可以考虑sudo用户执行; curl -s "https://get.sdkman.io" | bash# 1.2 安装完成后查看版本号 sdk version# 1.3 查看帮助信息 …...

软考高级:软件架构风格概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…...

Vue3响应式编程

Vue 3 的响应式系统是其核心特性之一&#xff0c;它允许开发者创建响应式的数据绑定和组件状态管理。在 Vue 3 中&#xff0c;响应式系统得到了显著的改进&#xff0c;提供了更好的性能和更灵活的使用方式。 1. 响应式原理 Vue 3 使用了 Proxy 对象来实现响应式系统&#xff…...

决策树算法优化(一篇文章 理解)

目录 引言 一、决策树的基本概念 二、决策树的构建过程 1 特征选择 2 决策树生成 3 决策树剪枝 三、决策树算法的缺点 1 过拟合问题 2 对噪声敏感 3 缺乏连续变量的处理 4 倾向于选择具有较多类别的特征 四、优化策略 1 集成学习 2 连续变量处理 3 特征选择优化 …...

【C语言步行梯】自定义函数、函数递归详谈

&#x1f3af;每日努力一点点&#xff0c;技术进步看得见 &#x1f3e0;专栏介绍&#xff1a;【C语言步行梯】专栏用于介绍C语言相关内容&#xff0c;每篇文章将通过图片代码片段网络相关题目的方式编写&#xff0c;欢迎订阅~~ 文章目录 什么是函数库函数自定义函数函数执行示例…...

小米汽车上市进入倒计时,已开启内部试驾

在十四届全国人大二次会议上&#xff0c;全国人大代表、小米集团创始人、董事长CEO雷军回应了小米汽车的最新消息&#xff0c;小米汽车预计很快就要正式上市。 小米汽车推出了两款车型&#xff1a;SU7和SU7 Max。这两款车型均为纯电轿车&#xff0c;带来了不同的配置和性能特点…...

React render方法的原理?在什么时候会被触发?

一、原理 首先&#xff0c;render函数在react中有两种形式&#xff1a; 在类组件中&#xff0c;指的是render方法&#xff1a; class Foo extends React.Component {render() {return <div> Foo </div>;} } 在函数组件中&#xff0c;指的是函数组件本身&#x…...

打卡学习kubernetes——了解kubernetes组成及架构

目录 1 什么是kubernetes 2 kubernetes组件 3 kubernetes架构 1 什么是kubernetes kubernetes是一个旨在自动部署、扩展和运行应用容器的开源平台。目标是构建一个生态系统&#xff0c;提供组件和工具以减轻在公共和私有云中运行应用程序的负担。 kubernetes是&#xff1a…...

python(ogr)处理geojson为本地shp文件

前言 本次所利用的geojson数据来自https://geo.datav.aliyun.com/areas_v3/bound/410000_full.json &#xff0c;如果觉得下方代码看起来不方便&#xff0c;可以来GitHub上来看&#xff0c;在这上面还有一些辅助内容便于理解 GISpjd/GIS-union-Python (github.com)https://gi…...

Docker容器化技术(使用Dockerfile制作镜像)

Docker中的镜像分层 Docker 支持通过扩展现有镜像&#xff0c;创建新的镜像。实际上&#xff0c;Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的。 1、Docker 镜像为什么分层 镜像分层最大的一个好处就是共享资源。 比如说有多个镜像都从相…...

C++ struct 结构体类型

在处理大批量数据时&#xff0c;一般会使用数组来实现&#xff0c;数组中各元素都属于同一数据类型。但在实际问题中&#xff0c;要处理的一组数据往往具有不同的数据类型。如一个学生的个人信息有学号&#xff08;num&#xff09;、姓名&#xff08;name&#xff09;、性别&am…...

什么是VR虚拟现实体验店|VR主题馆加盟|元宇宙文化旅游

VR虚拟现实体验店是一种提供虚拟现实技术体验的场所。在这样的店铺里&#xff0c;顾客可以通过专业的设备和技术&#xff0c;体验虚拟现实技术带来的沉浸式感觉。 通常&#xff0c;这些商店提供一系列VR体验&#xff0c;包括互动游戏、沉浸式模拟、虚拟旅游和其他VR内容。客户可…...

【智能家居入门1之环境信息监测】(STM32、ONENET云平台、微信小程序、HTTP协议)

作为入门本篇只实现微信小程序接收下位机上传的数据&#xff0c;之后会持续发布如下项目&#xff1a;①可以实现微信小程序控制下位机动作&#xff0c;真正意义上的智能家居&#xff1b;②将网络通讯协议换成MQTT协议再实现上述功能&#xff0c;此时的服务器也不再是ONENET&…...

android studio panda3 配置镜像链接失败,求教

安装了android studio panda3 配置镜像如下&#xff1a;buildscript {repositories {maven { url https://maven.aliyun.com/nexus/content/groups/public/ }maven { url https://maven.aliyun.com/repository/public/ }maven { url https://maven.aliyun.com/repository/googl…...

农旅电商运营必备:初级认证考试中的5大高频考点与避坑指南

农旅电商运营必备&#xff1a;初级认证考试中的5大高频考点与避坑指南 农旅电商作为乡村振兴战略下的新兴业态&#xff0c;正在经历从粗放式增长到精细化运营的关键转型期。对于准备参加初级认证考试的从业者而言&#xff0c;系统掌握核心运营逻辑远比死记硬背更重要。根据近三…...

仅限首批200家技术中台团队获取:Python MCP企业级模板V3.2(含华为MetaEngine兼容补丁+信创OS适配矩阵表)

第一章&#xff1a;Python MCP企业级模板V3.2的核心定位与战略价值 Python MCP&#xff08;Modular Component Protocol&#xff09;企业级模板V3.2并非通用脚手架&#xff0c;而是面向中大型组织构建高一致性、强可审计、低运维熵值服务架构的标准化交付内核。其核心定位在于弥…...

基于混沌麻雀搜索算法的无人机航迹规划方法:CSSA策略实现与性能分析

麻雀搜索算法&#xff08;SSA&#xff09;文章复现:《基于混沌麻雀搜索算法的无人机航迹规划方法_汤安迪》策略为:立方混沌反向学习初始化种群反向精英策略改进发现者策略正余弦算法改进加入者策略动态调整警觉者数量高斯策略扰动——CSSA。复现内容包括:改进算法实现、23个基准…...

BFS算法

题目解题思路代码#include <iostream> #include <queue> #include <cstring> using namespace std;typedef pair<int,int> PII; const int N410; int n,m,x,y; int dist[N][N];// 骑士8个移动方向 int dx[]{1,2,2,1,-1,-2,-2,-1}; int dy[]{2,1,-1…...

在Discord上实时展示你的网易云音乐和QQ音乐播放状态

在Discord上实时展示你的网易云音乐和QQ音乐播放状态 【免费下载链接】NetEase-Cloud-Music-DiscordRPC 在Discord上显示网抑云/QQ音乐. Enables Discord Rich Presence For Netease Cloud Music/Tencent QQ Music. 项目地址: https://gitcode.com/gh_mirrors/ne/NetEase-Cl…...

Simulink电气系统建模遇阻?一文详解powergui模块缺失报错与修复

1. 为什么你的Simulink电气模型总是报错&#xff1f; 最近在技术论坛上看到不少电气工程师吐槽&#xff1a;"明明是按照教程搭建的Simscape电机模型&#xff0c;一运行就弹出红色报错框&#xff0c;说什么必须包含powergui模块..." 这让我想起自己刚接触Simulink电气…...

SEO查询优化如何优化网站内链_SEO查询优化如何优化网页标题和描述

SEO查询优化如何优化网站内链 在当今竞争激烈的互联网环境中&#xff0c;如何提升网站的搜索引擎排名成为每一个网站运营者的首要任务。SEO查询优化不仅仅涉及到外链和关键词&#xff0c;网站内部的链接结构同样起到重要的作用。本文将深入探讨如何通过优化网站内链来提升网站…...

GHelper:华硕笔记本的轻量级控制中心 - 简单高效的硬件管理方案

GHelper&#xff1a;华硕笔记本的轻量级控制中心 - 简单高效的硬件管理方案 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, …...

DA14531 实战指南(一)从调试到量产:OTP与Flash的权衡艺术

1. 初识DA14531的存储双刃剑 第一次拿到DA14531开发板时&#xff0c;最让我纠结的就是这个32KB的OTP存储器。就像给你一支只能写一次的钢笔&#xff0c;虽然墨水充足&#xff08;32KB对BLE应用绰绰有余&#xff09;&#xff0c;但每次落笔都要反复斟酌。实际开发中我发现&#…...