log4j2异步日志配置及官方文档的问题澄清
配置及demo
方法一全部打开
加启动参数 -DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
启动参数的这个key有点说法:
按官方文档说明http://logging.apache.org/log4j/2.x/manual/async.html#AllAsync key是-Dlog4j2.contextSelector=...
但是你如果亲自做实验,或亲自使用过,可能就会发现问题,简单的说跟你使用的版本有关:
-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector // 全版本支持
-Dlog4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector // 2.10.0以后版本支持
仔细看官方文档上有一句
Note that system properties were renamed into a more consistent style in Log4j 2.10.0. All old property names are still supported which are documented here.
相关代码(2.10.0以后版本):
参见 org.apache.logging.log4j.util.PropertiesPropertySource 和
org.apache.logging.log4j.util.PropertiesUtil.Environment
Environment中有三组配置数据,key不同,业务语义相同:
literal
{java.runtime.name=Java(TM) SE Runtime Environment}
normalized
{log4j2.javaRuntimeName=Java(TM) SE Runtime Environment} key 是log4j2.前缀 加上驼峰形式变量
tokenized
{[java, runtime, name]=Java(TM) SE Runtime Environment} key是list
方法二同步异步混合
<!-- 使用异步日志时,启用如下配置,异步配置默认不打印location。此种方法无需配置JVM启动参数。 -->
<asyncRoot level="debug">
<AppenderRef ref="Console" />
</asyncRoot>
一些说明
- 默认不打印location信息,诸如代码行号,类,方法等。 如果需要的话需要加上
includeLocation="true",但是按官方说法会慢30-100倍。 - 异步的时候,如果在真正打印日志时,日志信息中所引用的对象中的字段值发生了改变,比如"hello {}", user.name这种。会不会影响打印日志的准确性。答案是不会,因为log4j做了snapshot机制。
异步日志的弊端
异步日志不是只有优点没有弊端的,官方给出了一些不使用的场景(Drawbacks):
- 异常处理。即使有异常处理器,也不能覆盖所有的案例。
- 在一些使用了诸如 MapMessage 和 StructuredDataMessage 这种没法通过snapshot规避异步打印时日志信息可能变化的问题
- 在CPU很少的环境,比如就1个CPU
- 打印日志的速度远远超过
appender的吞吐。此时异步并不能解决问题,需要用更快的appender。
log4j2异步日志配置及官方文档的问题澄清的更多相关文章
- Dubbo集群配置和官方文档
集群配置: https://blog.csdn.net/zh520qx/article/details/63679908 https://www.cnblogs.com/hd3013779515/p/ ...
- PHPStorm配置Xdebug官方文档
1 配置Xdebug 下载Xdebug 下载与您的PHP版本兼容的Xdebug扩展,并将其保存在该php/文件夹中. php/文件夹 的位置是在安装PHP引擎期间定义的. 如果您使用的是AMP软件包, ...
- kafka安装配置及操作(官方文档)http://kafka.apache.org/documentation/(有单节点多代理配置)
https://www.cnblogs.com/biehongli/p/7767710.html w3school https://www.w3cschool.cn/apache_kafka/apac ...
- Spring 4 官方文档学习(十一)Web MVC 框架之配置Spring MVC
内容列表: 启用MVC Java config 或 MVC XML namespace 修改已提供的配置 类型转换和格式化 校验 拦截器 内容协商 View Controllers View Reso ...
- gRPC官方文档(异步基础: C++)
文章来自gRPC 官方文档中文版 异步基础: C++ 本教程介绍如何使用 C++ 的 gRPC 异步/非阻塞 API 去实现简单的服务器和客户端.假设你已经熟悉实现同步 gRPC 代码,如gRPC 基 ...
- Hanlp(汉语言处理包)配置、使用、官方文档
配置使用教程:https://github.com/hankcs/HanLP Hanlp官方文档:http://www.hankcs.com/nlp/hanlp.html 参考API:http://h ...
- Spring Cloud官方文档中文版-Spring Cloud Config(上)-服务端(配置中心)
官方文档地址为:http://cloud.spring.io/spring-cloud-static/Dalston.SR2/#spring-cloud-feign 文中例子我做了一些测试在:http ...
- VScode 配置c/c++环境(结合各大网站的blog和官方文档)
第一步:下载mingw64 首先,在各大搜索引擎上搜索mingw64,进入其官网下载即可 需要注意的是,下载默认的是先从网页上下载下载器,再进行选择下载.但是在部分电脑上下载会出现什么mingw64. ...
- 【采坑小计】thanos receiver的官方文档中,并未说明tsdb落盘的配置方式
官方文档的地址在:https://thanos.io/tip/components/receive.md/ 一开始以为落盘的时间间隔是:--tsdb.retention=15d 实际测试中发现,tha ...
随机推荐
- VS中生成网站和发布网站的区别
VS中生成网站和发布网站的区别 生成网站:是网站项目的编译. 我们知道像一样的C#编译性语言,在运行程序的时候,首先都要经过编译成计算机识别的二进制代码,才能运行.还有网站编译后,浏览 ...
- Mybatis-Spring整合Spring
因为 MyBatis 用 SqlSessionFactory 来创建 SqlSession ,SqlSessionFactoryBuilder 创建 SqlSessionFactory ,而在 Myb ...
- 交互ajax
原生的js封装ajax1.创建ajax对象var oAjax=new XMLHttpRequest();//不兼容IE6var oAjax=new ActiveXobject('Microsoft.X ...
- 新建framework的bundle资源 linker command failed with exit code 1解決
enable bitcode 设为no
- Codeforces Round #323 (Div. 2) D 582B Once Again...(快速幂)
A[i][j]表示在循环节下标i开头j结尾的最长不减子序列,这个序列的长度为p,另外一个长度为q的序列对应的矩阵为B[i][j], 将两序列合并,新的序列对应矩阵C[i][j] = max(A[i][ ...
- NOIP2018提高组Day1 解题报告
前言 关于\(NOIP2018\),详见此博客:NOIP2018学军中学游记(11.09~11.11). 这次\(NOIP\ Day1\)的题目听说很简单(毕竟是三道原题),然而我\(T3\)依然悲剧 ...
- 使用webpack从零开始搭建react项目
webpack中文文档 webpack的安装 yarn add webpack@3.10.1 --dev 需要处理的文件类型 webpack常用模块 webpack-dev-server yarn a ...
- opencv使用 findContours
http://www.jb51.net/article/132217.htm https://www.jianshu.com/p/4bc3349b4611 https://blog.csdn.net/ ...
- Softmax回归(Softmax Regression
多分类问题 在一个多分类问题中,因变量y有k个取值,即.例如在邮件分类问题中,我们要把邮件分为垃圾邮件.个人邮件.工作邮件3类,目标值y是一个有3个取值的离散值.这是一个多分类问题,二分类模型在这里不 ...
- getchar输入多行字符,原格式输出(包含换行符)
#include<stdio.h> int main() { FILE fp; ]; ; char ch; while((ch=getchar())!=EOF){ str[k++]=ch; ...