现象
项目里使用的commons-httclient组件,莫名其妙的打印debug信息,
问题定位
项目里配置了多个日志组件,log4j\slf4j\commons-logging
不知道到底是哪个组件打印的。
看commons-httpclient的官方说明,用的是commons-logging组件。
Being a library HttpClient is not to dictate which logging framework the user has to use. Therefore HttpClient utilizes the logging interface provided by the Commons Logging package. Commons Logging provides a simple and generalized log interface to various logging packages. By using Commons Logging, HttpClient can be configured for a variety of different logging behaviours. That means the user will have to make a choice which logging framework to use. By default Commons Logging supports the following logging frameworks:
Log4J
java.util.logging
SimpleLog (internal to Commons Logging)
而commons-logging,如果有其它的日志组件,会自动的适配到其它的日志组件,比如log4j\slf4j等。
到底是哪一个呢?
commons-logging官方文档说,可以打印commons-logging的诊断信息。眼泪哗哗的,一个项目作的优秀不优秀,细节上就能体现出来。
在执行代码的第一行,加入以下属性。
或者配置到eclipse里,
会在项目根目录下生成JCL.log文件。
看到了吧,使用的是log4j。
既然使用的是log4j,那问题还挺麻烦,项目里的多个jar包里,都有log4j的配置文件,
用的到底是哪一个呢?
stackoverflow上的大神说,加一个启动参数
java -Dlog4j.debug
对我们来说,加到eclipse里,如图
再次运行测试用例,多了下面的内容
看到了吧,我们用的哪个jar包的log4j的配置文件
log4j: Using URL [jar:file:/xxxx1.0-SNAPSHOT.jar!/log4j.xml] for automatic log4j configuration.
解决办法
找那个jar包的提供者,或者动态修改log4j的属性。
http://blog.csdn.net/attilax/article/details/21157659
项目里面也许有log4j.xml,这个的优先级比property的高
删除或者reset cfg
// core.logger.info("xxx");
// org.apache.log4j.LogManager.resetConfiguration();
// org.apache.log4j.PropertyConfigurator
// .configure("D:\\workspace\\imServer\\src\\log4j.properties");
// core.logger("xxxt");
//
// // (2)重新设置属性
//
// Properties log4jCfg = log4jloadAgain.getLog4jProperties();
//
// PropertyConfigurator.configure(log4jCfg);
//
// core.logger.info("xxxt3");
// log.info("xx4");
core.logger.info("xx");
方便你加参数
项目里使用的commons-httclient组件,莫名其妙的打印debug信息,
[ 0] DEBUG - .commons.httpclient.HttpClient - Java version: 1.6.0_24 [ 0] DEBUG - .commons.httpclient.HttpClient - Java vendor: Sun Microsystems Inc. [ 1] DEBUG - .commons.httpclient.HttpClient - Operating system name: Windows 7 [ 1] DEBUG - .commons.httpclient.HttpClient - Operating system architecture: amd64 [ 1] DEBUG - .commons.httpclient.HttpClient - Operating system version: 6.1 [ 42] DEBUG - .commons.httpclient.HttpClient - SUN 1.6: SUN (DSA key/parameter generation; DSA signing; SHA-1, MD5 digests; SecureRandom; X.509 certificates; JKS keystore; PKIX CertPathValidator; PKIX CertPathBuilder; LDAP, Collection CertStores, JavaPolicy Policy; JavaLoginConfig Configuration) [ 42] DEBUG - .commons.httpclient.HttpClient - SunRsaSign 1.5: Sun RSA signature provider [ 42] DEBUG - .commons.httpclient.HttpClient - SunJSSE 1.6: Sun JSSE provider(PKCS12, SunX509 key/trust factories, SSLv3, TLSv1) [ 42] DEBUG - .commons.httpclient.HttpClient - SunJCE 1.6: SunJCE Provider (implements RSA, DES, Triple DES, AES, Blowfish, ARCFOUR, RC2, PBE, Diffie-Hellman, HMAC) [ 42] DEBUG - .commons.httpclient.HttpClient - SunJGSS 1.0: Sun (Kerberos v5, SPNEGO) [ 42] DEBUG - .commons.httpclient.HttpClient - SunSASL 1.5: Sun SASL provider(implements client mechanisms for: DIGEST-MD5, GSSAPI, EXTERNAL, PLAIN, CRAM-MD5; server mechanisms for: DIGEST-MD5, GSSAPI, CRAM-MD5) [ 42] DEBUG - .commons.httpclient.HttpClient - XMLDSig 1.0: XMLDSig (DOM XMLSignatureFactory; DOM KeyInfoFactory) [ 42] DEBUG - .commons.httpclient.HttpClient - SunPCSC 1.6: Sun PC/SC provider [ 44] DEBUG - lient.params.DefaultHttpParams - Set parameter http.useragent = Jakarta Commons-HttpClient/3.1 [ 45] DEBUG - lient.params.DefaultHttpParams - Set parameter http.protocol.version = HTTP/1.1 [ 46] DEBUG - lient.params.DefaultHttpParams - Set parameter http.connection-manager.class = class org.apache.commons.httpclient.SimpleHttpConnectionManager [ 46] DEBUG - lient.params.DefaultHttpParams - Set parameter http.protocol.cookie-policy = default [ 46] DEBUG - lient.params.DefaultHttpParams - Set parameter http.protocol.element-charset = US-ASCII [ 46] DEBUG - lient.params.DefaultHttpParams - Set parameter http.protocol.content-charset = ISO-8859-1 [ 47] DEBUG - lient.params.DefaultHttpParams - Set parameter http.method.retry-handler = org.apache.commons.httpclient.DefaultHttpMethodRetryHandler@3e018c74 [ 47] DEBUG - lient.params.DefaultHttpParams - Set parameter http.dateparser.patterns = [EEE, dd MMM yyyy HH:mm:ss zzz, EEEE, dd-MMM-yy HH:mm:ss zzz, EEE MMM d HH:mm:ss yyyy, EEE, dd-MMM-yyyy HH:mm:ss z, EEE, dd-MMM-yyyy HH-mm-ss z, EEE, dd MMM yy HH:mm:ss z, EEE dd-MMM-yyyy HH:mm:ss z, EEE dd MMM yyyy HH:mm:ss z, EEE dd-MMM-yyyy HH-mm-ss z, EEE dd-MMM-yy HH:mm:ss z, EEE dd MMM yy HH:mm:ss z, EEE,dd-MMM-yy HH:mm:ss z, EEE,dd-MMM-yyyy HH:mm:ss z, EEE, dd-MM-yyyy HH:mm:ss z] [ 50] DEBUG - lient.params.DefaultHttpParams - Set parameter http.connection.timeout = 10000 [ 50] DEBUG - lient.params.DefaultHttpParams - Set parameter http.socket.timeout = 10000 [ 50] DEBUG - lient.params.DefaultHttpParams - Set parameter http.protocol.cookie-policy = compatibility [ 50] DEBUG - lient.params.DefaultHttpParams - Set parameter http.protocol.single-cookie-header = true [ 50] DEBUG - lient.params.DefaultHttpParams - Set parameter http.protocol.content-charset = UTF-8 [ 65] DEBUG - lient.params.DefaultHttpParams - Set parameter http.method.response.buffer.warnlimit = 10485760
问题定位
项目里配置了多个日志组件,log4j\slf4j\commons-logging
不知道到底是哪个组件打印的。
看commons-httpclient的官方说明,用的是commons-logging组件。
引用
Being a library HttpClient is not to dictate which logging framework the user has to use. Therefore HttpClient utilizes the logging interface provided by the Commons Logging package. Commons Logging provides a simple and generalized log interface to various logging packages. By using Commons Logging, HttpClient can be configured for a variety of different logging behaviours. That means the user will have to make a choice which logging framework to use. By default Commons Logging supports the following logging frameworks:
Log4J
java.util.logging
SimpleLog (internal to Commons Logging)
而commons-logging,如果有其它的日志组件,会自动的适配到其它的日志组件,比如log4j\slf4j等。
到底是哪一个呢?
commons-logging官方文档说,可以打印commons-logging的诊断信息。眼泪哗哗的,一个项目作的优秀不优秀,细节上就能体现出来。
在执行代码的第一行,加入以下属性。
System.setProperty("org.apache.commons.logging.diagnostics.dest", "JCL.log");
或者配置到eclipse里,
会在项目根目录下生成JCL.log文件。
[LogFactory from sun.misc.Launcher$AppClassLoader@1435494339] Created object org.apache.commons.logging.impl.LogFactoryImpl@808460461 to manage classloader sun.misc.Launcher$AppClassLoader@1435494339 [LogFactoryImpl@808460461 from sun.misc.Launcher$AppClassLoader@1435494339] Discovering a Log implementation... [LogFactoryImpl@808460461 from sun.misc.Launcher$AppClassLoader@1435494339] [ENV] Trying to get configuration for item org.apache.commons.logging.Log.allowFlawedContext [LogFactoryImpl@808460461 from sun.misc.Launcher$AppClassLoader@1435494339] [ENV] No LogFactory attribute found for org.apache.commons.logging.Log.allowFlawedContext [LogFactoryImpl@808460461 from sun.misc.Launcher$AppClassLoader@1435494339] [ENV] No system property found for property org.apache.commons.logging.Log.allowFlawedContext [LogFactoryImpl@808460461 from sun.misc.Launcher$AppClassLoader@1435494339] [ENV] No configuration defined for item org.apache.commons.logging.Log.allowFlawedContext [LogFactoryImpl@808460461 from sun.misc.Launcher$AppClassLoader@1435494339] [ENV] Trying to get configuration for item org.apache.commons.logging.Log.allowFlawedDiscovery [LogFactoryImpl@808460461 from sun.misc.Launcher$AppClassLoader@1435494339] [ENV] No LogFactory attribute found for org.apache.commons.logging.Log.allowFlawedDiscovery [LogFactoryImpl@808460461 from sun.misc.Launcher$AppClassLoader@1435494339] [ENV] No system property found for property org.apache.commons.logging.Log.allowFlawedDiscovery [LogFactoryImpl@808460461 from sun.misc.Launcher$AppClassLoader@1435494339] [ENV] No configuration defined for item org.apache.commons.logging.Log.allowFlawedDiscovery [LogFactoryImpl@808460461 from sun.misc.Launcher$AppClassLoader@1435494339] [ENV] Trying to get configuration for item org.apache.commons.logging.Log.allowFlawedHierarchy [LogFactoryImpl@808460461 from sun.misc.Launcher$AppClassLoader@1435494339] [ENV] No LogFactory attribute found for org.apache.commons.logging.Log.allowFlawedHierarchy [LogFactoryImpl@808460461 from sun.misc.Launcher$AppClassLoader@1435494339] [ENV] No system property found for property org.apache.commons.logging.Log.allowFlawedHierarchy [LogFactoryImpl@808460461 from sun.misc.Launcher$AppClassLoader@1435494339] [ENV] No configuration defined for item org.apache.commons.logging.Log.allowFlawedHierarchy [LogFactoryImpl@808460461 from sun.misc.Launcher$AppClassLoader@1435494339] Trying to get log class from attribute 'org.apache.commons.logging.Log' [LogFactoryImpl@808460461 from sun.misc.Launcher$AppClassLoader@1435494339] Attempting to load user-specified log class 'org.apache.commons.logging.impl.Log4JLogger'... [LogFactoryImpl@808460461 from sun.misc.Launcher$AppClassLoader@1435494339] Attempting to instantiate 'org.apache.commons.logging.impl.Log4JLogger' [LogFactoryImpl@808460461 from sun.misc.Launcher$AppClassLoader@1435494339] Trying to load 'org.apache.commons.logging.impl.Log4JLogger' from classloader sun.misc.Launcher$AppClassLoader@1435494339
看到了吧,使用的是log4j。
既然使用的是log4j,那问题还挺麻烦,项目里的多个jar包里,都有log4j的配置文件,
用的到底是哪一个呢?
stackoverflow上的大神说,加一个启动参数
引用
java -Dlog4j.debug
对我们来说,加到eclipse里,如图
再次运行测试用例,多了下面的内容
log4j: Trying to find [log4j.xml] using context classloader sun.misc.Launcher$AppClassLoader@558fe7c3. log4j: Using URL [jar:file:/xxxx1.0-SNAPSHOT.jar!/log4j.xml] for automatic log4j configuration. log4j: Preferred configurator class: org.apache.log4j.xml.DOMConfigurator log4j: System property is :null log4j: Standard DocumentBuilderFactory search succeded. log4j: DocumentBuilderFactory is: org.apache.xerces.jaxp.DocumentBuilderFactoryImpl log4j: debug attribute= "null". log4j: Ignoring debug attribute. log4j: reset attribute= "false". log4j: Threshold ="null". log4j: Level value for root is []. log4j: root level set to DEBUG log4j: Class name: [org.apache.log4j.ConsoleAppender] log4j: Setting property [encoding] to [UTF-8]. log4j: Parsing layout of class: "org.apache.log4j.PatternLayout" log4j: Setting property [conversionPattern] to [[%7r] %6p - %30.30c - %m ]. log4j: Adding appender named [CONSOLE] to category [root]. log4j: Class name: [org.apache.log4j.FileAppender] log4j: Setting property [append] to [false]. log4j: Setting property [file] to [/xxx-debug.log]. log4j: Setting property [encoding] to [UTF-8]. log4j: Parsing layout of class: "org.apache.log4j.PatternLayout" log4j: Setting property [conversionPattern] to [%d [%7r] %6p - %30.30c - %m ]. log4j: setFile called: /xxx-debug.log, false log4j: setFile ended log4j: Adding appender named [FILE-DEBUG] to category [root].
看到了吧,我们用的哪个jar包的log4j的配置文件
log4j: Using URL [jar:file:/xxxx1.0-SNAPSHOT.jar!/log4j.xml] for automatic log4j configuration.
解决办法
找那个jar包的提供者,或者动态修改log4j的属性。
http://blog.csdn.net/attilax/article/details/21157659
引用
项目里面也许有log4j.xml,这个的优先级比property的高
删除或者reset cfg
// core.logger.info("xxx");
// org.apache.log4j.LogManager.resetConfiguration();
// org.apache.log4j.PropertyConfigurator
// .configure("D:\\workspace\\imServer\\src\\log4j.properties");
// core.logger("xxxt");
//
// // (2)重新设置属性
//
// Properties log4jCfg = log4jloadAgain.getLog4jProperties();
//
// PropertyConfigurator.configure(log4jCfg);
//
// core.logger.info("xxxt3");
// log.info("xx4");
core.logger.info("xx");
方便你加参数
-Dlog4j.debug -Dorg.apache.commons.logging.diagnostics.dest=JCL.log
发表评论
-
charles4.2下载与破解方法以及配置https
2020-02-26 09:03 2有两个抓包工具 一个是fidder,一个是charles,两个 ... -
序列号批量生成算法
2019-12-05 14:11 0业务处理过程当中,经常需要生成订单号、序列号等,简单的可 ... -
使用ANTLR处理文本
2019-08-28 17:32 767引用 使用 Antlr 处理文本 https://www.ib ... -
解决maven-metadata.xml文件下载卡死问题
2019-04-11 14:02 3986http://192.168.1.110:8081/nexus ... -
rsync备份和删除指定文件
2018-01-02 10:23 2051文件异地备份时,需要将本地文件合并到服务器上,且不能删除服务器 ... -
javaLocale格式化日期和数字
2017-08-25 09:26 869public static void main(Strin ... -
centos6 tomcat 启动脚本 tomcat服务
2017-08-23 11:24 1441系统自动启动tomcat 复制该脚本到/etc/init.d/ ... -
win7 命令行改IP和DNS
2016-12-21 18:35 738使用管理员权限运行CMD //改DNS netsh ... -
jenkins中集成sonar,使用findbug、pmd、checkstyle提升代码质量
2016-09-29 14:58 6175实际上jenkins单独也 ... -
jenkins 集成sonar
2016-09-18 10:14 0jenkins集成sonar可以从插件中心直接更新安装 son ... -
activeMQ5.14权限配置
2016-08-17 13:47 2673activeMQ默认的消息队列没有用户名和密码,可以直接通过T ... -
solaris 使用解压版的jdk
2016-07-27 15:17 764solaris上配置jdk其实也很简单 由于solaris有 ... -
solaris tomcat开机启动
2016-07-27 16:17 621创建文件夹/var/svc/manifes ... -
HibernateTemplate Vs HibernateDaoSupport Vs Direct Hibernate Access
2016-07-26 11:07 734http://forum.spring.io/forum/sp ... -
spring mvc mybatis will not be managed by Spring
2016-07-20 17:30 9887项目运行时发现事务提交不完整,回滚时只能回滚一半。 系统配置 ... -
java里判断一点是否在某个区域
2016-06-03 17:47 1845import java.awt.geom.Path2D ... -
12306的技术升级
2016-04-20 16:17 1034升级的核心是余票查询的升级,余票查询使用存储过程,sybase ... -
工作流的123
2016-04-20 12:58 576三分钟了解Activity工作流 工作流一般会给开发人员提供流 ... -
sping mvc 使用@Value注解为controller注入值
2016-04-17 17:39 10836spring mvc 里有两个配置文件, 第一个,为sprin ... -
googleapis.com域名访问慢的解决办法
2016-04-13 12:09 9721、安装火狐 2、安装插件ReplaceGoogleCDN
相关推荐
Log4j的配置文件(log4j.properties或log4j.xml)使得你可以精细控制日志的输出格式和目的地。 接下来,我们来看看如何在项目中集成这两个库: 1. 添加依赖:确保你的项目中包含Apache Commons Logging和Log4j的...
`log4j`则是Apache的一个开源项目,它提供了丰富的日志功能,包括不同级别的日志记录(DEBUG, INFO, WARN, ERROR, FATAL, ALL 和 OFF),支持输出到控制台、文件、网络、数据库等多种目的地,还可以通过配置文件灵活...
标题中的“commons-logging”和“Log4j”是两个在Java编程中广泛使用的日志处理框架。它们在日志管理领域中各自扮演着不同的角色,而它们之间的关系则涉及到日志实现的抽象与具体实现的层次问题。 首先,让我们了解...
"log4j.jar" 和 "commons-logging.jar" 是两个非常著名的Java日志库,它们在Java日志处理中扮演着核心角色。 **log4j.jar** 是Apache软件基金会开发的一个开源日志框架,它为Java应用程序提供了灵活的日志记录解决...
此外,如果你的项目已经使用了其他日志框架,比如Log4j,那么Commons Logging会自动识别并使用它,避免了日志冲突的问题。 总结来说,Apache Commons Logging-1.2是一个为Java应用程序提供日志服务的工具包,它的...
Log4j和Commons Logging是两个非常流行且实用的日志框架,广泛应用于各种Java应用程序。 **Log4j** 是Apache软件基金会的一个开源项目,它为Java程序员提供了一种强大的日志API。Log4j 1.2.14是该框架的一个较旧...
2. 配置日志实现,可以通过设置`java.util.logging.config.file`、`log4j.configuration`等系统属性,或者在类路径下放置适当的配置文件(如log4j.properties)。 3. 在代码中获取并使用Logger,如`Logger logger = ...
1. **安装与配置**:介绍如何在项目中引入commons-logging和log4j的依赖,并设置相应的配置文件,如log4j.properties或log4j.xml。 2. **使用API**:讲解如何在代码中通过commons-logging接口来调用log4j的记录方法...
总的来说,commons-logging和log4j是Java开发中的重要工具,它们使得日志管理更加灵活、高效,对于排查问题、维护系统稳定性和提升开发效率具有不可忽视的价值。在项目中正确地集成和使用这两个库,可以极大地提升你...
Log4j和commons-logging是两个常见的日志框架,它们之间存在紧密的关系。本文将深入探讨这两个组件,以及它们在Java日志系统中的作用。 首先,Log4j是由Apache组织开发的一个强大的日志处理库,它提供了丰富的日志...
Log4j和Commons Logging是两个非常流行且实用的日志记录库,它们各自拥有独特的功能和优势,而在某些情况下,它们可以协同工作,提供更灵活的日志解决方案。 首先,Log4j是由Apache软件基金会开发的一个开源日志...
这个库允许开发者选择底层的日志实现,如Log4j、Java内置的日志API(java.util.logging)或者其他第三方日志系统,而无需修改代码。它的核心概念是提供一种抽象,使得应用代码与特定的日志实现解耦,从而增强了灵活...
4. Log4j:广泛采用的Java日志框架,提供了丰富的日志控制和配置选项。 5. Excel处理:可能涉及到使用Apache POI和用户自定义的"exceljar"来操作Excel文件,例如读取数据、生成报告等。 这些组件常常在企业级Java...
标题“commons-logging-1.1.3-bin.zip”表明这是Apache Commons Logging的1.1.3版本的二进制发布包,通常包含编译好的jar文件以及可能的配置文件和文档。这个版本可能修复了前一版本的一些已知问题,并可能引入了...
为了设置默认的日志实现,可以在项目的类路径中包含相应的配置文件,如Log4j的`log4j.properties`或Java内置日志系统的`logging.properties`。 总的来说,Apache Commons Logging是一个非常实用的工具,它降低了...
它的主要目的是提供一个抽象层,使得开发人员可以在不修改代码的情况下,选择和切换不同的日志实现(如log4j、java.util.logging或commons-logging自身的SimpleLog)。通过引入Commons Logging,"java-unrar-0.3.jar...
Apache Commons Logging 是一个Java日志框架的抽象层,它允许应用程序使用多种不同的日志实现,如Log4j、Java Util Logging或JDK14 Logging。标题提到的"commons-logging-1.2-bin2014最新版"是Apache Commons ...
Apache Commons Logging是另一个关键的Java库,它提供了一个统一的日志接口,让开发者可以轻松地切换不同的日志实现,如Log4j、Java内置的java.util.logging或Simple Logging Facade for Java (SLF4J)。这个库的主要...
Java日志记录是开发过程...总的来说,Log4j和Commons-Logging是Java开发中日志管理的重要工具,它们可以帮助开发者更好地监控应用程序,定位问题,并提供详细的运行日志,对于任何Java项目来说都是不可或缺的组成部分。