C# 利用log4net 工作台打印和保存到文件

目录

‌log4net‌简介

log4net‌是一个开源的日志记录组件,专为.NET平台设计。它是Apache log4j框架在Microsoft .NET平台的实现,属于Apache Logging Services工程的一部分。log4net提供了一种灵活的方式来记录应用程序中的事件和异常信息,支持将日志输出到多种目标,如控制台、文件、数据库等‌。

log4net具有多目标输出 、支持多种日志级别 、配置灵活性高‌ 、日志架构分层等诸多特点。log4net不仅继承了log4j的优秀特性,还针对.NET平台进行了优化和扩展‌。 log4net适用于各种需要日志记录的场景,特别是在开发调试、错误跟踪和性能监控等方面。通过灵活的配置和强大的功能,log4net能够帮助开发者更好地管理和分析应用程序的运行情况,及时发现并解决问题‌。

引言

我们Windows程序员debug时大概率通不过两种方式一种编译器的控制台打印,一种记录到系统log文件中,这里我们举例说明如何最简单地配置 ‌log4net‌,以达到我们使用的基础要求,即打印到工作台的同时保存到工程文件路径下的logs文件夹中,文件以。接下来讲讲4个简单步骤:

1、添加引用库

首先,在工具菜单中的NuGet 包管理器的管理解决方案-->NuGet程序包中打开界面。然后,搜索 ‌log4net‌,找到对应库,进行安装。如下图所示。安装后可以在引用中找到 ‌log4net‌项。

2、添加引用和构建实例

可以单独构建类也可以直接在主类中添加构建成,参看下面代码实例。

需要的地方直接调用Log2Debug()即可。

c 复制代码
using log4net;
namespace TestLog
{
    public partial class Form_main : Form
    {

	 //log4net构建ILog实例
	 private static ILog logger = LogManager.GetLogger(typeof(Form_main));


    /// <summary>
	/// log4net 打印到文件和工作台输出
	/// </summary>
	/// <param name="msg"></param>
	public static void Log2Debug(string msg)
	{
	    if (logger.IsDebugEnabled)
	    {
	        logger.Debug(msg);
	    }
	}

     /// <summary>
     ///  Console.WriteLine只打印到工作台
     /// </summary>
     /// <param name="data"></param>
     private void PRINT(string data)
     {
         Console.WriteLine(data);
     }
   }
}

3、添加属性配置

在属性文件AssemblyInfo.cs中的最后一行添加组件配置

c 复制代码
// 指定log4net 的配置文件
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)]

4、添加配置文件

在项目文件中添加配置文件log4net.config,并添加内容。

xml 复制代码
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
	<log4net>
		<!-- 控制台日志配置 -->
		<appender name="Console" type="log4net.Appender.ConsoleAppender">
			<!-- 日志输出格式 -->
			<layout type="log4net.Layout.PatternLayout">
				<conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" />
			</layout>
		</appender>


		<!--其中layout节点的配置说明:
			%m(message):输出的日志消息;
			%n(newline):换行;
			%d(datetime):输出当前语句运行的时刻;
			%r(runtime):输出程序从运行到执行到当前语句时消耗的毫秒数;
			%t(threadid):当前语句所在的线程ID ;
			%p(priority): 日志的当前日志级别;
			%c(class):当前日志对象的名称;
			%L:输出语句所在的行号;
			%F:输出语句所在的文件名;
			%-10:表示最小长度为10,如果不够,则用空格填充;-->
		<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
			<!--日志路径-->
			<param name= "File" value= "logs/"/>
			<!--多线程时采用最小锁定-->
			<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
			<!--是否是向文件中追加日志-->
			<param name= "AppendToFile" value= "true"/>
			<!--log保留天数-->
			<!--<param name= "MaxSizeRollBackups" value= "10"/>-->
			<!--日志文件名是否是固定不变的-->
			<param name= "StaticLogFileName" value= "false"/>
			<!--日志文件名格式为:2022-05-22.log-->
			<param name= "DatePattern" value= "yyyy-MM-dd'.log'"/>
			<!--日志根据日期滚动-->
			<param name= "RollingStyle" value= "Date"/>
			<layout type="log4net.Layout.PatternLayout">
				<param name="ConversionPattern" value="%n%d [%t] %-5p %c [%L] - %m %n" />
			</layout>
		</appender>

		<root>
			<level value="ALL" />
			<appender-ref ref="Console" />
			<appender-ref ref="RollingLogFileAppender" />
		</root>
	</log4net>
</configuration>

最后

log4net配置很多,你可以纠结其细节,配置后调用即可,同学们用起来吧!

相关推荐
用户37215742613511 小时前
C# 实现 Excel 单元格保护:锁定公式并允许编辑指定区域
c#·ai编程·编程语言
公子小六16 小时前
基于.NET的Windows窗体编程之WinForms数据持久化(1)
windows·microsoft·c#·.net·winforms
三雷科技17 小时前
第6章第4节:自定义分词器
开发语言·c#
zhanghaha131419 小时前
C# 系列教程_12 字符串 string 保姆级系统教程(面向新手,大量示例 + 原理讲解)
开发语言·数据库·c#
Coder_Shenshen1 天前
罗克韦尔ACD工程归档离线变量树解析
算法·c#
寂寞的船2 天前
【Unity知识速递】第10期 Unity GC 零分配实战:从 UnityEngine.Pool 到手动 GC 控制的全链路优化
jvm·unity·c#·游戏引擎·lucene
1-1=02 天前
C# 数据结构和特殊类型
数据结构·c#·.net·.netcore
波力海苔夹心脆6754 天前
C# WPF 资源字典详解:ResourceDictionary、MergedDictionaries 与自定义控件案例
开发语言·c#·wpf·入门教程·resource·资源字典
AI导出鸭PC端4 天前
Perplexity批量导出没有PDF模式?AI导出鸭插件补上最后一块拼图
人工智能·pdf·c#·ai导出鸭
Risehuxyc4 天前
C# 选用更流行的语言版本
c#