<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 的配置文件,可以满足不同场景下的日志记录需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/905389.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编译docker版openresty

使用alpine为基础镜像 # 使用Alpine作为基础镜像 FROM alpine:3.18# 替换为阿里云镜像源&#xff0c;并安装必要的依赖 RUN sed -i s|https://dl-cdn.alpinelinux.org/alpine|https://mirrors.aliyun.com/alpine|g /etc/apk/repositories && \apk add --no-cache \bui…

conda 输出指定python环境的库 输出为 yaml文件

conda 输出指定python环境的库 输出为 yaml文件。 有时为了项目部署&#xff0c;需要匹配之前的python环境&#xff0c;需要输出对应的python依赖库。 假设你的目标环境名为 myenv&#xff0c;运行以下命令&#xff1a; conda env export -n myenv > myenv_environment.ym…

[Java][Leetcode middle] 121. 买卖股票的最佳时机

暴力循环 总是以最低的价格买入&#xff0c;以最高的价格卖出: 例如第一天买入&#xff0c;去找剩下n-1天的最高价格&#xff0c;计算利润 依次计算到n-1天买入&#xff1b; 比较上述利润 // 运行时间超时。 o(n^2)public int maxProfit1(int[] prices) {int profit 0;for (i…

克隆虚拟机组成集群

一、克隆虚拟机 1. 准备基础虚拟机 确保基础虚拟机已安装好操作系统&#xff08;如 Ubuntu&#xff09;、Java 和 Hadoop。关闭防火墙并禁用 SELinux&#xff08;如适用&#xff09;&#xff1a; bash sudo ufw disable # Ubuntu sudo systemctl disable firewalld # CentO…

记录一次使用thinkphp使用PhpSpreadsheet扩展导出数据,解决身份证号码等信息科学计数法问题处理

PhpSpreadsheet官网 PhpSpreadsheet安装 composer require phpoffice/phpspreadsheet使用composer安装时一定要下载php对应的版本&#xff0c;下载之前使用php -v检查当前php版本 简单使用 <?php require vendor/autoload.php;use PhpOffice\PhpSpreadsheet\Spreadshee…

前端工程化:从 Webpack 到 Vite

引言 前端工程化是现代Web开发不可或缺的一部分&#xff0c;它通过自动化流程和标准化实践&#xff0c;提高了开发效率和代码质量。在这个领域中&#xff0c;构建工具扮演着核心角色&#xff0c;而Webpack和Vite则是其中的两位重要角色。本文将探讨前端工程化的演进历程&#…

Leetcode 3543. Maximum Weighted K-Edge Path

Leetcode 3543. Maximum Weighted K-Edge Path 1. 解题思路2. 代码实现 题目链接&#xff1a;3543. Maximum Weighted K-Edge Path 1. 解题思路 这一题思路上就是一个遍历的思路&#xff0c;我们只需要考察每一个节点作为起点时&#xff0c;所有长为 k k k的线段的长度&…

香橙派zero3 安卓TV12,更换桌面launcher,开机自启动kodi

打开开发者模式&#xff0c;连击版本号&#xff0c;基本上都是这样。 adb连接 查找桌面包名 adb shell dumpsys activity activities | findstr mResumedActivity 禁用原桌面com.android.tv.launcher&#xff0c;已经安装了projectivylauncher434.apk桌面。 adb shell pm …

半小时快速入门Spring AI:使用腾讯云编程助手CodeBuddy 开发简易聊天程序

引言 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;越来越多的开发者开始探索如何将AI集成到自己的应用中。人工智能正在迅速改变各行各业的工作方式&#xff0c;从自动化客服到智能推荐系统&#xff0c;AI的应用几乎无处不在。Spring AI作为一种开源框架…

【unity游戏开发——编辑器扩展】使用MenuItem自定义菜单栏拓展

免职声明&#xff1a; 1、目前本博客分享的大部分知识产出方式是&#xff1a;学习别人知识自己实际做一遍自己的理解扩展内容自己整理、归纳、总结再分享。2、正如博客简介所说&#xff1a;这里没有教程&#xff0c;这里只做学习分享。所有的内容都是学习笔记&#xff0c;可以说…

