C#控制台程序中使用log4.net来输出日志

c#使用log4net日志 1.在Nuget中下载log4net 2.增加App.config文件 具体的配置可以查看资料,: <level value="ALL"/>,这个ALL就是记录所有的日志信息 <file value="./RedLog.txt"/>,这个是路径,目前就是在debug下面 <?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <sup. 阅读详情

Apache log4net 库是一个帮助程序员将日志语句输出到各种输出目标的工具。log4net 是优秀的 Apache log4j™ 框架到 Microsoft® .NE​​T 运行时的端口。

我喜欢他可以自定义输出,区分等级等特点。

导入库

我们在工程里添加NuGet的包。输入名称log4net ,导入包。
在这里插入图片描述

创建配置文件

然后我们在项目根创建一个配置文件log4net.config

<?xml version="1.0" encoding="utf-8"?>
<log4net>
	<!-- 将日志以回滚文件的形式写到文件中 -->
	<!-- 按日期切分日志文件,并将日期作为日志文件的名字 -->
	<!--Error-->
	<appender name="ErrorLog" type="log4net.Appender.RollingFileAppender">
		<!--不加utf-8编码格式,中文字符将显示成乱码-->
		<param name="Encoding" value="utf-8" />
		<file value="Log/"/>
		<appendToFile value="true" />
		<rollingStyle value="Date" />
		<!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
		<datePattern value="&quot;ErrorLogs_&quot;yyyyMMdd&quot;.log&quot;" />
		<!--日志文件名是否为静态-->
		<StaticLogFileName value="false"/>
		<!--多线程时采用最小锁定-->
		<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
		<!--布局(向用户显示最后经过格式化的输出信息)-->
		<layout type="log4net.Layout.PatternLayout">
			<conversionPattern value="%date| %-5level %newline%message%newline--------------------------------%newline" />
		</layout>
		<filter type="log4net.Filter.LevelRangeFilter">
			<levelMin value="WARN" />
			<levelMax value="FATAL" />
		</filter>
	</appender>
	<!--Error-->



	<!--Info-->
	<appender name="InfoLog" type="log4net.Appender.RollingFileAppender">
		<!--不加utf-8编码格式,中文字符将显示成乱码-->
		<param name="Encoding" value="utf-8" />
		<!--定义文件存放位置-->
		<file value="Log/"/>
		<appendToFile value="true" />
		<rollingStyle value="Date" />
		<!--日志文件名是否为静态-->
		<StaticLogFileName value="false"/>
		<!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
		<datePattern value="&quot;InfoLogs_&quot;yyyyMMdd&quot;.log&quot;" />
		<!--多线程时采用最小锁定-->
		<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
		<!--布局(向用户显示最后经过格式化的输出信息)-->
		<layout type="log4net.Layout.PatternLayout">
			<conversionPattern value="%date| %-5level%c %newline%message%newline--------------------------------%newline" />
		</layout>
		<filter type="log4net.Filter.LevelRangeFilter">
			<levelMin value="INFO" />
			<levelMax value="INFO" />
		</filter>
	</appender>
	<!--Info-->

	<!--Info-->
	<appender name="DebugLog" type="log4net.Appender.RollingFileAppender">
		<!--不加utf-8编码格式,中文字符将显示成乱码-->
		<param name="Encoding" value="utf-8" />
		<!--定义文件存放位置-->
		<file value="Log/"/>
		<appendToFile value="true" />
		<rollingStyle value="Date" />
		<!--日志文件名是否为静态-->
		<StaticLogFileName value="false"/>
		<!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
		<datePattern value="&quot;DebugLogs_&quot;yyyyMMdd&quot;.log&quot;" />
		<!--多线程时采用最小锁定-->
		<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
		<!--布局(向用户显示最后经过格式化的输出信息)-->
		<layout type="log4net.Layout.PatternLayout">
			<conversionPattern value="%date| %-5level%c %newline%message%newline--------------------------------%newline" />
		</layout>
		<filter type="log4net.Filter.LevelRangeFilter">
			<levelMin value="DEBUG" />
			<levelMax value="DEBUG" />
		</filter>
	</appender>
	<!--Info-->
	<root>
		<!-- 控制级别,由低到高:ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF -->
		<!-- 比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录 -->
		<!-- 如果没有定义LEVEL的值,则缺省为DEBUG -->
		<level value="ALL" />
		<!-- 按日期切分日志文件,并将日期作为日志文件的名字 -->
		<appender-ref ref="ErrorLog" />
		<appender-ref ref="InfoLog" />
		<appender-ref ref="DebugLog" />
	</root>
