转载:Apache Log4j2详解_ThinkWon的博客-CSDN博客_apache log4j2

随时随地技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)

简介

Apache Log4j 2是对Log4j的升级,它比其前身Log4j 1.x提供了重大改进,并提供了Logback中可用的许多改进,同时修复了Logback架构中的一些问题。是目前最优秀的Java日志框架,没有之一。

特征
API分离
Log4j的API与实现分开,使应用程序开发人员可以清楚地了解可以使用哪些类和方法,同时确保向前兼容性。这使Log4j团队能够以安全且兼容的方式进行改进。

性能提升
Log4j 2包含基于LMAX Disruptor库的下一代异步记录器。在多线程场景中,异步记录器的吞吐量比Log4j 1.x和Logback高18倍,延迟低。

自动重新加载配置
与Logback一样,Log4j 2可以在修改时自动重新加载其配置。与Logback不同,它会在重新配置发生时不会丢失日志事件。

高级过滤
与Logback一样,Log4j 2支持基于Log事件中的上下文数据,标记,正则表达式和其他组件进行过滤。此外,过滤器还可以与记录器关联。与Logback不同,您可以在任何这些情况下使用通用的Filter类。

插件架构
Log4j使用插件模式配置组件。因此,您无需编写代码来创建和配置Appender,Layout,Pattern Converter等。在配置了的情况下,Log4j自动识别插件并使用它们。

无垃圾机制
在稳态日志记录期间,Log4j 2 在独立应用程序中是无垃圾的,在Web应用程序中是低垃圾。这减少了垃圾收集器的压力,并且可以提供更好的响应性能。

使用Log4j2
引用依赖
在一般项目中使用Log4j2至少需要引用log4j-api-2.x和log4j-core-2.x这两个jar包。

<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.12.0</version>
</dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.12.0</version>
</dependency>

在spring boot项目中使用Log4j2

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- 排除spring boot默认日志logback --><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions>
</dependency><!-- 引入log4j2依赖 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

小编在使用中遇到一些坑,同时引入spring-boot-starter和spring-boot-starter-web依赖时,需要在spring-boot-starter中排除spring-boot-starter-logging依赖,因为spring-boot-starter-web依赖于spring-boot-starter,根据Maven依赖关系,在spring-boot-starter中排除spring-boot-starter-logging依赖才能排除成功。

添加配置文件
默认情况下,Log4j2在classpath下查找名为log4j2.xml的配置文件。你也可以使用Java启动命令指定配置文件的全路径。-Dlog4j.configurationFile=opt/demo/log4j2.xml,你还可以使用Java代码指定配置文件路径

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.LoggerContext;import java.io.File;public static void main(String[] args) {LoggerContext loggerContext = (LoggerContext) LogManager.getContext(false);File file = new File("opt/demo/log4j2.xml");loggerContext.setConfigLocation(file.toURI());}

同步日志,混合日志和异步日志配置详解
Log4j2同步日志,混合日志和异步日志配置详解

配置文件详解
Log4j2配置文件详解

日志重复打印问题
如果Root中的日志包含了Logger中的日志信息,并且AppenderRef是一样的配置,则日志会打印两次。

这是log4j2继承机制问题,在Log4j2中,logger是有继承关系的,root是根节点,在log4j2中,有个additivity的属性,它是子Logger 是否继承 父Logger 的 输出源(appender) 的属性。具体说,默认情况下子Logger会继承父Logger的appender,也就是说子Logger会在父Logger的appender里输出。若是additivity设为false,则子Logger只会在自己的appender里输出,而不会在父Logger的appender里输出。

要打破这种传递性,也非常简单,在logger中添加 additivity = “false”,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration><Appenders><Console name="Console"><PatternLayout><Pattern>%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] %-5level %logger{0} - %msg%n</Pattern></PatternLayout></Console></Appenders><Loggers><!-- name属性为项目包名或者类名 --><Logger name="com.jourwon" level="debug" additivity="false"><AppenderRef ref="Console"/></Logger><Root level="error"><AppenderRef ref="Console"/></Root></Loggers>
</Configuration>

使用Lombok工具简化创建Logger类
lombok就是一个注解工具jar包,能帮助我们省略一繁杂的代码。具体介绍可以看我的博客Lombok简介、使用、工作原理、优缺点

使用Lombok后,@Slf4j注解生成了log日志常量,无需去声明一个log就可以在类中使用log记录日志。

@Slf4j
public class Log4jTest {public static void main(String[] args) {log.error("Something else is wrong here");}}

