如何在EJB模块中使用log4j?

pum*_*a91 1 java log4j ejb

我有一个使用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.
Run Code Online (Sandbox Code Playgroud)

它显示在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 
Run Code Online (Sandbox Code Playgroud)

我试过 这个 ,它说我必须在glassfish的服务器管理员中配置这样的属性文件, -Dlog4j.configuration=file:///${com.sun.aas.instanceRoot}/config/log4j.properties 但是没有用

我有一个Singleton Session Bean,在启动方法中我配置了日志,所以根据这个我在bean中:

    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();
    ...
}
Run Code Online (Sandbox Code Playgroud)

但仍然出现相同的错误

如何在EJB环境中配置log4j?谢谢

Isa*_*aac 5

请执行下列操作:

  1. -Dlog4j.configuration=从您的服务器中删除.
  2. 删除log4j.properties您可能放入的任何内容C:/Users/Luis Carlos/AppData/Roaming/NetBeans/7.2/config/GF3/domain1/config
  3. 删除以下代码:

    URL url = this.getClass().getResource(LOG4J_PROPERTIES);
    if(url == null || url.getFile().length() == 0) {
    throw new RuntimeException("Log4j config file "+ LOG4J_PROPERTIES +" not found");
    
    Run Code Online (Sandbox Code Playgroud)
  4. 删除这个: PropertyConfigurator.configure(url);

一旦完成上述步骤,您的代码就可以让Log4J自动log4j.properties类路径加载其文件.根据我的经验,这是配置Log4J的最灵活方式.剩下的就是确保它log4j.properties确实存在于类路径的某个地方.

您有以下选择:

  1. log4j.properties文件放在EJB模块的缺省包中.这样,该log4j.properties文件将与您的应用程序一起打包.这有利有弊,但这是一个不同的故事(很可能属于不同的问答线索).
  2. log4j.properties某个目录放在文件系统上,并将该目录添加到服务器的类路径中.请遵循GlassFish文档,了解如何执行此操作.

如果您坚持要log4j.properties通过URL引用该文件,请恢复该-Dlog4j.configuration=指令.确保您提供的URL(指定log4j.properties文件)确实存在.另外,指定-Dlog4j.debug=true; 这将为您提供Log4J本身的调试信息,告诉您它究竟在做什么.