Backend - C# 的日志Lognet4

目录

一、安装 log4net 插件

(一)作用

(二)操作

(三)注意

二、配置

(一)配置AssemblyInfo.cs

 (二)配置log4net.config

1. 创建log4net.config文件(和program.cs同层级)

2. 设置文件属性

3. 其中,文件内容:

三、使用

(一)封装一个类,方便管理

(二)调用

(三)等级Level

四、其他:简单日志

(一)定义日志

(二)调用


一、安装 log4net 插件

(一)作用

        log4net是方便记录日志的驱动插件。

(二)操作

        点击工具栏的“工具” > NuGet套件管理员 > 套件管理器主控台。

        打开控制台后,输入安装命令: 

Install-Package log4net

        安装成功后会提示:

(三)注意

        不同解决方案在使用log4net,都需要各自安装一次。

        查看或勾选安装:点击工具栏的“工具” > NuGet套件管理员 > 管理方案的NuGet套件 > 搜寻插件名 > 查看某项目是否安装。

二、配置

(一)配置AssemblyInfo.cs

<!--添加log4net.dll的参数-->
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "web.config", Watch = true)]

如图所示:

 (二)配置log4net.config

1. 创建log4net.config文件(和program.cs同层级)。

2. 设置文件属性

        右击log4net.config文件 > 属性 > 将“复制到输出目录”设置为“一律复制” 。

3. 其中,文件内容:

<?xml version="1.0" encoding="utf-8" ?>
<configuration><configSections><section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" /></configSections><log4net><!--错误日志类--><logger name="logerror"><!--日志类名字--><level value="ERROR" /><!--日志级别--><appender-ref ref="ErrorAppender" /></logger><logger name="loginfo"><level value="INFO" /><appender-ref ref="InfoAppender" /></logger><!--错误日志附加介质--><appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender"><!--name是名称,type是指定介质类型--><!--路径在exe程序的相对目录下--><param name="File" value="Logs//LogError//" /><!--是否追加到文件(true:不会覆盖之前的信息)--><param name="AppendToFile" value="true" /><!--是否只写到一个文件中--><param name="StaticLogFileName" value="false" /><!--按日期产生文件名--><param name="DatePattern" value='"Errorlog_"yyyyMMdd".txt"'/><!-- 按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite]) --><param name="RollingStyle" value=" Composite " /><!-- 当个日志文件的大小。只在文件大小和混合方式方式下使用, 超出大小后在所有文件名后自动增加正整数重新命名 --><param name="maximumFileSize" value="10MB" /><!--最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数--><param name="MaxSizeRollBackups" value="8" /><!--记录的格式--><layout type="log4net.Layout.PatternLayout"><param name="ConversionPattern" value="%n【Time】:%d [%t]     %n【Level】:%-5p     %n【ClassType】:%c [%x]     %n【Message】:%m%n     %n" /></layout></appender><!--普通信息日志附加介质--><appender name="InfoAppender" type="log4net.Appender.RollingFileAppender"><param name="File" value="Logs//LogInfo//" /><param name="AppendToFile" value="true" /><param name="StaticLogFileName" value="false" /><param name="DatePattern" value='"Infolog_"yyyyMMdd".txt"' /><param name="RollingStyle" value="Composite" /><param name="maximumFileSize" value="10MB" /><param name="MaxSizeRollBackups" value="8" /><layout type="log4net.Layout.PatternLayout"><param name="ConversionPattern" value="%n【Time】:%d [%t]     %n【Level】:%-5p     %n【ClassType】:%c [%x]     %n【Message】:%m%n     %n" /></layout></appender></log4net><startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" /></startup>
</configuration>

其中,红色圈的内容一定要放在configuration里靠前的位置。

三、使用

(一)封装一个类,方便管理

