【C#】.net core 6.0 使用第三方日志插件Log4net,配置文件详细说明

这篇具有很好参考价值的文章主要介绍了【C#】.net core 6.0 使用第三方日志插件Log4net,配置文件详细说明。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

欢迎来到《小5讲堂》
大家好,我是全栈小5。
这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解,
特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。
温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!

.net 6 log4net,C#,c#,.netcore,开发语言

背景

最近在最一些并发方式的测试,发现自己之前封装的一个日志插件报错,
尽管在写日志时已经通过锁的方式进行了优化,但是依然无法解决并发时同一个文件同时访问情况,
会频繁出现报错提示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 模式能够满足大多数需求,但在特定情况下,你可能需要根据系统性能和并发访问的情况来选择合适的锁定模式。

输出控制台

简单输出

1)appender标签
name,自定义命名,用于后面ref使用
type,类型,log4net.Appender.ConsoleAppender,控制台类型
2)Layout标签
type,类型,log4net.Layout.PatternLayout
3)conversionPattern标签
value,输出值格式,占位符,时间、线程、等级、日志器名称、日志信息、换行

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
        <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%date [%thread] %-5level %logger - %message%line" />
            </layout>
        </appender>

        <root>
            <level value="DEBUG" />
            <appender-ref ref="ConsoleAppender" />
        </root>
</log4net>

%date [%thread] %-5level %logger - %message%newline
2024-03-11 16:04:58,871 [1] DEBUG Core6TestResouce.SqlHelper - Debug message

详细输出

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="
                               时间:%date,
                               日志等级:%level,
                               日志记录器名称:%logger,
                               输出日志信息:%message,
                               输出异常信息:%exception,
                               身份标识:%identity,
                               用户名:%username,
                               属性值:%property{key},
                               方法名:%method,
                               行号:%line,
                               类名:%class,
                               文件名:%file" />
        </layout>
    </appender>

    <root>
        <level value="DEBUG" />
        <appender-ref ref="ConsoleAppender" />
    </root>
</log4net>

.net 6 log4net,C#,c#,.netcore,开发语言

时间: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

输出到文档

1)appender标签
name,自定义命名,用于后面ref使用
type,类型,log4net.Appender.FileAppender,文件类型
2)file标签
value,路径值,logs\logfile.txt
3)appendToFile标签
value,值,true,追加内容的方式到文本文档里
4)lockingModel标签
2)Layout标签
type,类型,log4net.Layout.PatternLayout
3)conversionPattern标签
value,输出值格式,占位符,时间、线程、等级、日志器名称、日志信息、换行

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
    <appender name="FileAppender" type="log4net.Appender.FileAppender">
        <file value="logs\logfile.txt" />
        <appendToFile value="true" />
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger - %message%line" />
        </layout>
    </appender>

    <root>
        <level value="DEBUG" />
        <appender-ref ref="FileAppender" />
    </root>
</log4net>

.net 6 log4net,C#,c#,.netcore,开发语言

自定义文件名

在 .NET Core 6.0 中使用 log4net,可以通过配置文件中的 元素来设置日志文件的路径和文件名。
1)file标签
type,类型,log4net.Util.PatternString,设置时间匹配类型
value,路径值,logs%date{yyyyMMddHH}.log
2)下面是一个示例的 log4net 配置文件片段,演示如何将日志文件存储在按时间组织的文件夹中,并自定义日志文件名

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
    <appender name="FileAppender" type="log4net.Appender.FileAppender">
        logs2024M3d11
        <file type="log4net.Util.PatternString" value="logs\%date{yyyyMMddHH}.log" />

        <appendToFile value="true" />
        
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger - %message - %line" />
        </layout>
    </appender>

    <root>
        <level value="DEBUG" />
        <appender-ref ref="FileAppender" />
    </root>
</log4net>

.net 6 log4net,C#,c#,.netcore,开发语言

文件大小

1)rollingStyle标签
创建日志文件的方式,可选值:Date(日期)、文件大小(Size、,混合(Composite)
2)maximumFileSize标签
单个文件大小。单位:KB|MB|GB
3)maxSizeRollBackups标签
最多保留的文件数,设为"-1"则不限

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
    <!--定义日志级别-->
    <root>
        <level value="FATAL"/>
        <level value="ERROR"/>
        <level value="WARN"/>
        <level value="INFO"/>
        <level value="DEBUG"/>
        <appender-ref ref="FATALAppender" />
        <appender-ref ref="ERRORAppender" />
        <appender-ref ref="WARNAppender" />
        <appender-ref ref="INFOAppender" />
        <appender-ref ref="DebugAppender" />
    </root>

    <!--严重错误日志-->
    <appender name="FATALAppender" type="log4net.Appender.RollingFileAppender">
        <file type="log4net.Util.PatternString" value="logs\Fatal\%date{yyyyMMddHH}.log" />

        <appendToFile value="true" />
        <rollingStyle value="Size" />
        <maximumFileSize value="100KB"/>
        <maxSizeRollBackups value="-1"/>

        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger - %message - %line" />
        </layout>
    </appender>

    <!--调试日志-->
    <appender name="DebugAppender" type="log4net.Appender.RollingFileAppender">
        <file type="log4net.Util.PatternString" value="logs\Debug\%date{yyyyMMddHH}.log" />

        <appendToFile value="true" />
        <rollingStyle value="Size" />
        <maximumFileSize value="100KB"/>
        <maxSizeRollBackups value="-1"/>

        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger - %message - %line" />
        </layout>
    </appender>
