电商类网站开发定制,宁波咨询网站设计,网页制作免费网站制作,wordpress数据库设计优缺点欢迎来到《小5讲堂》 大家好#xff0c;我是全栈小5。 这是《C#》系列文章#xff0c;每篇文章将以博主理解的角度展开讲解#xff0c; 特别是针对知识点的概念进行叙说#xff0c;大部分文章将会对这些概念进行实际例子验证#xff0c;以此达到加深对知识点的理解和掌握。… 欢迎来到《小5讲堂》 大家好我是全栈小5。 这是《C#》系列文章每篇文章将以博主理解的角度展开讲解 特别是针对知识点的概念进行叙说大部分文章将会对这些概念进行实际例子验证以此达到加深对知识点的理解和掌握。 温馨提示博主能力有限理解水平有限若有不对之处望指正 目录 背景占位符文件锁定输出控制台简单输出详细输出 输出到文档自定义文件名文件大小相关文章 背景
最近在最一些并发方式的测试发现自己之前封装的一个日志插件报错 尽管在写日志时已经通过锁的方式进行了优化但是依然无法解决并发时同一个文件同时访问情况 会频繁出现报错提示xxx.txt文件正在被另一个进程访问而不无法操作。 基于这个原因暂时没有想好很好的优化方案从而考虑使用第三方优秀日志插件来解决并发情况。 本篇文章主要来分析下Log4net日志插件的配置文件信息。
占位符
在 log4net 中占位符是在日志输出时使用它们会被实际的值替换。 在 .NET Core 6.0 中使用 log4net可以在 layout 元素的 ConversionPattern 属性中使用如下占位符
1.%date 输出日志时间戳格式为 yyyy-MM-dd HH:mm:ss,fff。
2.%level 输出日志级别如 INFO、DEBUG、WARN、ERROR、FATAL。
3.%logger 输出日志记录器名称。
4.%message 输出日志消息。
5.%exception 输出异常信息。
6.%identity 输出当前用户或线程身份标识。
7.%username 输出当前 Windows 用户名。
8.%property{key} 输出指定键名的 log4net 属性值。
9.%method 输出正在运行的方法名。
10.%line 输出正在运行的方法的行号。
11.%class 输出正在运行的方法所在的类名。
12.%file 输出正在运行的方法所在的文件名。
文件锁定
在 log4net 配置中 lockingModel 标签用于定义日志文件的锁定行为它会影响多个线程或进程同时对日志文件进行写入操作时的行为。 lockingModel 标签有两种常用的值可以选择 1.FileAppender.MinimalLock 使用这种锁定模式时文件会被用于写入期间短暂地锁定。这可以确保写入操作是原子的但在某些情况下可能会影响性能。 2.FileAppender.ExclusiveLock 这是默认的锁定模式它会独占文件直到写入操作完成。这种锁定模式会确保在写入期间不会有其他进程或线程可以访问日志文件但可能会影响并发性能。 lockingModel 标签允许你根据实际情况选择合适的锁定行为以确保日志文件的完整性和并发访问的效率。 通常情况下默认的 ExclusiveLock 模式能够满足大多数需求但在特定情况下你可能需要根据系统性能和并发访问的情况来选择合适的锁定模式。 输出控制台
简单输出
1appender标签 name自定义命名用于后面ref使用 type类型log4net.Appender.ConsoleAppender控制台类型 2Layout标签 type类型log4net.Layout.PatternLayout 3conversionPattern标签 value输出值格式占位符时间、线程、等级、日志器名称、日志信息、换行
?xml version1.0 encodingutf-8 ?
log4netappender nameConsoleAppender typelog4net.Appender.ConsoleAppenderlayout typelog4net.Layout.PatternLayoutconversionPattern value%date [%thread] %-5level %logger - %message%line //layout/appenderrootlevel valueDEBUG /appender-ref refConsoleAppender //root
/log4net%date [%thread] %-5level %logger - %message%newline 2024-03-11 16:04:58,871 [1] DEBUG Core6TestResouce.SqlHelper - Debug message 详细输出
?xml version1.0 encodingutf-8 ?
log4netappender nameConsoleAppender typelog4net.Appender.ConsoleAppenderlayout typelog4net.Layout.PatternLayoutconversionPattern value时间%date日志等级%level日志记录器名称%logger输出日志信息%message输出异常信息%exception身份标识%identity用户名%username属性值%property{key}方法名%method行号%line类名%class文件名%file //layout/appenderrootlevel valueDEBUG /appender-ref refConsoleAppender //root
/log4net时间2024-03-11 16:12:49,888 日志等级DEBUG 日志记录器名称Core6TestResouce.SqlHelper 输出日志信息Debug message 输出异常信息 身份标识 用户名HLH-20220711RIK\Administrator 属性值(null) 方法名Test 行号15 类名Core6TestResouce.SqlHelper 文件名G:\Core6TestResouce\Core6TestResouce\SqlHelper.cs 输出到文档
1appender标签 name自定义命名用于后面ref使用 type类型log4net.Appender.FileAppender文件类型 2file标签 value路径值logs\logfile.txt 3appendToFile标签 value值true追加内容的方式到文本文档里 4lockingModel标签 2Layout标签 type类型log4net.Layout.PatternLayout 3conversionPattern标签 value输出值格式占位符时间、线程、等级、日志器名称、日志信息、换行
?xml version1.0 encodingutf-8 ?
log4netappender nameFileAppender typelog4net.Appender.FileAppenderfile valuelogs\logfile.txt /appendToFile valuetrue /lockingModel typelog4net.Appender.FileAppenderMinimalLock /layout typelog4net.Layout.PatternLayoutconversionPattern value%date [%thread] %-5level %logger - %message%line //layout/appenderrootlevel valueDEBUG /appender-ref refFileAppender //root
/log4net自定义文件名
在 .NET Core 6.0 中使用 log4net可以通过配置文件中的 元素来设置日志文件的路径和文件名。 1file标签 type类型log4net.Util.PatternString设置时间匹配类型 value路径值logs%date{yyyyMMddHH}.log 2下面是一个示例的 log4net 配置文件片段演示如何将日志文件存储在按时间组织的文件夹中并自定义日志文件名
?xml version1.0 encodingutf-8 ?
log4netappender nameFileAppender typelog4net.Appender.FileAppenderlogs2024M3d11file typelog4net.Util.PatternString valuelogs\%date{yyyyMMddHH}.log /appendToFile valuetrue /lockingModel typelog4net.Appender.FileAppenderMinimalLock /layout typelog4net.Layout.PatternLayoutconversionPattern value%date [%thread] %-5level %logger - %message - %line //layout/appenderrootlevel valueDEBUG /appender-ref refFileAppender //root
/log4net文件大小
1rollingStyle标签 创建日志文件的方式可选值Date日期、文件大小Size、,混合Composite 2maximumFileSize标签 单个文件大小。单位:KB|MB|GB 3maxSizeRollBackups标签 最多保留的文件数设为-1则不限
?xml version1.0 encodingutf-8 ?
log4net!--定义日志级别--rootlevel valueFATAL/level valueERROR/level valueWARN/level valueINFO/level valueDEBUG/appender-ref refFATALAppender /appender-ref refERRORAppender /appender-ref refWARNAppender /appender-ref refINFOAppender /appender-ref refDebugAppender //root!--严重错误日志--appender nameFATALAppender typelog4net.Appender.RollingFileAppenderfile typelog4net.Util.PatternString valuelogs\Fatal\%date{yyyyMMddHH}.log /appendToFile valuetrue /rollingStyle valueSize /maximumFileSize value100KB/maxSizeRollBackups value-1/lockingModel typelog4net.Appender.FileAppenderMinimalLock /layout typelog4net.Layout.PatternLayoutconversionPattern value%date [%thread] %-5level %logger - %message - %line //layout/appender!--调试日志--appender nameDebugAppender typelog4net.Appender.RollingFileAppenderfile typelog4net.Util.PatternString valuelogs\Debug\%date{yyyyMMddHH}.log /appendToFile valuetrue /rollingStyle valueSize /maximumFileSize value100KB/maxSizeRollBackups value-1/lockingModel typelog4net.Appender.FileAppenderMinimalLock /layout typelog4net.Layout.PatternLayoutconversionPattern value%date [%thread] %-5level %logger - %message - %line //layout/appender
/log4net相关文章
【C#】使用代码实现龙年春晚扑克牌魔术守岁共此时代码实现篇 【C#】使用代码实现龙年春晚扑克牌魔术守岁共此时流程描述篇 【C#】约瑟夫原理举例2个代码实现 【C#】List泛型数据集如何循环移动最后一位移动到第一位以此类推 【C#】获取文本中的链接通过正则表达式的方法获取以及优化兼容多种格式 温故而知新不同阶段重温知识点会有不一样的认识和理解博主将巩固一遍知识点并以实践方式和大家分享若能有所帮助和收获这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。