Java Log4j和Log4j2的区别

一、核心JAR包

log4j核心包:log4j:log4j:[version]

而log4j2的核心包有2个:

org.apache.logging.log4j:log4j-core:[version]
org.apache.logging.log4j:log4j-api:[version]

二、配置文件

log4j:通过一个log4j.properties的文件作为主配置文件

以下是一个输出到控制台的例子

log4j.rootLogger=INFO,consolelog4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] [%thread] [%c] >>> %m%n

%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss,SSS},输出类似:2011-10-18 22:10:28,921 
%r: 输出自应用启动到输出该log信息耗费的毫秒数 
%c: 输出日志信息所属的类目,通常就是所在类的全名 
%t: 输出产生该日志事件的线程名 
%l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。 
%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。 
%%: 输出一个"%"字符 
%F: 输出日志消息产生时所在的文件名称 
%L: 输出代码中的行号 
%m: 输出代码中指定的消息,产生的日志具体信息 
%n: 输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"输出日志信息换行

log4j2:采用的是.xml,.json或者.jsn这种方式来做,比如log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN"><Appenders><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="log4j2: %d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/></Console></Appenders><Loggers><Root level="info"><AppenderRef ref="Console"/></Root></Loggers>
</Configuration>

至于更加深入的配置分析,可以查看各自的文档

三、调用方式

log4j:

import org.apache.log4j.Logger;
private static final Logger logger = Logger.getLogger(App.class);

log4j2:

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
private static final Logger logger = LogManager.getLogger(App.class);

四、关于org.slf4j

这个只是一个日志门面模式,方面我们在各种不同的日志实现中切换,而不需要修改写日志的代码,如果org.slf4j找不到实现,

