关键词:
多应用中间的日志使用,log4j,log4j2,logback三个日志框架为例
- 分别使用三个日志框架建好测试
- log4j
- log4j2
- logback
- 上面的三个同时引入一个应用中
- 将日志统一使用slf4j标准
- 不能修改pom文件如何操作统一日志格式
- log4j2 桥接器
分别使用三个日志框架建好测试
log4j
依赖:
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
测试代码
import org.apache.log4j.Logger;
//import org.slf4j.LoggerFactory;
public class MyLog4j
public void test1()
Logger logger = Logger.getLogger(MyLog4j.class);
logger.info("MyLog4j "+ logger.getClass().getName());
logger.error("MyLog4j "+ logger.getClass().getName());
// public void test2()
// org.slf4j.Logger logger = LoggerFactory.getLogger(MyLog4j.class);
// logger.info("MyLog4j test2 clzz= ",logger.getClass().getName());
//
public static void main(String[] args)
new MyLog4j().test1();
// new MyLog4j().test2();
效果
log4j2
依赖:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.14.1</version>
</dependency>
测试代码
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
//import org.slf4j.LoggerFactory;
public class MyLog4j2
public void test()
Logger logger = LogManager.getLogger();
logger.info("MyLog4j2 clzz=",logger.getClass().getName());
public void test2()
// org.slf4j.Logger logger = LoggerFactory.getLogger(MyLog4j2.class);
// logger.info("MyLog4j test2 clzz= ",logger.getClass().getName());
public static void main(String[] args)
new MyLog4j2().test();
new MyLog4j2().test2();
效果
logback
依赖:
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.5</version>
</dependency>
测试代码
在这里插入代码片
配置文件:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyLogBack
public void test()
Logger logger = LoggerFactory.getLogger(MyLogBack.class);
logger.info("MyLogBack clzz=",logger.getClass().getName());
public static void main(String[] args)
new MyLogBack().test();
效果
上面的三个同时引入一个应用中
添加依赖:
<dependency>
<groupId>log</groupId>
<artifactId>mylog4j</artifactId>
<version>1.0-SNAPSHOT</version>
<!--<exclusions>-->
<!--<exclusion>-->
<!--<groupId>org.slf4j</groupId>-->
<!--<artifactId>slf4j-log4j12</artifactId>-->
<!--</exclusion>-->
<!--</exclusions>-->
</dependency>
<dependency>
<groupId>log</groupId>
<artifactId>MyLog4j2</artifactId>
<version>1.0-SNAPSHOT</version>
<!--<exclusions>-->
<!--<exclusion>-->
<!--<groupId>org.apache.logging.log4j</groupId>-->
<!--<artifactId>log4j-slf4j-impl</artifactId>-->
<!--</exclusion>-->
<!--</exclusions>-->
</dependency>
<dependency>
<groupId>log</groupId>
<artifactId>myLogBack</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
public class SDK2
public static void main(String[] args)
new MyLog4j2().test();
new MyLog4j().test1();
new MyLogBack().test();
// new MyLog4j2().test2();
// new MyLog4j().test2();
// new MyLogBack().test();
从上面我们发现完全是可以的每个应用使用自己的日志,但是这样我们发现日志打出来就是五花八门,不能使用同一的格式输入,我们如何操作
将日志统一使用slf4j标准
根据这个手写方案进行修改:
将上面的代码注释部分放开即可,这里不贴代码了
说明一定logback已经实现了slf4j的标准:所以不需要处理
上面这个警告比较好处理排除掉就可以:
<dependencies>
<dependency>
<groupId>log</groupId>
<artifactId>mylog4j</artifactId>
<version>1.0-SNAPSHOT</version>
<!--<exclusions>-->
<!--<exclusion>-->
<!--<groupId>org.slf4j</groupId>-->
<!--<artifactId>slf4j-log4j12</artifactId>-->
<!--</exclusion>-->
<!--</exclusions>-->
</dependency>
<dependency>
<groupId>log</groupId>
<artifactId>MyLog4j2</artifactId>
<version>1.0-SNAPSHOT</version>
<!--<exclusions>-->
<!--<exclusion>-->
<!--<groupId>org.apache.logging.log4j</groupId>-->
<!--<artifactId>log4j-slf4j-impl</artifactId>-->
<!--</exclusion>-->
<!--</exclusions>-->
</dependency>
<dependency>
<groupId>log</groupId>
<artifactId>myLogBack</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
想使用那个就把不需要使用的排除掉:
这已经很方便了发现,也可以完全达到我们的目的了,格式统一,但是有一个问题就是,我们这个地方是我们自己写的应用可以随时修改pom文件,直接统一升级到slf4j标准,但是如果我们使用的是第三方jar包如何办,里面的pom文件没法升级,同时jar也没有实现slf4j标准
不能修改pom文件如何操作统一日志格式
这里我使用my2log4j 和 mylogback两个模块演示
这两个分别使用log4j 和 mylogback
sdk3 进行测试:
依赖:
<dependencies>
<dependency>
<groupId>log</groupId>
<artifactId>my2log4j</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
<version>1.7.32</version>
</dependency>
<dependency>
<groupId>log</groupId>
<artifactId>myLogBack</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
思路就是:讲log4j中的依赖排除掉,使用桥接器来实现,
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
<version>1.7.32</version>
</dependency>
也达到格式统一的要求了;
依赖关系:
log4j2 桥接器
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
<version>2.13.3</version>
</dependency>
原理都一样的不再赘述了
这一篇完全从操作层面出发,下一篇从理论讲解一下
总结:
1.自己使用日志,全部使用slf4j
2.如果引用第三方jar,第三方没有使用slf4j这种日志门面,而是直接使用的日志实现框架
a。如果可以修改源码的情况可以将日志第三方jar升级到slf4j标准
b。如果不可以修改源码的情况下,我们引用第三方jar,排除其使用的日志实现,利用slf4j的桥接器来实现升级到slf4j
ps: 在引用jar包时一定要排除日志实现jar,不然会导致不起作用
slf4j的桥接器如下图:
log4j日志组件的使用
日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录。在apache网站:jakarta.apache.org/log4j 可以免费下载到Log4j最新版本的软件包。1.新建一个Java工程,导入包log4j-1.2.17.jar,整... 查看详情
java应用在java中使用log4j/logback进行日志记录和调试
...留言,分享想法和建议。谢谢支持!相关阅读:Java应用【六】Java反射:动态类加载和调用教程Java应用【七】使用Java实现数据结构和算法:排序、查找、图Java应用【八】使用网络编程进行socket通信【... 查看详情
日志学习-log4j
(一)Logger.getLogger()和LogFactory.getLog()的区别 1.Logger.getLogger()是使用log4j的方式记录日志; 2.LogFactory.getLog()则来自apache的common-logging包。(二)log4jlog4j需要导入的包 一般使用l 查看详情
log4j使用教程
日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录。在apache网站:jakarta.apache.org/log4j 可以免费下载到Log4j最新版本的软件包。一、入门实例1.新建一个JAva工程,导入包log4... 查看详情
log4j-使用教程说明(代码片段)
地址:http://www.codeceo.com/log4j-usage.html日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录。在apache网站:jakarta.apache.org/log4j 可以免费下载到Log4j最新版本的软件包。一、入... 查看详情
log4j使用总结
...在功能代码涉及不多的情况下,确实比较方便。但是若从应用的角度来看,特别是业务越来越复杂的多应用的场景,日志等级、日志格式、日志文件、日志查看、问题定位、甚至后续的日志收集等方面来看,对于纯粹的System.out.p... 查看详情
1.5log4j使用教程
日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录。在apache网站:jakarta.apache.org/log4j 可以免费下载到Log4j最新版本的软件包。一、入门实例1.新建一个JAva工程,导入包log4... 查看详情
log4j笔记:升级2.x版本的日志滚动问题
...log4j2.xml。在升级的过程中,配置与原先相同,使用异步日志,按小时滚动,却发现配置后日志输出正常,但滚动的功能不正常,查出以下两个问题。 1.日志不按小时滚动原来的配置如下:<RollingR 查看详情
最详细的log4j使用教程
日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录。在apache网站:jakarta.apache.org/log4j 可以免费下载到Log4j最新版本的软件包。一、入门实例1.新建一个JAva工程,导入包log4... 查看详情
如何使用log4j记录日志
1.下载jar包http://logging.apache.org/log4j2.将jar包加入项目 放在lib(没有就创建)下 对已经复制过来的jar包鼠标点击右键,选中BuildPath ---》AddtoBuildPath 然后你会在项目中看到多了一个引入外包的项目:Library3.创建log4j.pr... 查看详情
log4j的使用,即java该如何使用日志文件
java使用日志文件log4j的方法:1、新建一个Java工程,导入Log4j包,pom文件中对应的配置代码如下:<!--log4jsupport--><dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1... 查看详情
log4j使用教程
转载:http://www.codeceo.com/article/log4j-usage.html日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录。在apache网站:jakarta.apache.org/log4j 可以免费下载到Log4j最新版本的软件包。1.... 查看详情
log4j的多logger记录日志的简明使用(代码片段)
日志,应该是一个应用软件的基础功能之一。使用java语言,必然会使用一个日志库,我使用的是log4j的日志库。网上不少文章都有介绍,但是结合logger的不同功能介绍以及示例介绍的清楚的不多,至少我也是翻了不少网页,然后... 查看详情
如何使用 log4j2.xml 配置休眠日志记录?
】如何使用log4j2.xml配置休眠日志记录?【英文标题】:Howtoconfigurehibernateloggingusinglog4j2.xml?【发布时间】:2014-02-0408:33:57【问题描述】:我最近切换到Apachelog4j2,但仍然找不到使用log4j2.xml配置休眠日志记录的方法。因为我找不到... 查看详情
log4j使用教程(代码片段)
在我们的应用程序中日志是不可缺少的部分,在Apache中由一个功能无比强大的日志组件,它提供了方便的日志记录,这个开源的项目就是我们惯用的Log4j,jar包我么们一颗取Apache官网下载最新版本的。log4j下载地址一.入门篇1.打... 查看详情
混合 log4j 1.x 和 log4j 2
...2014-11-1806:04:28【问题描述】:我有一个使用log4j2编写的新应用程序,以利用它的一些新功能。它使用的一个库有点老,是用log4j1.x构建的。我有一个问题,应用程序中的新代码写入日志,但旧库中的代码没有写入日志。我什至有... 查看详情
log4j/log4j2/logback混用问题
参考技术A如果不了解标题提到的几个日志框架,建议了解一下log4j/log4j2/logback简单使用说明,本节中pom依赖前面的内容;log4jdemolog4j2demologbackdemologdemojava项目一般会选择一种日志框架,但很难保证当前项目依赖的三方组件会选用... 查看详情
log4j日志框架的使用
java.util.logging.Logger——java中提供的日志类实际开发90%都是使用log4j记录日志,而Log4j底层就是java.util.logging.Logger实现的Log4j是一个日志输出框架,就是用于输出日志的。Mybatis的日志输出是通过Log4j输出的。主流框架大部分都... 查看详情