数学复习笔记 7

前言 现在复习线代基础&#xff0c;慢慢打基础。。 转置 方阵转置之后行列式保持不变。我的笔记感觉主要不是整理知识点&#xff0c;主要是把我的一些理解记录下来。这才是我自己的东西&#xff0c;那些需要记住的知识和内容记住就好了。记住转置有四个性质&#xff0c;在讲…

AIGC时代的内容安全:AI检测技术如何应对新型风险挑战?

在数字时代&#xff0c;互联网内容以文本、图像、音频和视频等形式呈现爆发式增长&#xff0c;深刻塑造了信息传播的格局。然而&#xff0c;内容的快速传播也带来了严峻挑战&#xff1a;违法信息&#xff08;如涉黄、涉政&#xff09;、虚假广告、网络暴力等内容不仅威胁用户体…

PyTorch中的nn.Embedding应用详解

PyTorch 文章目录 PyTorch前言一、nn.Embedding的基本原理二、nn.Embedding的实际应用简单的例子自然语言处理任务 前言 在深度学习中&#xff0c;词嵌入&#xff08;Word Embedding&#xff09;是一种常见的技术&#xff0c;用于将离散的词汇或符号映射到连续的向量空间。这种…

AI 检测原创论文:技术迷思与教育本质的悖论思考

当高校将 AI 写作检测工具作为学术诚信的 "电子判官"&#xff0c;一场由技术理性引发的教育异化正在悄然上演。GPT-4 检测工具将人类创作的论文误判为 AI 生成的概率高达 23%&#xff08;斯坦福大学 2024 年研究数据&#xff09;&#xff0c;这种 "以 AI 制 AI&…

langchain4j集成QWen、Redis聊天记忆持久化

langchain4j实现聊天记忆默认是基于进程内存的方式&#xff0c;InMemoryChatMemoryStore是具体的实现了&#xff0c;是将聊天记录到一个map中&#xff0c;如果用户大的话&#xff0c;会造成内存溢出以及数据安全问题。位了解决这个问题 langchain4提供了ChatMemoryStore接口&am…

Tomcat 日志体系深度解析:从访问日志配置到错误日志分析的全链路指南

一、Tomcat 核心日志文件架构与核心功能 1. 三大基础日志文件对比&#xff08;权威定义&#xff09; 日志文件数据来源核心功能典型场景catalina.out标准输出 / 错误重定向包含 Tomcat 引擎日志与应用控制台输出&#xff08;System.out/System.err&#xff09;排查 Tomcat 启…

万物互联时代:ONVIF协议如何重构安防监控系统架构

前言 一、ONVIF协议是什么 ONVIF&#xff08;Open Network Video Interface Forum&#xff0c;开放式网络视频接口论坛&#xff09;是一种全球性的开放行业标准&#xff0c;由安讯士&#xff08;AXIS&#xff09;、博世&#xff08;BOSCH&#xff09;和索尼&#xff08;SONY&…

leetcode - 双指针问题

文章目录 前言 题1 移动零&#xff1a; 思路&#xff1a; 参考代码&#xff1a; 题2 复写零&#xff1a; 思考&#xff1a; 参考代码&#xff1a; 题3 快乐数&#xff1a; 思考&#xff1a; 参考代码&#xff1a; 题4 盛最多水的容器&#xff1a; 思考&#xff1a;…

从概念表达到安全验证:智能驾驶功能迎来系统性规范

随着辅助驾驶事故频发&#xff0c;监管机制正在迅速补位。面对能力表达、使用责任、功能部署等方面的新要求&#xff0c;行业开始重估技术边界与验证能力&#xff0c;数字样机正成为企业合规落地的重要抓手。 2025年以来&#xff0c;围绕智能驾驶功能的争议不断升级。多起因辅…

java数组题(5)

&#xff08;1&#xff09;&#xff1a; 思路&#xff1a; 1.首先要对数组nums排序&#xff0c;这样两数之间的差距最小。 2.题目要求我们通过最多 k 次递增操作&#xff0c;使数组中某个元素的频数&#xff08;出现次数&#xff09;最大化。经过上面的排序&#xff0c;最大数…