【个人博客搭建】(9)使用log4Net日志

本文探讨了.NET自带日志、Serilog和log4Net之间的异同,强调了Serilog在灵活性、可配置性和性能方面的优势,同时提到了log4Net作为成熟框架的稳定性和集成特性。
摘要由CSDN通过智能技术生成

net自带日志与Serilog、log4Net的异同

1、比较。

.NET自带的日志功能、Serilog和log4Net都是用于记录日志的库,但它们之间存在一些差异。具体分析如下:

  • 相同点
  1. 目的:它们都提供了在开发过程中记录应用程序运行情况的功能,便于开发者追踪和调试问题。
  2. 配置性:三者均支持通过配置文件或代码进行灵活的日志记录设置。
  3. 扩展性:它们都可以根据需要自定义日志格式和输出目标。
  • 不同点
  1. 灵活性和可扩展性:Serilog是一个高度可扩展的日志框架,它支持多种输出格式,包括控制台、文件、Elasticsearch等。它的特点是可配置性强,支持链式调用,可以自定义日志格式和输出方式。而log4Net也是一个成熟的日志框架,支持多种日志级别和输出目标,但在性能方面可能不如Serilog。
  2. 集成度:Serilog可以轻松与Microsoft的内置日志接口集成在一起,这使得测试应用程序变得更加容易。而log4Net作为老牌的日志库,虽然集成度也很高,但在新兴的.NET Core项目中可能需要更多的配置工作。
  3. 静态类使用:Serilog提供了静态的Log类,这可能会违反依赖反转原则,但在某些情况下(如Program类中)可能是有用的。而.NET自带的日志功能则依赖于Microsoft.Extensions.Logging,这是一个非静态的日志接口,更加符合现代软件设计的依赖注入原则。

综上所述,Serilog在性能、可配置性和灵活性方面表现较好,而log4Net作为一个成熟的日志框架,拥有稳定的用户群和丰富的文档资源。而.NET自带的日志功能则与.NET生态系统紧密集成,为开发者提供了一个开箱即用的日志解决方案。在选择日志库时,应根据项目的具体需求、团队的熟悉程度以及维护的便利性来决定。

2、最简单方式。测试自带:

/// <summary>
/// 测试连接1
/// 异常
/// </summary>
/// <param name="t">字符串</param>
/// <returns></returns>
[HttpGet]
[ApiVersionCustomRoute(SwaggerDocSettings.ApiVersions.v1)]
public string Test(string t)
{
    int i = 0;
    try
    {

        i = int.Parse(t);
    }
    catch (Exception ex)
    {
        _logger.LogError("Test接口异常:" + ex.Message.ToString());
        return "报错,不可转int类型";
    }
    return "【Test】OK.输入的是:" + i.ToString();
}

         2.1、效果:

3、log4net:

        3.1、安装相应包:log4net、Microsoft.Extensions.Logging.Log4Net.AspNetCore

        3.2、添加配置文件:log4net.config。然后右击属性,改为始终复制到目录。

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
	<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
		<!--日志输入路径-->
		<file value="Logs/Log-" />
		<!--按日期命名文件-->
		<datePattern value="yyyy-MM-dd'.log'" />
		<!--是否只写到一个文件中-->
		<staticLogFileName value="false" />
		<appendToFile value="true" />
		<rollingStyle value="Composite" />
		<!--最多产生文件数超过的话保留最新-->
		<maxSizeRollBackups value="1000" />
		<maximumFileSize value="10MB" />

		<!--防止多线程时不能写Log,官方说线程非安全-->
		<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
		
		<layout type="log4net.Layout.PatternLayout">
			<!--时间、线程、级别、、信息、换行、堆栈信息、换行、-->
			<conversionPattern value="%date [%thread] %-5level %logger - %message%newline%exception" />
			<header value="&#xA;----------------------header--------------------------&#xA;" />
			<footer value="&#xA;----------------------footer--------------------------&#xA;"/>
		</layout>
	</appender>
	<root>
		<level value="DEBUG" />
		<!--上边已配置的appender节点的名称-->
		<appender-ref ref="RollingFile" />
	</root>
</log4net>

        3.3、注入服务:

builder.Host.ConfigureLogging(loggingBuilder =>
{
    loggingBuilder.AddLog4Net();
});

        3.4、测试:

        public ApiResult Test(string t)
        {
            int i = 0;
            try
            {

                i = int.Parse(t);
            }
            catch (Exception ex)
            {
                string str = "Test接口异常:" + ex.Message.ToString();
                //_logger.LogError(str); 
                _logger.LogError("1、" + str, ex);
                _logger.LogError("2、" + str + "【】" + ex.ToString());
                _logger.LogError("3、" + str);
                _logger.LogError(ex, "4、" + str);

                return ApiResultHelper.Error("转化失败", ex.Message.ToString());
            }
            i = int.Parse(t);
            return ApiResultHelper.Success("转化成功!");
        }

        3.5、输出成功:(建议使用第4条的计入方式)

        3.6、网上还有很多使用帮助类的形式添加日志记录,但是我感觉没有这种简单,相当于替换了原有的。但是帮助类那种可拓展的更丰富吧,看个人使用情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值