// Logging.cs 文件
using log4net; // 导入
namespace LogSpace
{class LogCls{public static readonly ILog Logerror = LogManager.GetLogger("logerror"); // 初始化public static readonly ILog Loginfo = LogManager.GetLogger("loginfo");public static void ErrorLog(string msg){if (Logerror.IsErrorEnabled) // 调用{Logerror.Error(msg);}}public static void InfoLog(string msg){if (Loginfo.IsInfoEnabled){Loginfo.Info(msg);}}}
}

(二)调用

using LogSpace;
namespace StartExeSpace
{class StartExe{static void Main(){LogCls.ErrorLog("this is an error content"); // 该方法用了static,其所属类不用实例化LogCls.InfoLog("this is an info content");Console.ReadKey();}}
}

(三)等级Level

由高到低:None > Fatal > ERROR > WARN > DEBUG > INFO > All

理解:若等级是ERROR,则就算调用了log4net的info方法,也不会写入到日志文件中。

四、其他:简单日志

以下是不需要插件,生成简单日志的例子

(一)定义日志

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace LogSpace
{class LogCls{public void WriteLog(string msg){//创建日志文件夹string logPath = Directory.GetCurrentDirectory() + "\\logs";if (!Directory.Exists(logPath)){Directory.CreateDirectory(logPath);}//创建日志文件string fname = $"{logPath}\\log_{DateTime.Now.ToString("yyyyMMdd")}.txt";FileInfo finfo = new FileInfo(fname);if (!finfo.Exists){FileStream fs;fs = File.Create(fname);fs.Close();finfo = new FileInfo(fname);}//文件超过10MB则重命名if (finfo.Length < 1024 * 1024 * 10){File.Move($"{logPath}\\log_{DateTime.Now.ToString("yyyyMMdd")}.txt", $"{logPath}\\log_{DateTime.Now.ToString("yyyyMMddHHmmssffff")}.txt");}//记录日志using (FileStream fs = finfo.OpenWrite()){//根据上面创建的文件流,创建写数据流StreamWriter w = new StreamWriter(fs);//设置写数据流的起始位置,为文件流的末尾w.BaseStream.Seek(0, SeekOrigin.End);//写入日志内容w.WriteLine($"Starting Logging【{DateTime.Now}】");w.WriteLine($"{msg}\n");w.WriteLine("------------------------------------\n");//清空缓冲区w.Flush();//关闭写数据流w.Close();}}}
}

(二)调用

static void Main()
{LogCls logcls = new LogCls();logcls.WriteLog("this is a content");Console.ReadKey();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/870263.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

空间自回归模型及 Stata 具体操作步骤

目录 一、理论原理 二、数据准备 三、程序代码及解释 四、代码运行结果 一、理论原理 空间自回归模型&#xff08;Spatial Autoregressive Model&#xff0c;SAR&#xff09;是一种用于分析具有空间相关性的数据的统计模型。它假设观测值之间的相关性不仅取决于传统的时间或…

xxl-job从2.3.0升级到2.4.1版本遇到的问题及解决方法

一、maven升级版本 <!-- xxl-job包 --> <dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.4.1</version> </dependency> 二、在nacos对应服务的配置文件增加accessToken配…

精益创业方法论在创业实践中的应用:以乔布斯视角探索创新与变革的艺术——张驰咨询

史蒂夫乔布斯以其非凡的愿景、不懈的迭代精神与对产品极致的追求&#xff0c;成为无数创业者心中的灯塔。本文将借鉴乔布斯的创新思维与精益创业方法论相结合&#xff0c;构建一套融合理论与实践的深度框架&#xff0c;旨在指导创业者在不确定的市场环境中高效探索、快速验证并…

用C# 代码调整16位整数大小端的4种方法

四种方法: short BLC(short s) {byte high (byte)((s - s % 256) / 256); //数字减去 低8位, 得到的数字再除以256得到高8位byte low (byte)(s % 256); //数字对256取余数, 得到低8位byte[] change1 { high, low };return BitConverter.ToInt16(change1); }short BLC2(sh…

使用ffmpeg将一个目录下的mkv格式的视频文件转换成mp4格式

最近学剪辑&#xff0c;从BT种子下载的素材资源都是mkv格式的&#xff0c;不能直接导入到视频剪辑软件中。这种情况下需要用一些格式转换工具进行转换&#xff0c;也可以使用ffmpeg进行编辑。 ffmpeg是一个命令行工具&#xff0c;用来对本地的音频视频软件进行编辑。ffmpeg我也…

【动态规划】回文串问题

一、经验总结 对于回文串问题&#xff0c;传统的以i位置为结尾的状态表示已经不能满足要求&#xff0c;无法推导状态转移方程。应该创建一个二维dp表&#xff0c;将所有子串[i, j]的状态表示出来二维dp表的初始化和填表顺序略微复杂&#xff0c;有时需要借助网格图像分析 二、…

Web安全:SQL注入

一、SQL注入三要素 1、用户可以对输入的参数值进行修改。 2、后端不对用户输入的参数值进行严格过滤。 3、用户修改后的参数值可以被带入后端中成功执行&#xff0c;并返回一定结果。 二、SQL注入原理 简单来说&#xff0c;用户输入的值会被插入到SQL语句中&#xff0c;然后…

秋招突击——7/10——复习{}——新作{在排序数组中查找元素的第一个最后一个位置、搜索旋转排序数组}

文章目录 引言复习新作在排序数组中查找元素的第一个和最后一个位置个人实现参考实现 搜索旋转排序数组个人实现参考实现 总结 引言 复习 新作 在排序数组中查找元素的第一个和最后一个位置 题目链接 注意 非递减序列》元素是递增或者相等&#xff0c;并不是严格递增的找到…

什么软件可以AI生成PPT?交给这5款AI PPT工具就完事

话说在当下快节奏的工作中&#xff0c;PPT制作几乎已经成为不可或缺的一部分~每天不是在做PPT的路上&#xff0c;就是在改PPT的途中。 好在幸运的是&#xff0c;现在可有不少好用的AI PPT制作工具能够来帮助我们轻松应对这一难题&#xff01;今天就来给大家分享5款实在又百搭的…

Autosar网络管理:发出第一帧网络管理报文的方法

Autosar网络管理:发出第一帧网络管理报文的方法 1. 为什么要第一帧发出网络管理报文 很多OEM要求CAN网络管理第一帧发出的是网络管理报文,目的是为了快速唤醒CAN网络 2. 节点外发第一帧报文不是网络管理报文的原因 首先根据AUTOSAR CANNM规范要求,节点要能够发出网络管理…

TCP协议双向网络通讯---Python实现

本篇文章是博主在人工智能、网络通讯等领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅解。文章分类在Python…

捷配笔记-PCB阻焊颜色对产品有什么影响?

阻焊层也称为阻焊层或阻焊剂。它是一种薄的聚合物层&#xff0c;应用于&#xff08;PCB&#xff09;。阻焊层的目的是保护PCB表面&#xff0c;并有助于防止焊桥。焊桥是两个导体之间的无意连接&#xff0c;通常是由于存在一小块焊料。需要注意的是&#xff0c;阻焊层被视为其单…

electron实现右键菜单保存图片功能

1.创建窗口&#xff0c;加载页面&#xff0c;代码如下&#xff1a; //打开窗口const {ipcMain, BrowserWindow} require("electron") const saveImage require("../ipcMain/saveImage") let win null; ipcMain.handle(on-open-event, (event, args) &g…

数字信号处理及MATLAB仿真(5)——z变换

采样的其他概念咱们后面再慢慢的讲述吧&#xff0c;先把z变换的程序给大家展示一下&#xff0c;总的来说呢&#xff0c;就用一个函数——ztran就行了。在 MATLAB 中&#xff0c;可以使用 ztrans 函数来进行 Z 变换。ztrans 函数用于对离散时间信号或系统进行 Z 变换&#xff0c…

mysql中select语句的执行顺序

执行顺序是什么&#xff1f; Form 这一阶段读取表的数据&#xff0c;并准备执行后续的操作。如果有多表连接&#xff0c;这一步也会涉及连接操作&#xff08;INNER JOIN、LEFT JOIN、RIGHT JOIN、CROSS JOIN 等&#xff09;。 ON 在进行表连接时&#xff0c;使用 ON 关键字指…

C++入门 模仿mysql控制台输出表格

一、 说明 控制台输出表格&#xff0c;自适应宽度 二、 源码 #include <iostream> #include <map> #include <string> #include <vector>using namespace std;void printTable(vector<vector<string>> *pTableData) {int row pTableDa…

VS2022 git拉取/推送代码错误

第一步&#xff1a;打开VS2022 第二步&#xff1a;工具->选项->源代码管理->Git 全局设置 第三步&#xff1a;加密网络提供程序设置为&#xff1a;OpenSSL 完结&#xff1a;

基于java+springboot+vue实现的大学城水电管理系统(文末源码+Lw)106

基于SpringBootVue的实现的大学城水电管理系统&#xff08;源码数据库万字Lun文流程图ER图结构图演示视频软件包&#xff09; 系统功能&#xff1a; 本大学城水电管理系统 管理员功能有个人中心&#xff0c;用户管理&#xff0c;领用设备管理&#xff0c;消耗设备管理&#x…

AV1编码标准中块分区技术详细说明

libaom 开放媒体联盟视频1&#xff08;AV1&#xff09;编解码器的框架基于一种混合视频编码结构&#xff0c;由几个主要的功能模块组成&#xff0c;如预测、变换、量化、熵编码和环路滤波。每个功能模块使用特定类型的视频编码技术处理输入数据&#xff0c;其输出被送入另一个功…

科研绘图系列:R语言金字塔图(pyramid plot)

介绍 金字塔图(Pyramid chart)是一种用于展示人口统计数据的图表,特别是用于展示不同年龄段的人口数量。这种图表通常用于展示人口结构,比如性别和年龄的分布。 特点: 年龄分层:金字塔图按年龄分层,每一层代表一个年龄组。性别区分:通常,男性和女性的数据会被分别展…