C# WInForm之使用log4net输出两个日志文件

这里写自定义目录标题

前言

本文主要介绍使用log4net输出两种日志。一个日志存放在Logs文件夹下,用来记录相机流程。另一个日志存放在Data文件夹下,记录结果。因此需要配置log4net来定义两个日志记录器(Logger)。每个Logger可以有自己的Appender,决定日志的输出目的地(例如控制台、文件等)。

下载Log4Net包

在"工具"--"NuGet包管理器"--"管理解决方案的NuGet程序包"中安装"log4net"包。

在App.config定义两个Logger

1.打开解决方案下的"App.config"文件,如下图所示:

2.App.config中的代码如下:

csharp 复制代码
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
	<configSections>
		<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
	</configSections>

	<log4net>

		<!-- 第一个Logger -->
		<logger name="LogTrace1">
			<!-- 设置日志级别为"ALL",意味着这个Logger会记录所有级别的日志信息。在log4net中,日志级别从低到高分别为:DEBUG、INFO、WARN、ERROR、FATAL。-->
			<level value="ALL"/>
			<!-- 这是将这个Logger绑定到一个Appender,即"LogFileAppender1"。Appender决定了日志信息应该输出到哪里。在这个例子中,日志信息将被输出到"LogFileAppender1"所配置的地方。 -->
			<appender-ref ref="LogFileAppender1" />
		</logger>

		<!-- 第二个Logger -->
		<logger name="LogTrace2">
			<level value="ALL"/>
			<appender-ref ref="LogFileAppender2" />
		</logger>

		<!-- 文件Appender LogFileAppender1-->
		<appender name="LogFileAppender1" type="log4net.Appender.RollingFileAppender">
			<!--日志文件输出目录-->
			<param name="File" value="Logs\" />

			<!--True/false,默认为true。当文件存在时,是否在原文件上追加内容。-->
			<param name="AppendToFile" value="true"/>

			<!--创建新文件的格式(按日期)-->
			<param name="rollingStyle" value="Date" />

			<!--当RollingStyle为Composite或Date,这里设置文件名格式-->
			<param name="datePattern" value="yyyy-MM-dd'.log'" />

			<!--True/false,默认为true。为true时,RollingStyler的date值将无效。且为true时,需要在file里指定文件名,所有日志都会记录在这个文件里。-->
			<param name="staticLogFileName" value="false" />

			<!--备份日志数目,默认为0。在CountDirection为负数时有效。-->
			<maxSizeRollBackups value="10"/>


			<layout type="log4net.Layout.PatternLayout">
				<conversionPattern value="%n%date 【%p】 %message"/>
			</layout>
		</appender>

		<!-- 文件Appender LogFileAppender2-->
		<appender name="LogFileAppender2" type="log4net.Appender.RollingFileAppender">
			<!--日志文件输出目录-->
			<param name="File" value="Data\" />

			<!--True/false,默认为true。当文件存在时,是否在原文件上追加内容。-->
			<param name="AppendToFile" value="true"/>

			<!--创建新文件的格式(按日期)-->
			<param name="rollingStyle" value="Date" />

			<!--当RollingStyle为Composite或Date,这里设置文件名格式-->
			<param name="datePattern" value="yyyy-MM-dd'.log'" />

			<!--True/false,默认为true。为true时,RollingStyler的date值将无效。且为true时,需要在file里指定文件名,所有日志都会记录在这个文件里。-->
			<param name="staticLogFileName" value="false" />

			<!--备份日志数目,默认为0。在CountDirection为负数时有效。-->
			<maxSizeRollBackups value="10"/>


			<layout type="log4net.Layout.PatternLayout">
				<conversionPattern value="%n%date 【%p】 %message"/>
			</layout>
		</appender>


	</log4net>

	<startup>
		<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
	</startup>
</configuration>

3.右击App.config属性,将"复制到输出目录"中的"不复制"改为"如果较新则复制"

C# 代码

csharp 复制代码
 private void button1_Click(object sender, EventArgs e)
 {
     XmlConfigurator.Configure(new FileInfo("App.config"));  //这句代码相当于[assembly: log4net.Config.XmlConfigurator()],而且个人认为不必要再重新写一个类来实现这些方法
     //获取两个实例                                        
     var fileLogger1 = LogManager.GetLogger("LogTrace1");
     var fileLogger2 = LogManager.GetLogger("LogTrace2");
     // 记录日志到控制台和文件。这里记录的信息会分别发送到ConsoleAppender和FileAppender。  
     fileLogger1.Info("This is a message logged by ConsoleLogger");
     fileLogger2.Info("This is a message logged by FileLogger");
     fileLogger1.Debug("啥呀这是");
 }

参考链接

(1).代码部分参考链接:

参考链接:https://blog.csdn.net/HEIMENGER/article/details/120181289

(2)log4net配置文件的设置及常用参数讲解

参考链接:https://blog.csdn.net/hr541659660/article/details/45575473

相关推荐
heimeiyingwang3 分钟前
【架构实战】数据脱敏与隐私保护:合规是底线
java·开发语言·架构
IT策士3 分钟前
Redis 从入门到精通:Redis Stream —— 可靠消息队列
数据库·redis·缓存
北风toto3 分钟前
深度拆解:本体与智能体协同生成SQL的底层逻辑与工程实践
数据库·sql·microsoft
倒流时光三十年6 分钟前
PostgreSQL NULLIF 条件表达式函数详解
数据库·sql·postgresql
代码小库17 分钟前
【2026前端转 AI 全栈指南】第 2 章(下):NestJS 项目创建 · MongoDB 配置 · 项目启动与调试
前端·数据库·mongodb
于指尖飞舞17 分钟前
java后端面试题(常用集合极简)
java·开发语言·面试
大熊猫侯佩22 分钟前
SwiftData 迁移深度指南:从入门到“填坑”(下集)
数据库·swift·编程语言
大熊猫侯佩26 分钟前
SwiftData 迁移深度指南:从入门到“填坑”(上集)
数据库·swift·编程语言
我星期八休息29 分钟前
Linux系统编程—mmap文件映射
java·linux·运维·服务器·数据库·mysql·spring
稷下元歌35 分钟前
python核心基础,这关于基于Moveltg加 Ros2实战Python编程基础实课
开发语言·python