C#第三方日志插件Log4net的配置文件详解

 更新时间:2024年03月13日 10:11:26   作者:全栈小5  
Log4net是一个稳定且功能丰富的日志库,已经存在多年并且被广泛使用,这篇文章主要为大家详细介绍了Log4net日志插件的配置文件信息,感兴趣的可以了解下

背景

最近在最一些并发方式的测试,发现自己之前封装的一个日志插件报错,尽管在写日志时已经通过锁的方式进行了优化,但是依然无法解决并发时同一个文件同时访问情况,会频繁出现报错提示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>

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

文件大小

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>

以上就是C#第三方日志插件Log4net的配置文件详解的详细内容,更多关于C# Log4net日志插件的资料请关注脚本之家其它相关文章!

相关文章

  • C#字符串使用密钥进行加解密

    C#字符串使用密钥进行加解密

    这篇文章主要为大家详细介绍了C#字符串使用密钥进行加解密的代码,C#字符串加密和解密实现代码,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • 将DataTable转换成List&lt;T&gt;实现思路及示例代码

    将DataTable转换成List&lt;T&gt;实现思路及示例代码

    首先,这是我写的一个通用转换类,完成此类操作。也是实现这个功能最核心的部分。需要的朋友可以过来参考下,希望对大家有所帮助
    2013-11-11
  • C#实现的三种模拟自动登录和提交POST信息的方法

    C#实现的三种模拟自动登录和提交POST信息的方法

    这篇文章主要介绍了C#实现的三种模拟自动登录和提交POST信息的方法,分别列举了WebBrowser、WebClient及HttpWebRequest实现自动登录及提交POST的相关实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • C#中的Socket编程详解

    C#中的Socket编程详解

    本文详细讲解了C#中的Socket编程,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01
  • C#画笔Pen绘制自定义线的帽子

    C#画笔Pen绘制自定义线的帽子

    这篇文章主要介绍了C#画笔Pen绘制自定义线的帽子,实例分析了画笔Pen的使用技巧,需要的朋友可以参考下
    2015-06-06
  • 深入解析C#中的泛型类与泛型接口

    深入解析C#中的泛型类与泛型接口

    这篇文章主要介绍了C#中的泛型类与泛型接口,对泛型的支持是C#语言的重要特性,需要的朋友可以参考下
    2016-02-02
  • C#实现给定字符串生成MD5哈希的方法

    C#实现给定字符串生成MD5哈希的方法

    这篇文章主要介绍了C#实现给定字符串生成MD5哈希的方法,涉及C#操作字符串的相关技巧,需要的朋友可以参考下
    2015-06-06
  • c#使用nsoup解析html乱码解决方法分享 nsoup教程

    c#使用nsoup解析html乱码解决方法分享 nsoup教程

    NSoup是JSoup的Net移植版本。使用方法基本一致。如果项目涉及HTML的处理,强烈推荐NSoup。但是遗憾的是NSoup默认的编码是UTF-8,处理中文有乱码,下面给出二种解决方法
    2014-01-01
  • C#环形队列的实现方法详解

    C#环形队列的实现方法详解

    这篇文章先是简单的给大家介绍了什么是环形队列和环形队列的优点,然后通过实例代码给大家介绍C#如何实现环形队列,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-09-09
  • C# 泛型数组学习小结

    C# 泛型数组学习小结

    C# 泛型数组学习中我们需要注意什么事项呢?C# 泛型数组的使用又是如何呢?那么本文就向你详细介绍这方面的内容
    2012-09-09

最新评论