欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

打印的日志哪里去了?

程序员文章站 2022-06-05 17:33:35
1.1 两个工程: umf-pay-sdk | umf-pay-sdk-core |--umf-pay-demo 其中, 这个工程用来对接联动的支付接口,依赖log4j来打印日志。umf-pay-sdk-core是一个module,编译后会打成jar。umf-pay-demo是测试主程序,用来测试y ......

打印的日志哪里去了?

1.1 两个工程:

umf-pay-sdk

|---umf-pay-sdk-core

|--umf-pay-demo

其中, 这个工程用来对接联动的支付接口,依赖log4j来打印日志。umf-pay-sdk-core是一个module,编译后会打成jar。umf-pay-demo是测试主程序,用来测试ymf-pay-sdk-core的api。

draft_server

是一个应用,使用的日志框架是log4j2。它依赖很多jar,其中就包括umf-pay-sdk-core。

 

1.2 umf-pay-sdk-core记日志的方式是用log4j。并定义了log4j.properties。

import org.apache.log4j.logmanager;
import org.apache.log4j.logger;
private static final logger log = logmanager.getlogger("umf");
########################################################
#	for log4j/logger4
########################################################
log4j.rootcategory=info, stdout,umf
log4j.category.com.umpay.sign=info,umf
log4j.additivity.com.umpay.sign=true


log4j.appender.stdout=org.apache.log4j.consoleappender
log4j.appender.stdout.layout=org.apache.log4j.patternlayout
log4j.appender.stdout.layout.conversionpattern=[umf]%d{yyyymmdd.hhmmss.sss} %p [%t] %c{1}.%m(%l) | %m%n

########################
# daily rolling file appender
#######################
log4j.appender.umf=org.apache.log4j.dailyrollingfileappender
log4j.appender.umf.file		=umf.log
log4j.appender.umf.datepattern	='.'yyyymmdd
log4j.appender.umf.layout	=org.apache.log4j.patternlayout
log4j.appender.umf.layout.conversionpattern=[%d{yyyy-mm-dd hh:mm:ss.sss}],%m%n

 

 

打印的日志哪里去了?

测试环境运行draft_server,在测试联动支付时出现bug,只得通过日志来问诊了,可是在测试环境找不到umf.log文件。

 

后来,本地排查时,发现并不是没有记日志,而是,日志记录在了一个叫jeewxapi.log的文件里了。why?

原来,ctrl+shift+n查找log4j.properties文件时,发现找到了2个:一个在jeewx-api.jar里,一个在umf-pay-sdk-core.jar里。

看来,log4j先扫描到了jeewx-api下log4j.properties,就读取这个配置文件来记日志了。为了印证,删掉jeewx-api下的log4j.properties文件,果然,umf.log就出现了。

打印的日志哪里去了?

打印的日志哪里去了?

 

如果把两个jar里的log4j.properties都删掉呢?

此时,会有下面的告警日志,意思是:找不到相应的appender,那么,自然就不会记日志了。

log4j:warn no appenders could be found for logger (umf).
log4j:warn please initialize the log4j system properly.
log4j:warn see http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

打印的日志哪里去了?

 

打印的日志哪里去了?

跟一个技术嗅觉灵敏的90后同事沟通,认为umf-pay-sdk-core里用log4j来记录日志实为不妥。最好使用slf4j。这样的话,它会找主程序依赖的日志框架。即日志会统一记录在draft_server程序所配置的log4j2的日志文件里。日志统一记录,利于我们排查问题。

import org.slf4j.logger;
import org.slf4j.loggerfactory;
private static final logger log =  loggerfactory.getlogger("umf");

打印的日志哪里去了?