java异步写入日志(异步并发写日志)

本篇文章给大家谈谈java异步写入日志,以及异步并发写日志对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

1、log4j2 异步日志原理及配置2、做java项目时在代码中添加日志怎样的添加形式比较好?3、Log4j2简介和异步日志梳理

log4j2 异步日志原理及配置

log4j2通过讲打日志流程中的部分阶段进行异步化,使得日志打印性能得到了很大的提升。

要想了解log4j如果实现异步日志,进而提升性能,就需要先了解日志打印的基本过程。

在log4j中,有两个重要的概念,分别是 Logger 、 Appender 。Logger是负责具体的生产日志数据,我们平时的Logger.info(…)就是生产日志数据的过程。Appender则是负责讲数据搬运到目的地,如console、文件、hive、网络设备等等。

而log42实现异步日志,主要包括以下两种方式:

异步Logger通过使用LMAX Disruptor环形队列和单独的处理线程,避免了锁的竞争,从而实现更高的吞吐量。队列大小默认4096,通过以下参数,可以开启异步日志。

异步Appender则是使用了java中的ArrayBlockingQueue,默认队列大小1024。log4j2官方测试,asyncLogger相比asyncAppender有更好的表现。

是否可以同时使用AsyncLogger + AsyncAppender?同时使用是否有更好表现?

据stackoverflow上回答,AsyncLogger是更新的异步机制,有更好的表现。AsyncAppender是之前的异步机制。同时使用也不会增加性能表现。见

做java项目时在代码中添加日志怎样的添加形式比较好?

异步线程写入日志,这样既不会影响业务代码,也不会影响系统性能,像你直接在主线程添加记录日志方法,如果写入比较慢的话,甚至会导致用户使用正常功能延迟而产生页面请求超时。

java异步写入日志(异步并发写日志)

Log4j2简介和异步日志梳理

log4j2是log4j 1.x 的升级版,参考了logback的一些优秀的设计,并且修复了一些问题,因此带来了一些重大的提升,主要有:

之前看官方文档摘抄了一些概念,这里懒得翻译了,使用log4j的都应该清楚,这里只是mark下。

log4j2最大的特点就是异步日志,其性能的提升主要也是从异步日志中受益,我们来看看如何使用log4j2的异步日志。

Log4j2提供了两种实现日志的方式,一个是通过AsyncAppender,一个是通过AsyncLogger,分别对应前面我们说的Appender组件和Logger组件。注意这是两种不同的实现方式,在设计和源码上都是不同的体现。

AsyncAppender是通过引用别的Appender来实现的,当有日志事件到达时,会开启另外一个线程来处理它们。需要注意的是,如果在Appender的时候出现异常,对应用来说是无法感知的。 AsyncAppender应该在它引用的Appender之后配置,默认使用 java.util.concurrent.ArrayBlockingQueue实现而不需要其它外部的类库。 当使用此Appender的时候,在多线程的环境下需要注意,阻塞队列容易受到锁争用的影响,这可能会对性能产生影响。这时候,我们应该考虑使用无所的异步记录器(AsyncLogger)。

AsyncAppender有一些配置项,如下:

除此之外还有一些其他的细节,如果感兴趣可以参考官网文档,这里就不一一列举了。

AsyncLogger才是log4j2 的重头戏,也是官方推荐的异步方式。它可以使得调用Logger.log返回的更快。你可以有两种选择:全局异步和混合异步。

全局异步

配置文件不用动:

在系统初始化的时候,增加全局参数配置:

你可以在你第一次获取Logger之前设置,也可以加载JVM启动参数里,类似

混合异步

混合异步只需要修改配置文件即可:

在上面示例的配置中,root logger就是同步的,但是com.foo.Bar的logger就是异步的。

在使用异步日志的时候需要注意一些事项,如下:

4、如果不是确实需要,不要打印location信息,比如HTML的location,或者pattern模式里的%C or $class, %F or %file, %l or %location, %L or %line, %M or %method, 等,因为Log4j需要在打印日志的时候做一次栈的快照才能获取这些信息,这对于性能来说是个极大的损耗。

关于性能测试,大家可以直奔官网,哪里有很详细的数据,这里给个图:

虽然我测下来,在immediateFlush设置为false的情况下,同步异步差不了多少,但可能是我的测试条件不符合官方的,从设计和原理上来说,异步日志,无疑是个最优的选择。

总的来说,看了一遍log4j的官网文档,对日志系统有了个比较全面的了解,以前只是copy配置来改改,没关注过很多细节,这次算是扫盲了一次。文章也只是做了个介绍,在实际使用中,还是要细细研究下配置。

另外,个人觉得异步模式无非就是在原来同步写盘的前提下,增加消息队列作为缓存,或者交个另一个线程去做,这理论上除了带来一些额外的,较小的cpu和内存的开销,应该会在高流量的时候带来不小的性能提升,对比下来,log4j2无疑是当下最值得使用的日志组件来,且可以使用其异步模式。

当然了,也不能说异步就一定好,如果日志的流量不是特别大,磁盘性能又跟得上,没有必要一定使用异步日志。