Apache Log4j2详解相关推荐

  1. Apache Log4j2详解,【高级Java架构师系统学习

    []( )引用依赖 在一般项目中使用Log4j2至少需要引用log4j-api-2.x和log4j-core-2.x这两个jar包. org.apache.logging.log4j log4j-co ...

  2. (转)Apache Rewrite 详解

    (转)Apache Rewrite 详解 参考文档:http://man.chinaunix.net/newsoft/ApacheManual/mod/mod_rewrite.html Apache ...

  3. apache配置文件详解与优化

    apache配置文件详解与优化 一.总结 一句话总结:结合apache配置文件中的英文说明和配置详解一起看 1.apache模块配置用的什么标签? IfModule 例如: <IfModule ...

  4. Apache 服务器配置详解

    Apache 配置详解 Apahce 配置指令可以分为两大块,核心指令和第三方提供的指令.在apache中,每一个指令都对应着一个模块,而在所有模块中,最重要的就是core_module,so_mod ...

  5. Apache 安装详解

    Apache 安装详解 一,Apache 的特点 1,开放源代码,这是 Apache 服务器的重要特性之一,也是其他特性的基础. 2,跨平台应用 3,支持各种 Web 编程语言,包括 Perl.PHP ...

  6. apache 更改默认网站目录 及 CentOS Apache配置详解

    apache 更改默认网站目录: 1:我们测试把默认网站目录改到root家目录下 新建/root/website目录 #mkdir -p /root/website #echo "websi ...

  7. php apache日志,Apache日志详解

    1.Apache日志文件名称及路径介绍 当我们安装并启动Apache后,Apache会自动生成两个日志文件,这两个日志文件分别是访问日志access_log(在Windows上是access.log) ...

  8. 集群和分布式的区别,软件架构的演化过程,Apache Dubbo详解

    集群和分布式的区别   集群是通过提高单位时间内执行的任务数来提升效率,分布式是以缩短单个任务的执行时间来提升效率的. 举个例子: &emsp: 例如: &emsp:  一个数据库里边 ...

  9. Apache配置详解(一)

    主配置文件:httpd.conf 更改httpd启动方式 1.将http脚本复制到/etc/rc.d/init.d这个目录下: cp -a apachectl /etc/rc.d/init.d/htt ...

  10. linux配置apache不管用,Linux中apache配置文件详解

    Linux中apache配置文件:/etc/httpd/conf/httpd.conf ServerTokens OS//当服务器响应主机头(header)信息时显示Apache的版本和操作系统名称 ...

最新文章

  1. OpenCV+python:圆检测
  2. 第三代基因测序技术革新 云计算的应用
  3. hive命令出现问题Failed with exception Java.io.IOException:java.lang.IllegalArgumentException: java.NET.URI
  4. jquery $(function(){}) $(document).ready(function(){}); (function(){}); 的区别以及作用
  5. SQLServer-----SQLServer 2008 R2安装
  6. 如何写一篇计算机领域的论文(总结)
  7. 你还在用分页?试试 MyBatis 流式查询,真心强大!
  8. 恢复U盘分区:windows自带工具diskpart
  9. springCloud报错No instances available
  10. 必知必会MYSQL下篇
  11. 方法教程 | Python爬虫:爬取风景图片
  12. 新媒体运营:如何策划出一场完整高效的活动方案?(一) 黎想
  13. cat3速度 rj45_常用RJ45网线的规格及型号总结
  14. 【Protle99SE】PCB中各层的含义【小汇】
  15. 计算机系统xp和w7,告诉你十年老电脑装xp还是win7
  16. java宅急送下载_基于jsp的宅急送物流管理系统-JavaEE实现宅急送物流管理系统 - java项目源码...
  17. 友善之臂S70B改成四线触摸
  18. Alibaba官方上线!SpringBoot+SpringCloud全彩指南(终极版)
  19. linux ffmpeg 3gp mp4,利用ffmpeg转换3gp文件
  20. 计算机二级考试20套word,全国计算机等级考试 二级MS Office高级应用(Word部分:第11-20套)...

热门文章

  1. matlab非参数检验(符号检验,秩和)
  2. 检验入参合法性有哪些_参数检验和非参数检验是什么意思
  3. antdesignVue递归导航菜单
  4. 将<span>标签设为圆形
  5. 1000瓶药水,其中1瓶有毒,最少要几只老鼠?
  6. 10只狗怎么鉴别1000瓶水哪瓶有毒
  7. 两台(或多台)电脑怎么实现文件共享
  8. ZXECS-IBX1000综合业务交换
  9. C6678多核DSP——CMD文件介绍
  10. LabVIEW编程LabVIEW开发 常用运动控制器比较