最近遇到一个问题,ERA应用部署在weblogic上,在project/WEB-INF/classes下的log4j.propties总是出现有时候可以正常加载,有时候却不能正常加载。
在不能正常加载的时候,报告如下警告信息:
log4j:WARN No appenders could be found for logger (com.jl.yyi.web.filter.F00yyi001Filter).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
经过查看log4j的源码发现,其实log4j自己的API里的日志是通过System.out.print的方式输出到标准输出的,具体参考org.apache.log4j.helpers.LogLog这个类。
那么如何将log4j自己的log输出来呢,通过读LogLog这个类的源码知道这需要在系统属性里配置log4j.debug=true这个参数,因此,在D:\Oracle\Middleware\user_projects\domains\log4j_test_domain\bin\setDomainEnv.cmd这个脚本里修改
set JAVA_PROPERTIES=%JAVA_PROPERTIES% %EXTRA_JAVA_PROPERTIES%
为:
set JAVA_PROPERTIES=%JAVA_PROPERTIES% %EXTRA_JAVA_PROPERTIES% -Dlog4j.debug=true
重新启动weblogic,访问作业画面,得到如下详细信息:
[code="java"]log4j: Trying to find [log4j.xml] using context classloader weblogic.utils.classloaders.ChangeAwareClassLoader@21aa5a31 finder: weblogic.utils.classloaders.CodeGenClassFinder@2b5229f4 annotation: jlerp_f@f.
log4j: Trying to find [log4j.xml] using weblogic.utils.classloaders.ChangeAwareClassLoader@21aa5a31 finder: weblogic.utils.classloaders.CodeGenClassFinder@2b5229f4 annotation: jlerp_f@f class loader.
log4j: Trying to find [log4j.xml] using ClassLoader.getSystemResource().
log4j: Trying to find [log4j.properties] using context classloader weblogic.utils.classloaders.ChangeAwareClassLoader@21aa5a31 finder: weblogic.utils.classloaders.CodeGenClassFinder@2b5229f4 annotation: jlerp_f@f.
log4j: Using URL [zip:/usr/oracle/Middleware/user_projects/domains/erp_domain/servers/F321/tmp/_WL_user/jlerp_f/e0br6s/war/WEB-INF/lib/_wl_cls_gen.jar!/log4j.properties] for automatic log4j configuration.
log4j: Reading configuration from URL zip:/usr/oracle/Middleware/user_projects/domains/erp_domain/servers/F321/tmp/_WL_user/jlerp_f/e0br6s/war/WEB-INF/lib/_wl_cls_gen.jar!/log4j.properties
log4j: Parsing for with value=[DEBUG, f_logout,f_mail_logout,developement_logout].
log4j: Level token is [DEBUG].
log4j: Category root set to DEBUG
log4j: Parsing appender named "f_logout".
log4j: Parsing layout options for "f_logout".
log4j: Setting property [conversionPattern] to [%X{mgdSvrName} | %X{userCode} | %d{yyyy-MM-dd HH:mm:ss} | %l | %p | %m%n].
log4j: End of parsing for "f_logout".
log4j: Setting property [encoding] to [UTF-8].
log4j: Setting property [file] to [/var/ftp/logs/[F321]/f/f.log].
log4j: Setting property [maxBackupIndex] to [50].
log4j: Setting property [append] to [true].
log4j: Setting property [maxFileSize] to [5120KB].
log4j: setFile called: /var/ftp/logs/[F321]/f/f.log, true
log4j: setFile ended
log4j: Parsed "f_logout" options.
log4j: Parsing appender named "f_mail_logout".
log4j: Parsing layout options for "f_mail_logout".
log4j: Setting property [conversionPattern] to [%X{mgdSvrName} | %X{userCode} | %d{yyyy-MM-dd HH:mm:ss} | %l | %p | %m%n].
log4j: End of parsing for "f_mail_logout".
log4j: Setting property [SMTPHost] to [mail.ejianlong.com].
log4j: Setting property [from] to [jlerp@ejianlong.com].
log4j: Setting property [SMTPPassword] to [11111sss].
log4j: Setting property [threshold] to [ERROR].
log4j: Setting property [subject] to [Test1 JLerp ErrorMessage[f]].
log4j: Setting property [to] to [wushaofeng@ejianlong.com].
log4j: Setting property [SMTPUsername] to [jlerp].
log4j: Setting property [bufferSize] to [512].
log4j: Parsed "f_mail_logout" options.
log4j: Parsing appender named "developement_logout".
log4j: Parsing layout options for "developement_logout".
log4j: Setting property [conversionPattern] to [[%p] [%l] %10.10c - %m%n].
log4j: End of parsing for "developement_logout".
log4j: Parsed "developement_logout" options.
log4j: Parsing for [com.jl.ft] with value=[DEBUG, ft_logout,ft_mail_logout].
log4j: Level token is [DEBUG].
log4j: Category com.jl.ft set to DEBUG
[oracle@testerp1s2 logs]$ tail -f F321.out
余玲(100578)财务管理组(财务系统建设项目组)(S400)
1111111111111
555555555555555555555===========null
初始化财务公司下拉选单
[DEBUG] [com.jl.yyi.service.F00yyi001ServiceImpl.getAllCompany(F00yyi001ServiceImpl.java:746)] erviceImpl - >> getAllCompany()
[DEBUG] [com.jl.yyi.service.F00yyi001ServiceImpl.getAllCompany(F00yyi001ServiceImpl.java:779)] erviceImpl - << getAllCompany()-[建龙集团][扬帆集团][天津市捷威动力工业有限公司][扬帆总部][四川川锅锅炉有限责任公司][浙江扬帆船舶配件制造有限公司][浙江扬帆通用机械制造有限公司][舟山永锦船舶配件制造有限公司][舟山扬帆实业有限公司][舟山船厂][舟山市大神洲船舶修造有限公司][浙江东海岸船业有限公司][海之帆][扬帆集团上海船舶技术有限公司][青岛扬帆船舶制造有限公司][浙江扬帆管业制造有限公司][威海荣成扬帆船舶制造有限公司][建龙钢铁控股有限公司][一汽凌源汽车车架制造有限公司][唐山建龙机械制造有限公司][香港洪祥航运有限公司][香港洪祥航运(控股)有限公司][上海洪祥船舶管理有限公司][北京金建龙化工技术有限公司][北京蒂本斯工程技术有限公司][北京华创精英自动化技术有限公司][北京华创杭氧集散控制系统有限公司][哈尔滨嘉天房地产开发股份有限公司][浙江建龙控股集团][吉林市建龙房地产开发有限责任公司][吉林建龙物业管理有限责任公司][长春天通房地产开发有限公司]
[DEBUG] [com.jl.yyi.service.F00yyi001ServiceImpl.getAllCompany(F00yyi001ServiceImpl.java:746)] erviceImpl - >> getAllCompany()
[DEBUG] [com.jl.yyi.service.F00yyi001ServiceImpl.getAllCompany(F00yyi001ServiceImpl.java:779)] erviceImpl - << getAllCompany()-[建龙集团][扬帆集团][天津市捷威动力工业有限公司][扬帆总部][四川川锅锅炉有限责任公司][浙江扬帆船舶配件制造有限公司][浙江扬帆通用机械制造有限公司][舟山永锦船舶配件制造有限公司][舟山扬帆实业有限公司][舟山船厂][舟山市大神洲船舶修造有限公司][浙江东海岸船业有限公司][海之帆][扬帆集团上海船舶技术有限公司][青岛扬帆船舶制造有限公司][浙江扬帆管业制造有限公司][威海荣成扬帆船舶制造有限公司][建龙钢铁控股有限公司][一汽凌源汽车车架制造有限公司][唐山建龙机械制造有限公司][香港洪祥航运有限公司][香港洪祥航运(控股)有限公司][上海洪祥船舶管理有限公司][北京金建龙化工技术有限公司][北京蒂本斯工程技术有限公司][北京华创精英自动化技术有限公司][北京华创杭氧集散控制系统有限公司][哈尔滨嘉天房地产开发股份有限公司][浙江建龙控股集团][吉林市建龙房地产开发有限责任公司][吉林建龙物业管理有限责任公司][长春天通房地产开发有限公司]
[DEBUG] [com.jl.yyi.service.F00yyi001ServiceImpl.getAllCompany(F00yyi001ServiceImpl.java:746)] erviceImpl - >> getAllCompany()
[DEBUG] [com.jl.yyi.service.F00yyi001ServiceImpl.getAllCompany(F00yyi001ServiceImpl.java:779)] erviceImpl - << getAllCompany()-[建龙集团][扬帆集团][天津市捷威动力工业有限公司][扬帆总部][四川川锅锅炉有限责任公司][浙江扬帆船舶配件制造有限公司][浙江扬帆通用机械制造有限公司][舟山永锦船舶配件制造有限公司][舟山扬帆实业有限公司][舟山船厂][舟山市大神洲船舶修造有限公司][浙江东海岸船业有限公司][海之帆][扬帆集团上海船舶技术有限公司][青岛扬帆船舶制造有限公司][浙江扬帆管业制造有限公司][威海荣成扬帆船舶制造有限公司][建龙钢铁控股有限公司][一汽凌源汽车车架制造有限公司][唐山建龙机械制造有限公司][香港洪祥航运有限公司][香港洪祥航运(控股)有限公司][上海洪祥船舶管理有限公司][北京金建龙化工技术有限公司][北京蒂本斯工程技术有限公司][北京华创精英自动化技术有限公司][北京华创杭氧集散控制系统有限公司][哈尔滨嘉天房地产开发股份有限公司][浙江建龙控股集团][吉林市建龙房地产开发有限责任公司][吉林建龙物业管理有限责任公司][长春天通房地产开发有限公司][/code]
从这个日志就可以很清楚的看到log4j的配置文件的加载过程...,如果再出现加载不到的情况,可以从这个日志来分析了...