Backend - C# 的日志Lognet4

ops/2024/9/20 9:20:04/ 标签: c#, log4net, 日志

目录

log4net%20%E6%8F%92%E4%BB%B6-toc" style="margin-left:0px;">一、安装 log4net 插件

(一)作用

(二)操作

(三)注意

二、配置

(一)配置AssemblyInfo.cs

log4net.config-toc" style="margin-left:40px;"> (二)配置log4net.config

log4net.config%E6%96%87%E4%BB%B6%EF%BC%88%E5%92%8Cprogram.cs%E5%90%8C%E5%B1%82%E7%BA%A7%EF%BC%89%E3%80%82-toc" style="margin-left:80px;">1. 创建log4net.config文件(和program.cs同层级)

2. 设置文件属性

3. 其中,文件内容:

三、使用

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

(二)调用

(三)等级Level

四、其他:简单日志

(一)定义日志

(二)调用


log4net%20%E6%8F%92%E4%BB%B6" style="margin-left:0px;">一、安装 log4net 插件

(一)作用

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

(二)操作

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

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

Install-Package log4net

        安装成功后会提示:

(三)注意

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

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

二、配置

(一)配置AssemblyInfo.cs

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

如图所示:

log4net.config" style="margin-left:0px;"> (二)配置log4net.config

log4net.config%E6%96%87%E4%BB%B6%EF%BC%88%E5%92%8Cprogram.cs%E5%90%8C%E5%B1%82%E7%BA%A7%EF%BC%89%E3%80%82" style="margin-left:0px;">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.ppmy.cn/ops/56476.html

相关文章

【计算机网络03】不花钱怎么搭建一个网络实验室

使用GNS3和虚拟机搭建网络实验室 1、安装抓包工具分析数据包2、定义和使用抓包筛选器3、安装和配置GNS34、配置路由器和VPCS5、使用WireShark捕获GNS3网络数据包6、VMware创建虚拟机7、使用思科PacketTracer 1、安装抓包工具分析数据包 官网安装wireshark&#xff1a;https://…

Postman工具基本使用

一、安装及基本使用 安装及基本使用参见外网文档&#xff1a;全网最全的 postman 工具使用教程_postman使用-CSDN博客 建议版本&#xff1a;11以下&#xff0c;比如10.x.x版本。11版本以后貌似是必须登录使用 二、禁止更新 彻底禁止postman更新 - 简书 host增加&#xff1…

Puppeteer 是什么以及如何在网络抓取中使用它 | 2024 完整指南

网页抓取已经成为任何处理网页数据提取的人都必须掌握的一项重要技能。无论你是开发者、数据科学家还是希望从网站收集信息的爱好者&#xff0c;Puppeteer都是你可以使用的最强大工具之一。本完整指南将深入探讨什么是Puppeteer以及如何有效地在网页抓取中使用它。 Puppeteer简…

Python面试题:编写一个 Python 脚本来读取 Excel 文件

要在 Python 中读取 Excel 文件&#xff0c;可以使用 pandas 库&#xff0c;这个库提供了强大的数据处理和分析功能&#xff0c;并且支持读取 Excel 文件。你还需要 openpyxl 库来支持读取 .xlsx 格式的 Excel 文件。以下是如何编写一个脚本来读取 Excel 文件的示例&#xff1a…

Python-PLAXIS自动化建模技术与典型岩土工程

原文链接&#xff1a;Python-PLAXIS自动化建模技术与典型岩土工程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247608744&idx3&sn41d9fd9ab6e792850000c4990b3f8c65&chksmfa82684fcdf5e15990e4681f032ce9b295a9e2071051218f550a7e63e4ebedee29559d56…

ESP32网络开发:1.创建一个基于TCP网络协议的网站

一、TCP协议的介绍 TCP&#xff08;传输控制协议&#xff0c;Transmission Control Protocol&#xff09;是互联网协议套件中的一种核心协议&#xff0c;主要用于在网络中的计算机之间可靠地传输数据。TCP协议位于OSI模型&#xff08;开放系统互联模型&#xff09;的传输层&…

开源可视化Flutter图表库:Graphic

Graphic&#xff1a;用Graphic绘制数据的无限可能- 精选真开源&#xff0c;释放新价值。 概览 Graphic&#xff0c;这个基于Flutter的图表库&#xff0c;以其源自《The Grammar of Graphics》的灵感&#xff0c;为数据可视化提供了一种全新的方法。它不仅仅是一个工具&#xf…

在conda的环境中安装Jupyter及其他软件包

Pytorch版本、安装和检验 大多数软件包都是随Anaconda安装的&#xff0c;也可以根据需要手动安装一些其他软件包。 目录 创建虚拟环境 进入虚拟环境 安装Jupyter notebook 安装matplotlib 安装 pandas 创建虚拟环境 基于conda包的环境创建、激活、管理与删除http://t.cs…

jar 生成的jar包去掉-plain后缀

问题&#xff1a; 使用gradle8.6版本的&#xff0c; jar {enabled(true)manifestContentCharset utf-8metadataCharset utf-8exclude(**/**Application.class, **/application**,**/bootstrap**) } 生成的jar&#xff1a; staff-core-1.2.2-SNAPSHOT-plain.jar 多了-p…

神经网络和算力共享结合:基于深度学习的算力资源智能分配机制;一种支持跨云、跨边缘计算平台的协同训练框架(联邦学习);模型自适应优化策略

目录 神经网络和算力共享结合 论文标题 摘要 引言 理论基础 技术实现 创新点 实验验证 结论与展望 基于深度学习的算力资源智能分配机制 一、机制概述 二、关键技术 三、应用场景 四、优势与挑战 优势 挑战 五、未来展望 一种支持跨云、跨边缘计算平台的协同…

[ACM独立出版]2024年虚拟现实、图像和信号处理国际学术会议(ICVISP 2024)

最新消息ICVISP 2024-已通过ACM出版申请投稿免费参会&#xff0c;口头汇报或海报展示(可获得相应证明证书) ————————————————————————————————————————— [ACM独立出版]2024年虚拟现实、图像和信号处理国际学术会议&#xff08;ICVI…

Drools开源业务规则引擎(六)- Drools Flow中RuleFlow文件即*.rf文件介绍

文章目录 Drools开源业务规则引擎&#xff08;六&#xff09;- RuleFlow文件即*.rf文件介绍1.\<header>1.1.\<imports>a.标签格式b.属性说明c.示例代码 1.2.\<globals>a.标签格式b.属性说明c.示例代码 1.3.\<functionImports>a.标签格式b.属性说明c.示…

Python | Leetcode Python题解之第225题用队列实现栈

题目&#xff1a; 题解&#xff1a; class MyStack:def __init__(self):"""Initialize your data structure here."""self.queue collections.deque()def push(self, x: int) -> None:"""Push element x onto stack."&…

LabVIEW电容器充放电监测系统

概述 为了对车用超级电容器的特性进行研究&#xff0c;确保其在工作时稳定可靠并有效发挥性能优势&#xff0c;设计了一套车用超级电容器充放电监测系统。该系统通过利用传感器、USB数据采集卡、可调直流稳压电源、电子负载以及信号调理电路&#xff0c;完成对各信号的采集和超…

柯桥小语种学校成人生活口语学习|西班牙语中H为什么不发音…

01 H en el alfabeto espaol 西语字母表中的h 字母H是唯一一个在标准西班牙语中不再代表任何音素的字母。尽管在它单独出现时被叫做HACHE&#xff0c;但在大多数单词拼写中&#xff0c;它只是一个没有声音对应关系的字母&#xff0c;因此RAE称其为“无声的H”&#xff08;hac…

【Python】基础语法体系:两种常用语句

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️Python】 文章目录 前言条件语句动态实例if语句if-else 语句if-elif-else 语句嵌套条件语句 循环语句for循环while循环 动态实例嵌套循环 前言 Python语句是构成Python程序的基本单元&#xff0c;用…

设置DepthBufferBits和设置DepthStencilFormat的区别

1&#xff09;设置DepthBufferBits和设置DepthStencilFormat的区别 2&#xff09;Unity打包exe后&#xff0c;游戏内拉不起Steam的内购 3&#xff09;Unity 2022以上Profiler.FlushMemoryCounters耗时要怎么关掉 4&#xff09;用GoodSky资产包如何实现昼夜播发不同音乐功能 这是…

flask-apscheduler 定时任务被执行两次

定时任务没有被多次调用&#xff0c;事实上如果多次调用的话&#xff0c;flask-apscheduler会抛出异常。 但一开始任务还是按时执行一次&#xff0c;重启flask或者修改部分代码后&#xff0c;就发送定时任务一次执行两次了。 之所以会发生这种情况&#xff0c;是因为在debug模…

智能制造热点词汇科普篇——工业微服务

随着互联网技术的不断发展&#xff0c;近十年来&#xff0c;微服务也逐渐走进人们的视线中来。何为微服务&#xff1f;让我们先来看看百度百科上的定义&#xff1a;微服务&#xff08;或称微服务架构&#xff09;是一种云原生架构方法&#xff0c;在单个应用中包含众多松散耦合…

音频demo:将左右声道PCM数据合并

1、README a. 编译 $ make # or make CCyour-corosscompile-gccb. 使用 合并两个声道成为双声道&#xff0c;例如&#xff1a; $ ./pcm_channel_merge ./audio/test_22050_16_1-l.pcm ./audio/test_22050_16_1-r.pcm out_44100_16_2.pcm $ ./pcm_channel_merge ./audio/te…