</log4net>

使用类

我们创建一个单独的类来使用他。

using log4net;


namespace MMCEngine
{
    internal class Loger
    {

        readonly static ILog logger = LogManager.GetLogger(" MMCEngine ");
        public Loger() {
            Thread.CurrentThread.Name = "main";//为了让主线程名显示
            string path = @"../../../log4net.config";
            FileInfo file = new FileInfo(path);


            log4net.Config.XmlConfigurator.Configure(file);
            
            Console.WriteLine("loger");
        }

        public static void Debug(string str)
        {
            Console.WriteLine(DateTime.Now.ToString("yyyy-mm-dd HH:MM:ss")+" DEBUG:" + str);
            logger.Debug(str);
        }
        public static void Info(string str)
        {
            Console.WriteLine(DateTime.Now.ToString("yyyy-mm-dd HH:MM:ss") + " INFO:" + str);
            logger.Info(str);
        }
        public static void Warn(string str)
        {
            Console.WriteLine(DateTime.Now.ToString("yyyy-mm-dd HH:MM:ss") + " WARN:" + str);
            logger.Warn(str);
        }
        public static void Error(string str)
        {
            Console.WriteLine(DateTime.Now.ToString("yyyy-mm-dd HH:MM:ss") + " ERROR:" + str);
            logger.Error(str);
        }
    }
}

使用

在Program.cs中

new Loger();
// 调用Python脚本的Test函数
Loger.Info("info1");
Loger.Info("info2");
Loger.Debug("Debug3");
Loger.Warn("Warn4");
Loger.Error("err5");

在这里插入图片描述
我们可以根据配置文件来生成不同的Log,配置文件里我分为了3个等级。

通过代码指定文件名

首先在配置文件中配置file

<file type="log4net.Util.PatternString" value="Log\%property{LogName}"/>

这里添加一个属性LogName

<appender name="ErrorLog" type="log4net.Appender.RollingFileAppender">
	<!--不加utf-8编码格式,中文字符将显示成乱码-->
	<param name="Encoding" value="utf-8" />
	<file type="log4net.Util.PatternString" value="Log\%property{LogName}"/>
	<appendToFile value="true" />
	<rollingStyle value="Date" />
	<!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
	<datePattern value="&quot;ErrorLogs_&quot;yyyyMMdd&quot;.log&quot;" />
	<!--日志文件名是否为静态-->
	<StaticLogFileName value="false"/>
	<!--多线程时采用最小锁定-->
	<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
	<!--布局(向用户显示最后经过格式化的输出信息)-->
	<layout type="log4net.Layout.PatternLayout">
		<conversionPattern value="%date| %-5level %newline%message%newline--------------------------------%newline" />
	</layout>
	<filter type="log4net.Filter.LevelRangeFilter">
		<levelMin value="ERROR" />
		<levelMax value="FATAL" />
	</filter>
</appender>

然后在代码中

static ILog logger;//= LogManager.GetLogger(" MMCEngine ");
public Loger(string fname = "") {
    Thread.CurrentThread.Name = "main";//为了让主线程名显示
    string path = "log4net.config";
    FileInfo file = new FileInfo(path);

    log4net.GlobalContext.Properties["LogName"] = fname+"_";
    logger = log4net.LogManager.GetLogger(" MMCEngine ");
    log4net.Config.XmlConfigurator.Configure(file);
    
}

这里要注意第一行我们就要设置属性LogName,然后再调用GetLogger

