当前位置: 首页 > article >正文

<C#>log4net 的配置文件配置项详细介绍

log4net 是一个功能强大的日志记录工具,通过配置文件可以灵活地控制日志的输出方式、格式、级别等。以下是对 log4net 配置文件常见配置项的详细介绍:

根元素 <log4net>

这是 log4net 配置文件的根元素,所有配置项都要包含在该元素内。

<log4net><!-- 其他配置项 -->
</log4net>

附加器(Appenders) <appender>

附加器用于指定日志的输出目标,比如文件、控制台、数据库等。log4net 提供了多种内置的附加器,你也可以自定义附加器。每个附加器都有一个唯一的名称,可通过 name 属性来指定。

1. 控制台附加器(ConsoleAppender)

将日志输出到控制台。

<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /></layout>
</appender>
  • type:指定附加器的类型,这里是 log4net.Appender.ConsoleAppender
  • <layout>:定义日志的输出格式,使用 PatternLayout 可以自定义格式,conversionPattern 指定具体的格式字符串。
  • 在 log4net.Layout.PatternLayout 里,借助转换模式字符串能够自定义日志输出的格式,此字符串由一系列标记构成。下面为你详细介绍常用的标记及其用途:

基本信息标记

  • %date:输出日志记录的日期和时间,默认格式是 yyyy-MM-dd HH:mm:ss,fff,可通过 %date{format} 来指定格式,像 %date{HH:mm:ss}
  • %level:输出日志的级别(例如 DEBUGINFOWARNERRORFATAL)。
  • %logger:输出记录日志的记录器名称。
  • %message:输出日志的具体消息内容。
  • %newline:输出一个换行符。

线程与上下文标记

  • %thread:输出产生日志记录的线程名称。
  • %property{name}:输出线程上下文属性中指定名称的值。比如,你可以在代码里设置 log4net.ThreadContext.Properties["UserName"] = "John";,接着使用 %property{UserName} 输出。

类与方法标记

  • %class:输出记录日志的类的全限定名。
  • %method:输出记录日志的方法名。

位置信息标记

  • %file:输出记录日志的源文件名称。
  • %line:输出记录日志的代码所在的行号。

栈跟踪标记

  • %exception:输出异常的堆栈跟踪信息,通常用于 ERROR 或 FATAL 级别的日志。
2. 文件附加器(FileAppender 和 RollingFileAppender)

将日志输出到文件。RollingFileAppender 支持文件滚动,当文件达到一定大小或日期变化时,会创建新的日志文件。

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"><file value="logs\log.txt" /><appendToFile value="true" /><rollingStyle value="Size" /><maxSizeRollBackups value="10" /><maximumFileSize value="10MB" /><staticLogFileName value="true" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /></layout>
</appender>
  • <file>:指定日志文件的路径和名称。
  • <appendToFile>:设置是否将日志追加到现有文件中。
  • <rollingStyle>:指定文件滚动的方式,可选值有 Size(按文件大小滚动)、Date(按日期滚动)等。
  • <maxSizeRollBackups>:指定保留的旧日志文件的最大数量。
  • <maximumFileSize>:指定每个日志文件的最大大小。
  • <staticLogFileName>:设置是否使用静态的日志文件名。

3. 数据库附加器(AdoNetAppender)

将日志存储到数据库中。

<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"><bufferSize value="1" /><connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /><connectionString value="Data Source=SERVER_NAME;Initial Catalog=DATABASE_NAME;User ID=USERNAME;Password=PASSWORD" /><commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" /><parameter><parameterName value="@log_date" /><dbType value="DateTime" /><layout type="log4net.Layout.RawTimeStampLayout" /></parameter><parameter><parameterName value="@thread" /><dbType value="String" /><size value="255" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%thread" /></layout></parameter><!-- 其他参数 -->
</appender>

  • <bufferSize>:指定日志记录的缓冲区大小。
  • <connectionType>:指定数据库连接类型。
  • <connectionString>:指定数据库连接字符串。
  • <commandText>:指定插入日志记录的 SQL 语句。
  • <parameter>:定义 SQL 语句中的参数,包括参数名、数据类型和布局。

记录器(Loggers) <logger> 和 <root>

记录器用于控制不同命名空间或类的日志输出级别和使用的附加器。

1. 根记录器(Root Logger) <root>

根记录器是所有记录器的父记录器,为整个应用程序设置默认的日志级别和附加器。

<root><level value="ALL" /><appender-ref ref="ConsoleAppender" /><appender-ref ref="RollingFileAppender" />
</root>
  • <level>:指定日志的输出级别,可选值有 ALLDEBUGINFOWARNERRORFATALOFF
  • <appender-ref>:引用要使用的附加器,通过 ref 属性指定附加器的名称。
