Apache Log4j2详解
转载: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详解相关推荐
- Apache Log4j2详解,【高级Java架构师系统学习
[]( )引用依赖 在一般项目中使用Log4j2至少需要引用log4j-api-2.x和log4j-core-2.x这两个jar包. org.apache.logging.log4j log4j-co ...
- (转)Apache Rewrite 详解
(转)Apache Rewrite 详解 参考文档:http://man.chinaunix.net/newsoft/ApacheManual/mod/mod_rewrite.html Apache ...
- apache配置文件详解与优化
apache配置文件详解与优化 一.总结 一句话总结:结合apache配置文件中的英文说明和配置详解一起看 1.apache模块配置用的什么标签? IfModule 例如: <IfModule ...
- Apache 服务器配置详解
Apache 配置详解 Apahce 配置指令可以分为两大块,核心指令和第三方提供的指令.在apache中,每一个指令都对应着一个模块,而在所有模块中,最重要的就是core_module,so_mod ...
- Apache 安装详解
Apache 安装详解 一,Apache 的特点 1,开放源代码,这是 Apache 服务器的重要特性之一,也是其他特性的基础. 2,跨平台应用 3,支持各种 Web 编程语言,包括 Perl.PHP ...
- apache 更改默认网站目录 及 CentOS Apache配置详解
apache 更改默认网站目录: 1:我们测试把默认网站目录改到root家目录下 新建/root/website目录 #mkdir -p /root/website #echo "websi ...
- php apache日志,Apache日志详解
1.Apache日志文件名称及路径介绍 当我们安装并启动Apache后,Apache会自动生成两个日志文件,这两个日志文件分别是访问日志access_log(在Windows上是access.log) ...
- 集群和分布式的区别,软件架构的演化过程,Apache Dubbo详解
集群和分布式的区别 集群是通过提高单位时间内执行的任务数来提升效率,分布式是以缩短单个任务的执行时间来提升效率的. 举个例子: &emsp: 例如: &emsp: 一个数据库里边 ...
- Apache配置详解(一)
主配置文件:httpd.conf 更改httpd启动方式 1.将http脚本复制到/etc/rc.d/init.d这个目录下: cp -a apachectl /etc/rc.d/init.d/htt ...
- linux配置apache不管用,Linux中apache配置文件详解
Linux中apache配置文件:/etc/httpd/conf/httpd.conf ServerTokens OS//当服务器响应主机头(header)信息时显示Apache的版本和操作系统名称 ...
最新文章
- OpenCV+python:圆检测
- 第三代基因测序技术革新 云计算的应用
- hive命令出现问题Failed with exception Java.io.IOException:java.lang.IllegalArgumentException: java.NET.URI
- jquery $(function(){}) $(document).ready(function(){}); (function(){}); 的区别以及作用
- SQLServer-----SQLServer 2008 R2安装
- 如何写一篇计算机领域的论文(总结)
- 你还在用分页?试试 MyBatis 流式查询,真心强大!
- 恢复U盘分区:windows自带工具diskpart
- springCloud报错No instances available
- 必知必会MYSQL下篇
- 方法教程 | Python爬虫:爬取风景图片
- 新媒体运营:如何策划出一场完整高效的活动方案?(一) 黎想
- cat3速度 rj45_常用RJ45网线的规格及型号总结
- 【Protle99SE】PCB中各层的含义【小汇】
- 计算机系统xp和w7,告诉你十年老电脑装xp还是win7
- java宅急送下载_基于jsp的宅急送物流管理系统-JavaEE实现宅急送物流管理系统 - java项目源码...
- 友善之臂S70B改成四线触摸
- Alibaba官方上线!SpringBoot+SpringCloud全彩指南(终极版)
- linux ffmpeg 3gp mp4,利用ffmpeg转换3gp文件
- 计算机二级考试20套word,全国计算机等级考试 二级MS Office高级应用(Word部分:第11-20套)...