log4net.GlobalContext.Properties["LogName"] = fname+"_";

提示

如果使用了log4net来输出,要记得Log4net的实例化需要放在currentDoamin.ProcessExit += OnExitApp的后面,否则在程序退出的时候无法写入log。

另外log4net不支持NativeAOT,如果要使用AOT打包可以参考使用Serilog

参考

https://www.cnblogs.com/netcore5/articles/14611567.html

C# 常用不同日志库的区别详解与示例 阅读详情

相关推荐

C# Log4Net不输出日志的解决方法

log4net是一个流行的 .NET 日志框架,用于记录应用程序的日志信息。如果你在使用log4net。

精通搬砖,资深技术砖家,在软件开发,人工智能,设备开发等领域都有研究。商业合作&交流学习可私信联系。 1263

C#/.NET Log4日志的用法

nuget安装log4net包 配置文件代码如下 <?xml version="1.0" encoding="utf-8"?> <log4net> <!-- Define some output appenders --> <appender name="rollingAppender" type="log4net.Appender.RollingFi...

一点一滴 2万+

C#:第一性原理理解日志(log)

日志级别就像程序的“情绪表达”:Debug是细碎的嘀咕,Info是日常报告,Warning是小心提醒,Error是问题警告,Critical是生死攸关的大事。开发者通过设置级别,可以让日志更高效地服务于他们的需求。

2402_88047672的博客 985

C#中Log4的使用教程

C#中Log4的使用教程[完全图解] 没有日志的系统是不完整的系统,下面小赵四步(三分钟)教会你使用Log4; 我去,感觉上面有满满的教科书式的感觉。文章只是个人笔记,大佬请放过 第一步 使用很简单,相对于Nlog,首先第一步在Nuget上面添加包 log4net Microsoft.Extensions.Logging.Log4Net.AspNetCore 第二步 添加log4net.config配置文件 代码我贴在下面 <?xml version="1.0" encoding="ut

混迹自留地 4799

C#控制台程序Log4net日志配置模板(含控制台+文件双输出、多级别分流)

直接可用的C#控制台项目,集成Log4net 2.0.8,无需额外安装或修改即可运行。启动后自动按DEBUG/INFO/WARN/ERROR级别将日志同时输出到控制台窗口和本地文件,每条日志包含时间戳、线程ID、日志级别和消息内容。App.config里已预置完整log4net配置节,支持快速调整输出路径、文件名格式、是否启用异步写入、日志滚动策略等常见设置。Program.cs中提供标准初始化方式和各级别日志调用示例,方便对照学习和二次开发。编译生成的exe放在bin目录下双击即运行,适合用于本地调试验证

ipfs8storage的博客 224

C#项目中的Log4Net日志管理实战指南

本文还有配套的精品资源,点击获取 简介:本文将详细介绍如何在C#项目中使用Log4Net进行日志记录。Log4Net是一个功能强大的.NET开源日志记录框架,提供了多种日志输出格式和自定义日志级别的功能。读者将了解如何安装和配置Log4Net,以及如何在代码中实现日志记录。此外,文章还将指导如何自定义日志输出位置和过滤日志级别,以优化日志管理。 1. Log4Net概...

weixin_42620563的博客 2631

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

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

小5聊的博客 3556

C# log4日志类包装模块

Log4需要配置的东西太多了,而且还涉及到配置文件,比较繁琐,本DLL包直接封装的日志类,可以拿来直接使用。只要实现接口就行 ILogingbase LogInfo = new Logingbase(); LogInfo.LogInfo("记录日志"); 如果在类库中使用,设置成公共类型

log4.net 配置-控制台输出带颜色的日志

一般对控制台输入的日志我们使用的Appender为ConsoleAppender,日志为白色文字。 当我们想到DEBUG,INFO,WARN,ERROR 每种日志设置一种颜色时我们需要将Appender改为ColoredConsoleAppender 然后增加相应的颜色配置 <appender name="ConsoleAppender" type=...

aiwenia0512的博客 1863