2. 自定义记录器(Custom Logger) <logger>

为特定的命名空间或类设置日志级别和附加器,会覆盖根记录器的设置。

<logger name="YourNamespace.YourClass"><level value="DEBUG" /><appender-ref ref="ConsoleAppender" />
</logger>

  • name:指定记录器的名称,通常是命名空间或类的全限定名。
  • <level> 和 <appender-ref> 的作用与根记录器中的相同。

过滤器(Filters) <filter>

过滤器用于根据特定条件过滤日志记录,只允许符合条件的日志记录通过。常见的过滤器有 LevelMatchFilterLevelRangeFilter 等。

<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"><filter type="log4net.Filter.LevelRangeFilter"><levelMin value="INFO" /><levelMax value="ERROR" /></filter><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /></layout>
</appender>
  • <filter>:指定过滤器的类型。
  • <levelMin> 和 <levelMax>:指定日志级别的范围,只有在该范围内的日志记录才会被输出。

配置示例

以下是一个完整的 log4net 配置文件示例:

<log4net><appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /></layout></appender><appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"><file value="logs\log.txt" /><appendToFile value="true" /><rollingStyle value="Size" /><maxSizeRollBackups value="10" /><maximumFileSize value="10MB" /><staticLogFileName value="true" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /></layout></appender><root><level value="ALL" /><appender-ref ref="ConsoleAppender" /><appender-ref ref="RollingFileAppender" /></root>
</log4net>

这个配置文件将日志同时输出到控制台和文件,日志级别为 ALL,即输出所有级别的日志。

通过合理配置 log4net 的配置文件,可以满足不同场景下的日志记录需求。

相关文章:

<C#>log4net 的配置文件配置项详细介绍

log4net 是一个功能强大的日志记录工具&#xff0c;通过配置文件可以灵活地控制日志的输出方式、格式、级别等。以下是对 log4net 配置文件常见配置项的详细介绍&#xff1a; 根元素 <log4net> 这是 log4net 配置文件的根元素&#xff0c;所有配置项都要包含在该元素内…...

excel单元格如果是日期格式,在C#读取的时候会变成45807,怎么处理

excel单元格如果是日期格式&#xff0c;在C#读取的时候会变成45807&#xff0c;怎么处理 excel单元格如果是日期格式&#xff0c;在C#读取的时候会变成45807&#xff0c;怎么处理 在 C# 中&#xff0c;Excel 日期被表示为一个数字&#xff0c;这是因为 Excel 内部将日期存储为…...

Unity接入SDK之修改Unity启动页面

原理就是在Android Studio新建Activity继承UnityPlayerActivity&#xff0c;然后再Unity中修改启动页面。 一&#xff0c;Android Studio篇 首先新建一个项目&#xff0c; 新建完成之后基于新建的项目新建一个module&#xff0c;选择为Android Library类型 新建的Library再目…...

yarn workspace使用指南

作用 Yarn workspace 是 Yarn 包管理工具中的一个功能&#xff0c;主要用于管理多包项目&#xff08;monorepo&#xff09;。它的主要作用如下&#xff1a; 支持多包结构&#xff1a;允许在一个仓库中管理多个独立的包或项目。项目间依赖管理&#xff1a;方便地在不同包之间添…...

[学习]RTKLib详解:datum.c、download.c与lambda.c

RTKLib详解: datum.c、download.c 与 lambda.c 本文是 RTKLlib详解 系列文章的一篇&#xff0c;目前该系列文章还在持续总结写作中&#xff0c;以发表的如下&#xff0c;有兴趣的可以翻阅。 [学习] RTKlib详解&#xff1a;功能、工具与源码结构解析 [学习]RTKLib详解&#xff…...

VUE el-select下拉框动态设置禁用,删除后恢复可选择

场景&#xff1a;点击新增添加按钮&#xff0c;列表table会新增一条包含下拉菜单的数据&#xff0c;如果其中任何一个下拉框选择了某个值&#xff0c;那么新增的下拉菜单的选项中该值是禁用状态&#xff0c;只能选择其他未被选中过的值。点击删除按钮后&#xff0c;已禁用的选项…...

FPGA----基于ALINX提供的debian实现TCF

引言:接上问,我们使用自制的image.ub和boot.bin以及ALINX提供的debian8根文件系统,构建了petalinux,但是经测试,该文件系统无法启用TCF服务,即无法与Xilinx SDK建立连接,那么我们应该如何解决? FPGA----基于ZYNQ 7020实现定制化的EPICS通信系统-CSDN博客文章浏览阅读4…...

木马查杀篇—Opcode提取