</log4net>

.net 6 log4net,C#,c#,.netcore,开发语言

相关文章

【C#】使用代码实现龙年春晚扑克牌魔术(守岁共此时),代码实现篇
【C#】使用代码实现龙年春晚扑克牌魔术(守岁共此时),流程描述篇
【C#】约瑟夫原理举例2个代码实现
【C#】List泛型数据集如何循环移动,最后一位移动到第一位,以此类推
【C#】获取文本中的链接,通过正则表达式的方法获取以及优化兼容多种格式

温故而知新,不同阶段重温知识点,会有不一样的认识和理解,博主将巩固一遍知识点,并以实践方式和大家分享,若能有所帮助和收获,这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。文章来源地址https://www.toymoban.com/news/detail-848589.html

到了这里,关于【C#】.net core 6.0 使用第三方日志插件Log4net,配置文件详细说明的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 扩展Nginx的无限可能:掌握常见扩展模块和第三方插件的使用方法

    Nginx是一款高性能的开源Web服务器和反向代理服务器。它具有模块化的架构,可以通过扩展模块和插件来增强其功能。在本文中,我将围绕Nginx的扩展模块和插件进行讲解,并提供一些常见的扩展模块和第三方插件的示例。 Nginx的扩展模块是编译到Nginx中的可选组件,可以通过

    2024年02月08日
    浏览(43)
  • UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

    完全没接触过C++的插件和DLL,因为MediaPipe需要自己创建插件并编译DLL库,所以把该踩的坑都踩了一遍,几天终于把DLL加载给弄明白了.创作不易,还请点个赞! 参考资料: 封装自己的项目为dll给其他用户使用_哔哩哔哩_bilibili 【UE5】UE项目中静态库还没整明白吧,动态链接库又来了_哔

    2023年04月21日
    浏览(76)
  • 如何在微信小程序里面使用npm安装第三方插件(以安装vant ui为例)

    1.在cmd里或者是终端里,找到对应的项目,并执行下面的命令,用来初始化package.json文件。 2.勾选下图选项 3.执行下面的命令安装vant ui 然后你会发现多了一个node_modules文件, 里面存的就是第三方组件。 4.最后一步,每次安装完一个新的第三方插件都要执行“构建npm” 执行完

    2024年02月14日
    浏览(67)
  • 项目中拖拽元素,可以使用html的draggable属性,当然也可以用第三方插件interact

    html的draggable属性需要自己写逻辑,用人家封装好的代码简单逻辑清楚,非常香 链接: https://blog.csdn.net/vvv3171071/article/details/122705408

    2024年02月08日
    浏览(54)
  • pytest 第三方插件

    目录 前言: 顺序执行:pytest-ordering 失败重试:pytest-rerunfailures 并行执行:pytest-xdist pytest 是一个广泛使用的 Python 测试框架。它具有强大的测试运行器、测试驱动开发和测试结果可视化等功能。除此之外,pytest 还支持许多第三方插件,这些插件可以为测试带来更多的便利和

    2024年02月16日
    浏览(46)
  • 微信小程序第三方插件申请

    记录下小程序申请插件的页面,之前自己找了很久,方便后续使用 1. 先找到自己需要的第三方插件的appid 2. 登录微信公众平台后台(mp.weixin.qq.com) 3. 打开小程序插件页面          https://mp.weixin.qq.com/wxopen/plugindevdoc?appid=插件appid         如小程序直播的页面就是:http

    2024年02月09日
    浏览(58)
  • JMeter进阶-常用第三方插件讲解

    准备工作: 1.最新版本的JMeter是默认不展示插件管理器的,所以我们需要手动添加插件管理器 2.下载地址:https://jmeter-plugins.org/install/Install/,下载插件plugins-manager.jar,然后将jar包放在apache-jmeter-x.x.xlibext路径下,重新打开jmeter客户端即可在“选项”下面可以看到了Plugins-Ma

    2023年04月08日
    浏览(49)
  • uniapp原生插件开发调用第三方SDK

    uniapp安卓官方SDK Android 离线SDK - 正式版 | uni小程序SDK 官方uni原生插件开发教程(android)网址: 简介 | uni小程序SDK 第一步,开发环境的准备 下载uniapp安卓官方SDK待后面使用,解压完成如下图所示。 JAVA环境 jdk,打开cmd输入java -version查看自己的jdk版本,官方文档中提示jdk版本应

    2024年02月15日
    浏览(52)
  • 如何在没有第三方.NET库源码的情况,调试第三库代码?

    大家好,我是沙漠尽头的狼。 本方首发于Dotnet9,介绍使用dnSpy调试第三方.NET库源码,行文目录: 安装dnSpy 编写示例程序 调试示例程序 调试.NET库原生方法 总结 dnSpy是一款功能强大的.NET程序反编译工具,可以对.NET程序进行反编译,代替库文档的功能,代码丢失或者损坏可直

    2024年02月08日
    浏览(60)
  • VScode第三方插件打开sqlite数据库

    最近在做的东西涉及SQLite数据库(一种常用在移动端的数据库类型,和mysql这些主流数据库也差不多),为了方便调试开发,数据库预览很重要;同时,mac预览数据库的软件多数是要收费的,且我体验时间用了两款也不是特别满意。 针对只是要预览数据库不做太多操作,需要

    2024年02月03日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包