AI Agent核心架构解析:从Tool、Skill到MCP协议的智能体构建实战

在人工智能领域,大语言模型(LLM)赋予了AI自主规划与决策的能力,推动了智能体(Agent)技术的演进。其核心原理在于构建一个具备感知、规划、行动与反思能力的自主系统。这一架构的技术价值在于将AI从被动应答升级为主动执行复杂任务的工作伙伴,显著提升了自动化水平与问题解决效率。应用场景广泛覆盖了市场分析、自动化办公、智能客服与垂直领域集成等。本文聚焦于实现这一能力的关键组件:基础工具(Tool)、组合技能(Skill)与标准化协议(MCP)。其中,Skill通过封装多个Tool形成可复用的高级能力,而MCP

chuannaoxuan4674的博客 322

SquareLine Studio汉化版安装激活全攻略:LVGL嵌入式UI设计从入门到出代码

嵌入式GUI开发中,LVGL作为轻量级开源图形库,广泛应用于STM32、ESP32等MCU平台。可视化设计器通过拖拽生成LVGL代码,大幅提升UI开发效率。SquareLine Studio正是这类工具的代表,支持界面设计、事件绑定与代码导出。其安装、汉化与激活是初学者常见门槛,尤其涉及LVGL版本匹配、字体配置及FreeRTOS移植等关键环节。本文围绕汉化版安装、一个月免费激活码使用及最小可用流程展开,帮助开发者快速上手LVGL界面设计,规避常见环境与集成问题。

weixin_29189987的博客 421

C#使用Log4.net记录日子文件

C#使用Log4.net记录日子文件 一、简介 1.1 Log4.net优点 几乎所有的大型应用都会有自己的用于跟踪调试的API。因为一旦程序被部署以后,就不太可能再利用专门的调试工具了。然而一个管理员可能需要有一套强大的日志系统来诊断和修复配置上的问题。经验表明,日志记录往往是软件开发周期中的重要组成部分。它具有以下几个优点:1.它可以提供应用程序运行时的精确环境,可供开发人员尽快找到应用程...

weixin_43163153的博客 173

基于FreeRTOS与MQTT的物联网技术应用系列——步进电机控制(三)SD卡驱动、FatFS等的移植和ini配置文件读取的实现

本文实现了基于STM32F107VC的金牛开发板的基于SPI模式的SD卡驱动和FatFS的移植,以及利用minini库对ini配置信息文件进行读取。

sqshining的专栏 2138

C# .NET6 Log4net输出日志

打开 Visual Studio,选择 “创建新项目”,然后选择 “.NET” 类别下的 “.NET 6”,并选择 “控制台应用程序” 作为项目模板。在弹出的对话框中,搜索 “log4net” 并选择 “log4net” 包进行安装。上述代码中,我们使用 log.Debug、log.Info、log.Warn、log.Error 和 log.Fatal 方法分别记录不同级别的日志信息。在 C# .NET6 开发中,log4net 是一个常用的日志记录框架,它可以帮助我们方便地输出日志信息。

u013934107的博客 1913

【Go语言实战】(2) Gin+Vue 电子商城

618来!!不用纠结去哪里剁手了!直接自己安排一个商场不香吗??

面向生活编程 4827

ransac拟合2D圆(三点定圆 c++详细版)

RANSAC(Random Sample Consensus,随机采样一致性)算法是一种基于随机采样的迭代算法,主要用于从一组包含大量噪声和异常值(外点)的数据中估计数学模型的参数。

twnkie的博客 1047

C# log4net有log文件但没有在输出窗口打印

通过上述步骤,应该能够确保log4net的日志信息不仅写入文件,还能显示在Visual Studio的输出窗口中。关键是添加适当的appender(如),并确保调试输出被正确启用和配置。

qq_42750982的博客 1481

ETAS工具导入Com Arxml修改步骤

