.Net core2.0日志组件Log4net、Nlog简单性能测试的示例分析
创始人
2024-11-27 18:42:45
0次

测试环境

开发工具: Vsual Studio 2017 15.3

框架版本: .net core 2.0

操作系统:window10 Enterprise 1703

硬件配置:CPU I3-4170 3.7GHz,内存 8G,固态硬盘

日志组件

log4net 2.0.8

nlog 5.0.0-beta10

测试用例

1.不启用Buffer,连续插入20万行字符串到文件,单文件最大1MB。

2.启用Buffer为100,连续插入20万行字符串到文件,单文件最大1MB。

测试方法

xunit单元测试。

测试代码

using System;
using System.Diagnostics;
using System.IO;
using Xunit;
using Xunit.Abstractions;
namespace Demo.Logging.Tests
{
  /// 
  /// Log4net、Nlog日志文件写入对比
  /// 
  public class BigDataTest
  {
    private readonly ITestOutputHelper output;
    public BigDataTest(ITestOutputHelper outputHelper)
    {
      output = outputHelper;
    }

    /// 
    /// 使用Log4net连续插入20W行字符串
    /// 
    [Fact]
    public void Log4netTest()
    {
      log4net.Repository.ILoggerRepository repository = log4net.LogManager.CreateRepository("NETCoreRepository");
      var fileInfo = new FileInfo("config/log4net.config");
      log4net.Config.XmlConfigurator.Configure(repository, fileInfo);
      log4net.Config.BasicConfigurator.Configure(repository);
      log4net.ILog log = log4net.LogManager.GetLogger(repository.Name, "NETCorelog4net");

      var total = 200000;
      var sw = new Stopwatch();
      sw.Start();
      for (int i = 0; i < total; i++)
      {
        log.Info("log4 bigdata test: " + i);
      }
      sw.Stop();
      log.Info($"total: {total}, Elapsed:{sw.ElapsedMilliseconds}");
      output.WriteLine($"Log4net测试 total: {total}, Elapsed:{sw.ElapsedMilliseconds}");
    }

    /// 
    /// 使用Nlog连续插入20W行字符串
    /// 
    [Fact]
    public void NlogTest()
    {

      NLog.Logger log = NLog.LogManager.GetCurrentClassLogger();
      var total = 200000;
      var sw = new Stopwatch();
      sw.Start();
      for (int i = 0; i < total; i++)
      {
        log.Info("nlog bigdata test: " + i);
      }
      sw.Stop();
      log.Info($"total: {total}, Elapsed:{sw.ElapsedMilliseconds}");
      output.WriteLine($"NLog测试 total: {total}, Elapsed:{sw.ElapsedMilliseconds}");
    }

  }
}

测试用例一:不启用缓存,连续插入20W行

1.Log4net

配置

log4net.config



 
 
  
  
   
   
   
   
   
   
   
   
    
   
  

  
  
   
   
  

 

测试结果

输出日志内容:

2017-09-11 19:38:02,276 | log4 bigdata test: 0

2017-09-11 19:38:02,279 | log4 bigdata test: 1

... ...

... ...

2017-09-11 19:38:02,279 | log4 bigdata test: 199998

2017-09-11 19:38:02,279 | log4 bigdata test: 199999

Log4net耗时:

写入行数:200000, 毫秒数:7749

2.Nlog

配置

nlog.config




 
 
  
  
 

 
  
 

测试结果

输出日志内容:

2017-09-11 19:38:02,276 | nlog bigdata test: 0

2017-09-11 19:38:02,279 | nlog bigdata test: 1

......

......

2017-09-11 19:38:02,279 | nlog bigdata test: 199998

2017-09-11 19:38:02,279 | nlog bigdata test: 199999

Nlog耗时:

写入行数:200000, 毫秒数:104468

测试用例二:启用Buffer,连续插入20W行

1.Log4net

配置 log4net.config

......

 
  
   

......

耗时:Log4net写入行数:200000, 毫秒数:4672

2.Nlog

配置

nlog.config

......

 
  
  
  
 

......

Nlog耗时:写入行数:200000, 毫秒数:1605

总结

日志组件版本环境用例(启用Buffer=100)毫秒数(不启用Buffer)毫秒数
log4net2.0.8.netcore 2.020W行文件写入46727749
nlog5.0.0-beta10.netcore 2.020W行文件写入1605104468

代码和配置文件都在上边了,不知道不同配置的机器结果如何。

大家又会倾向于nlog还是log4net? log4net无论是否启用buffer,耗时都比较稳定,10秒以内,前后差距1.66倍;nlog在启用buffer前后,耗时差距65倍 ,未启用buffer竟然需要100多秒,虽然在启用buffer后仅1.605秒。

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...