【前言】 介绍Opcode的提取方法&#xff0c;并探讨多种机器学习算法在Webshell检测中的应用&#xff0c;理解如何在实际项目中应用Opcode进行高效的Webshell检测。 Ⅰ 基本概念 Opcode&#xff1a;计算机指令的一部分&#xff0c;也叫字节码&#xff0c;一个php文件可以抽取出…...

1.7 方向导数

&#xff08;底层逻辑演进脉络&#xff09;从"单车道"到"全路网"的导数进化史&#xff1a; 一、偏导数奠基&#xff08;1.6核心&#xff09; 诞生背景&#xff1a;多元函数分析需求 当变量间存在耦合关系时&#xff08;如房价面积单价装修成本&#xff09…...

设计模式系列(01):总览与引导

设计模式系列(01):总览与引导 本文为设计模式系列第1篇,定位为总览和引导,系统梳理设计模式的核心思想、分类、UML、设计原则、典型场景、学习建议与常见误区,适合系统学习与团队协作。 目录 1. 前言2. 设计模式简介3. UML与设计模式4. 术语解释5. UML工具与PlantUML6. 面…...

国产化Excel处理控件Spire.XLS系列教程:如何通过 C# 删除 Excel 工作表中的筛选器

在 Excel 文件中&#xff0c;筛选器&#xff08;Filter&#xff09;是一个常用的数据处理工具&#xff0c;可以帮助用户快速按条件筛选数据行。但在数据整理完成、导出、共享或打印之前&#xff0c;往往需要 删除 Excel 工作表中的筛选器&#xff0c;移除列标题中的下拉筛选按钮…...

第二篇 客户端脚本安全

同源策略 限制了来自不同的"dociment"或脚本&#xff0c;对当前"dociment"读取或设置一些属性。 不同源&#xff1a;host&#xff08;域名或ip&#xff09;&#xff0c;子域名&#xff0c;端口&#xff0c;协议。 对于当前页面来说&#xff0c;页面的源…...

[sklearn] 特征工程

一.字典数据抽取 def dictvec():"""字典数据抽取:return: None"""# 实例化# sparse改为True,输出的是每个不为零位置的坐标&#xff0c;稀疏矩阵可以节省存储空间dict DictVectorizer(sparseFalse) #矩阵中存在大量的0&#xff0c;sparse存储只…...

CI/CD与DevOps流程流程简述(提供思路)

一 CI/CD流程详解&#xff1a;代码集成、测试与发布部署 引言 在软件开发的世界里&#xff0c;CI/CD&#xff08;持续集成/持续交付&#xff09;就像是一套精密的流水线&#xff0c;确保代码从开发到上线的整个过程高效、稳定。我作为一名资深的软件工程师&#xff0c;接下来…...

S7-1500——零基础入门1、工业编程基本概念