java异步写入日志的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于异步并发写日志、java异步写入日志的信息别忘了在本站进行查找喔。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月31日 12:03:57
下一篇 2024年3月31日 12:12:08

相关推荐

  • java音频分离,java音频分析

    java怎么从h264音视频流分离出视频流和音频流? 1、你可以播放视频,然后java软件录制。研究视频的编码格式,提取视频中包含的声音信息。java编码提取。没中视频格式都要具体分析。有视频处理软件,直接提取。 2、Pazera Free Audio Extractor 是一个免费的视频中提取音频工具,它可以从视频文件中无损的提取出音频输出到 MPAAC、…

    2024年5月11日
    3900
  • java火焰图,idea 火焰图

    转子发动机的工作原理? 转子发动机的原理是采用三角转子旋转运动来控制压缩和排放,将可燃气的燃烧膨胀力转化为驱动扭矩。 工作原理:一般发动机是往复运动式发动机,工作时活塞在气缸里做往复直线运动,为了把活塞的直线运动转化为旋转运动,必须使用曲柄连杆机构。转子发动机则不同,它直接将可燃气的燃烧膨胀力转化为驱动扭矩。 一般发动机是往复运动式发动机,工作时活塞在气缸里…

    2024年5月11日
    3600
  • java所有工作流引擎,java工作流引擎开发activiti

    谁知道java工作流是什么东西? 1、JAVA工作流就是一个基于JAVA开发的流程框架,一般好的工作流在开发时不用写代码,直接配置就可以了,OA系统用的比较多。 2、Java是一种广泛使用的计算机编程语言,由Sun Microsystems于1995年推出,后来被Oracle收购。Java语言具有高度的可移植性和可靠性,并且可以在不同的平台上运行,包括桌面、…

    2024年5月11日
    2700
  • javaint的范围,java中integer范围

    java中int型最大值是多少 int占32位的时候,最大可以赋值为:2147483647。也就是0x7fffffff。在计算机里我们的规定最高位是符号位。为0是正,为1负。所以最高位是不可以参加计算的。 但是java中int有正负之分,所以32个格子中占用一个格子标识正负,仅仅能用31个格子来标识数值。最后int能标识的最大/最小数字是:2的31次方即+/…

    2024年5月11日
    3500
  • 八皇后问题java,八皇后问题python

    java:八皇后问题解题思路 先声明我们根据条件可以知道皇后肯定是每行都有且只有一个所以我们创建一个数组x[t]让数组角标表示八皇后的行,用这个角标对应的数组值来确定这个皇后在这行的那一列。 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。 求解 (Pascal语言 )八皇后问题是一个古老而著名的问题,是 回溯算法 的典型例题。 java八皇后问题…

    2024年5月11日
    3300
  • java封装一个json数据类型,java封装的使用方法

    java怎么实现JSON打包UDP 1、使用toJSONString()或者全局方法JSON.stringify()。将json字符串转换为json对象的方法。在数据传输过程中,json是以文本,即字符串的形式传递的,JS操作的是JSON对象,JSON对象和JSON字符串之间的相互转换是关键。 2、在页面用js发出个ajax请求,请求类型最好写成json,建…

    2024年5月11日
    3300
  • java对话框判断用户选择,java判断怎么写

    2018年3月计算机二级考试JAVA入门知识点:Java对话框 JDialog(JFramef,String s),构造一个初始化不可见的非强制型对话框,参数f设置对话框所依赖的窗口,参数s用于设置标题。通常先声明一个JDialog类的子类,然后创建这个子类的一个对象,就建立了一个对话框。 年3月计算机二级考试JAVA入门知识点:面向对象三大特征 面向对象三…

    2024年5月11日
    3900
  • java绘制地图,java地图生成

    java3D的问题…我要利用java3d绘制一个地球可以自转的动画… 1、JAVA3D可用在三维动画、三维游戏、机械CAD等领域。 2、Java 3D是Java语言在三维图形领域的扩展,是一组应用编程接口(API)。利用Java 3D提供的API,可以编写出基于网页的三维动画、各种计算机辅助教学软件和三维游戏等等。 3、到你安装的JDK目录先找demo文件夹…

    2024年5月11日
    3900
  • mp3播放器java的简单介绍

    一个用JAVA编写的MP3播放器怎样显示同步歌词 1、(3)将MP3文件与同名的LRC歌词文件复制到MP3播放器中,而且LRC文件和相应的MP3文件必须放在同一目录下。大功告成,现在就可以实现MP3显示歌词了。 2、MP3里要想歌词与歌曲同步,首先你要下载歌曲和歌词,但是要特别注意的是所下载的歌曲和歌词必须放在同一个文件夹里,否则显示不了。 3、方式一:直接…

    2024年5月11日
    6000
  • 多维数组输出java,如何输出多维数组

    【关于java】多维数组输入问题 1、for(i=0;i4;i++) {//当i=0的时候。。 2、实在要输入几多个数组,不必用第一个输入的数来做控制。 3、主要组成 Java由四方面组成:Java编程语言,即语法。Java文件格式,即各种文件夹、文件的后缀。Java虚拟机(JVM),即处理*.class文件的解释器。Java应用程序接口(Java API)…

    2024年5月11日
    3200

发表回复

登录后才能评论



关注微信