通讯协议栈开发一般通过导入DBC实现,ETAS工具本身导入DBC也是生成arxml后执行cfggen,本文介绍直接导入客户提供的arxml文件,实现通讯协议栈的生成。通过Arxml导入相比于DBC来说,少了从DBC转为arxml的过程。而且arxml中能提供的信息也会更多。如果是DBC的话,很多信息(如PNC的映射,CANTP的配置等)都需要额外配置。不过还有连DBC都无法提供的,那就更麻烦了~

赞的博客 1541

【C# Serilog 日志记录】 控制台示例

using System; using Serilog; namespace SerilogConsoleTest { class Program { static void Main(string[] args) { Log.Logger = new LoggerConfiguration() .MinimumLevel.Information() ...

cxyhjl的博客 2569

DataCastle-租金预测

ID:编号;时间:房屋信息采集的时间;小区名:房屋所在小区,已脱敏处理;小区房屋出租数量:小区出租房屋数量,已脱敏处理;楼层:0、1、2分别表示楼层低,中,高;总层数:房屋所在建筑的总楼层数,已脱敏处理;房屋面积:房屋面积数值,已脱敏处理;房屋朝向:房屋的朝向;居住状态:房屋的居住状态,表示是否已出租或居住中,已脱敏处理;卧室数量:户型信息,数字表示卧室的个数;卫的数量:户型信息,数字表示卫生间的个数;厅的数量:户型信息,数字表示厅的个数;

优快云 精品推荐 3457

柑橘病虫害识别方案总结

1. 方案一 1.1 赛题背景 1.2 数据分析 1.3 模型设计 1.3.1 模型具体方案 1.3.2 模型设计 1.4 实验结果 1.5 总结与展望 2. 方案二 2.1 赛题介绍 2.2 数据分析 2.3 算法方案解析 2.3.1 检测模型 2.3.2 提升策略 2.4 优化思路 3. 方案三 3.1 数据分析 3.1.1 数据说明 3.2 技术展示 3.2.1 数据输入端 3.2.2 模型结构端 3.2.3 上下文信息 3.2.4 训练优化端 3.2.5 创新性分析 3.3 算法及系统思考.....

herosunly的博客 2万+

【C#】.net core 6.0 使用第三方日志插件Log4net,配置文件详细说明

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

小5聊的博客 3411

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C# Serilog 日志

Serilog是一个功能强大且灵活的日志库,适用于各种.NET应用程序。它支持多种日志输出目标和丰富的配置选项,可以满足不同的日志需求。通过合理配置Serilog,可以方便地记录应用程序的运行日志,帮助开发人员进行调试和问题排查。

这是博客描述 968

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

c#控制台应用添加Log4net日志(控制台和文件)

目录Log4net入门(简要介绍)1 使用Visual Studio创建一个控制台应用2 在Nuget中下载log4net3.增加App.config配置文件 Log4net入门(简要介绍) Log4net是Apache公司的log4j™的.NET版本,用于帮助.NET开发人员将日志信息输出到各种不同的输出源(Appender),常见的输出源包括控制台、日志文件和数据库等。本篇主要讨论如何在控制台应用程序中将日志文件输出到控制台、日志文件和SQL Server数据库中。 1 使用Visual Studio创

进击的豌豆的博客 4283

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

C# Winform 日志系统

控制台输出日志确实很方便,但它同时也有多缺点,比如,在 winform 程序运行后,任务栏会同时两个应用的图标,控制台也算一个单独的程序,如果一个程序在运行也就

熊思雨的博客 5052

c#日志组件Serilog使用

NuGet 安装 Serilog 核心的包是 Serilog 和 Serilog.AspNetCore 建议安装 Serilog.AspNetCore,几乎包含了Serilog常用的所有包 异步写入 Serilog.Sinks.Async 写入MSSQL Serilog.Sinks.MSSqlServer Install-Package Serilog.AspNetCore Install-Package Serilog # winform 安装 Install-Package Serilog.Sin

weixin_38582851的博客 7010
上一篇: C#下使用IronPython来实现热更新
下一篇: C#小知识 - 技巧合集
Thinbug
博客等级 码龄22年 2万+粉丝 187原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thinbug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值