会抛出Failed to load class org.slf4j.impl.StaticLoggerBinder(see:https://www.slf4j.org/codes.html#StaticLoggerBinder)

引用库:

implementation 'org.slf4j:slf4j-api:[version]'
    implementation 'org.slf4j:slf4j-log4j12:[version]'

调用方式

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger logger = LoggerFactory.getLogger(App.class);

org.slf4j使用log4j2,我们仅仅修改引用的包即可,代码不需要变更

implementation 'org.slf4j:slf4j-api:1.7.26'
    implementation 'org.apache.logging.log4j:log4j-core:2.12.0'
    implementation 'org.apache.logging.log4j:log4j-api:2.12.0'
    implementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.12.0'

日志库冲突问题

我们项目使用了logback,但是其他包又引入了log4j2,这样会导致日志实现冲突,SLF4J: Class path contains multiple SLF4J bindings.(see:http://www.slf4j.org/codes.html#multiple_bindings)

解决方式:去除其他日志库,确保只有一个日志库实现

注意:即使存在多个绑定,slf4j也会选择一个日志框架/实现并与之绑定。slf4j选择绑定的方式由jvm决定,对于所有实际用途,都应视为随机的。从1.6.6版开始,slf4j将命名它实际绑定到的框架/实现类。

Java Log4j和Log4j2的区别相关推荐

  1. java log4j2_老生常谈Log4j和Log4j2的区别(推荐)

    相信很多程序猿朋友对log4j都很熟悉,log4j可以说是陪伴了绝大多数的朋友开启的编程.我不知道log4j之前是用什么,至少在我的生涯中,是log4j带我开启的日志时代. log4j是Apache的 ...

  2. Log4j和Log4j2的区别

    log4j是Apache的一个开源项目,log4j2和log4j是一个作者,只不过log4j2是重新架构的一款日志组件,他抛弃了之前log4j的不足,以及吸取了优秀的logback的设计重新推出的一款 ...

  3. Slf4j与log4j及log4j2的关系及使用方法

    Slf4j与log4j及log4j2的关系及使用方法 slf4j slf4j仅仅是一个为Java程序提供日志输出的统一接口,并不是一个具体的日志实现方案,就比如JDBC一样,只是一种规则而已,所以单独 ...

  4. Log4j(四)——Log4j1与Log4j2的区别

    前言 几乎每个大型应用程序都包含自己的日志或跟踪API.为了符合这一规则,欧盟SEMPRER项目决定编写自己的跟踪API.这是在1996年初.经过无数次的增强.几个版本和大量的工作之后,API演变成了 ...

  5. java常用日志框架日志门面及实现 SLF4J 、Jboss-logging 、JCL、Log4j、Logback、Log4j2、JUL,springboot集成 log4j、log4j2

    java常用日志框架日志门面SLF4J .Jboss-logging .JCL.Log4j及实现 Logback.Log4j2.JUL,springboot集成 log4j.log4j2 .logba ...

  6. Java各类日志门面(slf4j,commons-logging)和日志框架(log4j,logback)联系和区别

    日志门面 1.Apache通用日志接口(commons-logging.jar) Apache Commons包中的一个,包含了日志功能,必须使用的jar包.这个包本身包含了一个Simple Logg ...

  7. Java日志体系日志门面(Slf4j)日志实现(Log4j、Log4j2)详解

    1.背景 近日发生两次因日志使用不当导致的线上问题: 1.应用明明配置了info日志级别,却打印大量的debug日志,导致磁盘IO较高,很快就报磁盘空间不足告警 2.应用服务启动后报StackOver ...

  8. 一文讲尽门面日志slf4j和log4j、log4j2、logback依赖jar引用关系

    前言 之前都是使用SparkStreaming开发,最近打算学习一下Flink,就从官网下载了Flink 1.11,打算搞一个客户端,将程序提交在yarn上.因为Flink从1.7之后就不再提供Had ...

  9. java log4j基本配置及日志级别配置详解,java基础面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

最新文章

  1. 2011年 软件所信息安全国家重点实验室复试回忆
  2. MongoDB中如何优雅地删除大量数据
  3. asp.net core结合NLog搭建ELK实时日志分析平台
  4. AS3读取XML文档
  5. 矩阵论思维导图_《实变函数论》 江泽坚 3rd 思维导图与笔记整理
  6. html引入php文件中的函数,手把手教你在html中引入另一个html文件的方法(详解)...
  7. 设计灵感|化繁杂为明晰!如何把信息类海报做得好看?
  8. AUTOCAD建模足球实体
  9. 微软 .NET Core 3.0 版本发布
  10. Redis下载部署配置运行及修改登录地址、端口和密码
  11. 移动互联网周刊第二期,不错,推荐给大家
  12. Python对YouTube视频统计趋势数据集分析
  13. android 视频上传网络异常,App上传视频(或大文件)失败怎么办?
  14. 在 JavaScript 中隐藏表格行
  15. 冰雪第一天历险 - 2014 年的冬天第一场站得住的雪?
  16. 全排列的递归算法(C语言)
  17. 前程无忧助力,再次举办湖北武汉网络专场招聘会
  18. 解决 golang 中 wrote more than the declared Content-Length
  19. golang for嵌套循环中break 的注意事项和使用细节: break 语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一层语句块
  20. ubuntu大于4T分区 12T硬盘分区

热门文章

  1. [JSOI2016]扭动的回文串
  2. html加纵向滚动条,添纵向滚动条
  3. Missing artifact com.microsoft.sqlserver:sqljdbc4:jar:4.0解决方案
  4. 51Nod基础组(Python)
  5. 基于MindSpore的MASS网络实现
  6. C++prime读书笔记(二)C++标准库:IO、容器、泛型算法、动态内存
  7. Firefox火狐浏览器主密码暴力破解
  8. 十五天学会Autodesk Inventor,看完这一系列就够了(九),主题/色彩/单位设置
  9. react 谷歌地图_谷歌地图与React
  10. 【破解利器】PE工具篇(PE编辑,查看等操作)