Java日志介绍(5)-commons-logging
2020-03-06 16:10:28来源:博客园 阅读 ()
Java日志介绍(5)-commons-logging
Apache Commons Logging(JCL) 提供了一个简单的日志抽象,允许开发人员使用特定的日志实现。JCL可以使用其他的日志实现,包括Log4J、Avalon LogKit(Avalon的日志框架)、JDK logging(JUL)。本文主要介绍JCL的简单使用方法,文中所使用到的软件版本:Java 1.8.0_191、commons-logging 1.2。
1、配置
JCL能够在初始化期间自动查找配置文件进行配置;按照优先级查找直到找到,优先级如下:
1.在classpath下寻找配置文件commons-logging.properties,并使用文件中org.apache.commons.logging.Log属性定义的Log实现类
2.查找系统环境变量org.apache.commons.logging.Log对应的Log实现类
3.查看classpath中是否有Log4j的包,如果发现,则自动使用Log4j作为日志实现类(org.apache.commons.logging.impl.Log4JLogger)
4.使用JDK自身的日志实现类(JDK1.4以后才有日志实现类)(org.apache.commons.logging.impl.Jdk14Logger)
5.使用commons-logging自己提供的一个简单的日志实现类SimpleLog(org.apache.commons.logging.impl.SimpleLog)
2、spring-jcl
JCL与log4j及JDK logging(JUL)可以很好的配合使用;如果要使用logback、log4j2等新的日志框架就需要使用适配器。spring提供一个适配器spring-jcl:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-jcl</artifactId> <version>5.2.4.RELEASE</version> </dependency>
该适配器使用日志框架的优先级如下:
1.查看classpath中是否有log4j2的包;如果有,再查找是否有slf4j及log4j-to-slf4j的包,如果都有则使用slf4j,否则使用log4j2
2.查看classpath中是否有slf4j的包,如果有则使用slf4j
3.以上都没有使用JDK logging
具体逻辑可以查看源码org.apache.commons.logging.LogAdapter中的静态模块:
private static final String LOG4J_SPI = "org.apache.logging.log4j.spi.ExtendedLogger"; private static final String LOG4J_SLF4J_PROVIDER = "org.apache.logging.slf4j.SLF4JProvider"; private static final String SLF4J_SPI = "org.slf4j.spi.LocationAwareLogger"; private static final String SLF4J_API = "org.slf4j.Logger"; private static final LogApi logApi; static { if (isPresent(LOG4J_SPI)) { if (isPresent(LOG4J_SLF4J_PROVIDER) && isPresent(SLF4J_SPI)) { // log4j-to-slf4j bridge -> we'll rather go with the SLF4J SPI; // however, we still prefer Log4j over the plain SLF4J API since // the latter does not have location awareness support. logApi = LogApi.SLF4J_LAL; } else { // Use Log4j 2.x directly, including location awareness support logApi = LogApi.LOG4J; } } else if (isPresent(SLF4J_SPI)) { // Full SLF4J SPI including location awareness support logApi = LogApi.SLF4J_LAL; } else if (isPresent(SLF4J_API)) { // Minimal SLF4J API without location awareness support logApi = LogApi.SLF4J; } else { // java.util.logging as default logApi = LogApi.JUL; } }
如果classpath中同时使用了commons-logging和spring-jcl,会优先使用spring-jcl。
3、实际使用
3.1、配置文件commons-logging.properties
该文件放到src或src/main/resources(spring boot工程)下即可。
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
#org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
3.2、代码例子
package com.inspur.demo.log; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * commons-logging使用示例 */ public class CommonsLoggingCase { public static void main(String[] args) { Log log = LogFactory.getLog(CommonsLoggingCase.class); System.out.println(log.getClass()); log.debug("This is debug message."); log.warn("This is warn message."); for (int i = 0; i < 100; i++) { log.info("This is info message:" + i); } } }
1、引入commons-logging、log4j的jar包,并使用log4j.properties来配置log4j,运行代码可以看到日志格式跟log4j.properties中配置的一致。log4j的配置可以参考:Java日志介绍(2)-Log4j
2、引入spring-jcl、log4j2的jar包,并删除commons-logging的jar(也可不删,优先使用spring-jcl),使用log4j2.xml来配置log4j2,运行代码可以看到日志格式跟log4j2.xml中配置的一致。log4j2的配置可以参考:Java日志介绍(4)-Log4j2
如果要使用其他日志框架,可以自行加入相关的jar并运行代码测试,这里就不一一演示了。
原文链接:https://www.cnblogs.com/wuyongyin/p/12421153.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash