我有一个使用Netbeans和glassfish 3.1.2的EJB模块。 我需要实现日志,但我不知道如何在EJB中配置log4j。 部署时我遇到了这个问题:
SEVERE: log4j:ERROR Ignoring configuration file [file:/C:/Users/Luis Carlos/AppData/Roaming/NetBeans/7.2/config/GF3/domain1/config/log4j.properties].
SEVERE: log4j:WARN No appenders could be found for logger (beans.RutasBean).
SEVERE: log4j:WARN Please initialize the log4j system properly.
SEVERE: log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
它显示在glassfish服务器控制台中。
这是log4j.properties文件:
log4j.rootLogger=DEBUG, FILE
log4j.logger.myapp=DEBUG
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.File=/space/gfv3/v3setup/GlassFish3/GlassFish/domains/domain1/logs/log4j.log
log4j.appender.FILE.MaxFileSize=100KB
log4j.appender.FILE.MaxBackupIndex=1
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d{DATE} %-5p %c{1} : %m%n
我试过了
this
它说我必须在glassfish的服务器管理员中配置这样的属性文件
-Dlog4j.configuration=file:///${com.sun.aas.instanceRoot}/config/log4j.properties
但是没有用?
我有一个Singleton Session Bean,在启动方法中我配置了日志,所以根据我在bean中的this:
private Logger log;
private static final String LOG4J_PROPERTIES = "/log4j.properties";
@PostConstruct
public void startup(){
URL url = this.getClass().getResource(LOG4J_PROPERTIES);
if(url == null || url.getFile().length() == 0) {
throw new RuntimeException("Log4j config file "+ LOG4J_PROPERTIES +" not found");
}
PropertyConfigurator.configure(url);
log = Logger.getLogger(this.getClass());
log.info("Starting application");
em = Persistence.createEntityManagerFactory("BuscaBus-ejbPU");
rutaController = new RutaJpaController(ut, em);
actualizarCoordenadasRutas();
...
}
但仍然出现相同的错误
如何在EJB环境中配置log4j? 感谢
答案 0 :(得分:5)
执行以下操作:
-Dlog4j.configuration=
。log4j.properties
C:/Users/Luis Carlos/AppData/Roaming/NetBeans/7.2/config/GF3/domain1/config
删除以下代码:
URL url = this.getClass().getResource(LOG4J_PROPERTIES);
if(url == null || url.getFile().length() == 0) {
throw new RuntimeException("Log4j config file "+ LOG4J_PROPERTIES +" not found");
删除此内容:PropertyConfigurator.configure(url);
完成上述步骤后,您的代码可以让Log4J自动从类路径加载其log4j.properties
文件。根据我的经验,这是配置Log4J的最灵活方式。剩下的就是确保log4j.properties
确实存在于类路径的某个地方。
您有以下选择:
log4j.properties
文件放在EJB模块的默认包中。这样,log4j.properties
文件将与您的应用程序一起打包。这有利有弊,但这是一个不同的故事(很可能属于不同的Q& A线程)。log4j.properties
放在文件系统的某个目录中,并将该目录添加到服务器的类路径中。请关注GlassFish文档,了解如何执行此操作。如果您坚持使用URL引用的log4j.properties
文件,请恢复-Dlog4j.configuration=
指令。确保您提供的网址指定log4j.properties
文件,实际存在。另外,请指定-Dlog4j.debug=true
;它将为您提供Log4J本身的调试信息,告诉您它到底在做什么。