工业编程基本概念 一,数制与基本数据类型二,数字量信号三,模拟量信号一,数制与基本数据类型 本节主要内容 类别内容主题数制与基本数据类型数制讲解十进制、十六进制、二进制及其进位规则;基数、位权概念数据类型介绍PLC 使用的数据类型:未序列数据类型(bit、byte、wor…...

六、快速启动框架:SpringBoot3实战

六、快速启动框架&#xff1a;SpringBoot3实战 目录 一、SpringBoot3介绍 1.1 SpringBoot3简介1.2 系统要求1.3 快速入门1.4 入门总结 二、SpringBoot3配置文件 2.1 统一配置管理概述2.2 属性配置文件使用2.3 YAML配置文件使用2.4 批量配置文件注入2.5 多环境配置和使用 三、…...

万兴PDF-PDFelement v11.4.13.3417

万兴PDF专家(Wondershare PDFelement)是一款国产PDF文档全方位解决方案.万兴PDF编辑器软件万兴PDF中文版,专注于PDF的创建,编辑,转换,签名,压缩,合并,比较等功能.万兴PDF专业版PDF编辑软件,以简约风格及强大的功能在国外名声大噪,除了传统功能外,还提供OCR扫描,表格识别,创建笔…...

LSP里氏替换原则

LSP强调子类必须能够替换父类。即子类应该具有与父类相同的行为和功能&#xff0c;而不仅仅是继承父类的属性和方法。LSP是对继承机制的约束规范、是指导接口与实现的设计原则。 LSP关键点 前置条件不能强化&#xff1a;子类方法的参数类型必须与父类相同或者更为宽松。后置条…...

机器学习-无量纲化与特征降维(一)

一.无量纲化-预处理 无量纲&#xff0c;即没有单位的数据 无量纲化包括"归一化"和"标准化"&#xff0c;这样做有什么用呢&#xff1f;假设用欧式距离计算一个公司员工之间的差距&#xff0c;有身高&#xff08;m&#xff09;、体重&#xff08;kg&#x…...

C语言复习--柔性数组

柔性数组是C99中提出的一个概念.结构体中的最后⼀个元素允许是未知大小的数组&#xff0c;这就叫做柔性数组成员。 格式大概如下 struct S { int a; char b; int arr[];//柔性数组 }; 也可以写成 struct S { int a; char b; int arr[0];//柔性数组 }; …...

图形化编程如何从工具迭代到生态重构?

一、技术架构的范式突破 在图形化编程领域&#xff0c;技术架构的创新正在重塑行业格局。iVX 作为开源领域的领军者该平台通过图形化逻辑设计&#xff0c;将传统文本编程需 30 行 Python 代码实现的 "按钮点击→条件判断→调用接口→弹窗反馈" 流程&#xff0c;简化…...

法国蒙彼利埃大学团队:运用元动力学模拟与马尔可夫状态模型解锁 G 蛋白偶联受体构象动态机制

背景简介 在生命科学领域&#xff0c;G 蛋白偶联受体&#xff08;GPCRs&#xff09;一直是研究的热点。它作为膜蛋白家族的重要成员&#xff0c;承担着细胞对多种刺激的响应任务&#xff0c;从激素、神经递质到外源性物质的信号传导都离不开它。据估计&#xff0c;约三分之一的…...

【PostgreSQL】不开启归档模式,是否会影响主从库备份?

PostgreSQL 不开启归档模式&#xff08;archive_mode off&#xff09;不会直接影响基于流复制&#xff08;Streaming Replication&#xff09;的主从备份&#xff0c;但可能会在特定场景下影响复制的健壮性和恢复能力。以下是详细分析&#xff1a; 1. 流复制的核心机制 流复制…...

网页Web端无人机直播RTSP视频流,无需服务器转码,延迟300毫秒

随着无人机技术的飞速发展&#xff0c;全球无人机直播应用市场也快速扩张&#xff0c;从农业植保巡检到应急救援指挥&#xff0c;从大型活动直播到智慧城市安防&#xff0c;实时视频传输已成为刚需。预计到2025年&#xff0c;全球将有超过1000万架商用无人机搭载直播功能&#…...

Shell脚本编程3(函数+正则表达式)

1.函数 1.1 定义 简单来讲&#xff0c;所谓函数就是把完成特定功能&#xff0c;并且多次使用的一组命令或者语句封装在一个固定的结构中&#xff0c;这个结构我们就叫做函数。从本质上讲&#xff0c;函数是将一个函数名与某个代码块进行映射。也就是说&#xff0c;用户在定义了…...

数据结构-堆排序

1.定义 -堆中每个节点的值都必须大于等于&#xff08;或小于等于&#xff09;其左右子节点的值。如果每个节点的值都大于等于其子节点的值&#xff0c;这样的堆称为大根堆&#xff08;大顶堆&#xff09;&#xff1b;如果每个节点的值都小于等于其子节点的值&#xff0c;称为…...

HTML简单语法标签(后续实操:云备份项目)

以下是一些 HTML 的简单语法标签及其功能介绍&#xff1a; 基本结构标签 <!DOCTYPE html>&#xff1a;声明文档类型为 HTML5<html>&#xff1a;HTML 文档的根标签<head>&#xff1a;包含文档元数据&#xff08;如标题、字符编码等&#xff09;<title>…...

DedeCMS-Develop-5.8.1.13-referer命令注入研究分析 CVE-2024-0002

本次文章给大家带来代码审计漏洞挖掘的思路&#xff0c;从已知可控变量出发或从函数功能可能照成的隐患出发&#xff0c;追踪参数调用及过滤。最终完成代码的隐患漏洞利用过程。 代码审计挖掘思路 首先flink.php文件的代码执行逻辑&#xff0c;可以使用php的调试功能辅助审计 …...

运用数组和矩阵对数据进行存取和运算——NumPy模块 之五

目录 NumPy模块介绍 3.5.1 NumPy 操纵数组元素的逻辑 3.5.2 添加数组元素操作 1. append() 函数 2. insert() 函数 3.5.3 删除数组元素的操作 delete() 函数 3.5.4 数组元素缺失情况的处理 isnan() 函数 3.5.5 处理数组中元素重复情况 unique() 函数 3.5.6 拼接数组操作 1. con…...

Nginx的增强与可视化!OpenResty Manager - 现代化UI+高性能反向代理+安全防护

以下是对OpenResty Manager的简要介绍&#xff1a; OpenResty Manager &#xff08;Nginx 增强版&#xff09;&#xff0c;是一款容易使用、功能强大且美观的反向代理工具 &#xff0c;可以作为OpenResty Edge 的开源替代品基于 OpenResty 开发&#xff0c;支持并继承 OpenRes…...