繁体   English   中英

带有log4j的EJB SLF4J-找不到附加程序

[英]EJB SLF4J with log4j - No appenders could be found

我正在尝试将SLF4J与log4j一起使用在EJB内的Bean中,我已经尝试将log4j.properties文件放置在很多地方,但是我在Glassfish服务器控制台中始终遇到此错误:

Grave:   log4j:WARN No appenders could be found for logger (uy.ort.enviosya.cadets.services.CadetsBean).
Grave:   log4j:WARN Please initialize the log4j system properly.
Grave:   log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info

这是我的属性文件:

# LOG4J configuration
log4j.rootLogger=DEBUG, Appender1,Appender2

log4j.appender.Appender1=org.apache.log4j.ConsoleAppender
log4j.appender.Appender1.layout=org.apache.log4j.PatternLayout
log4j.appender.Appender1.layout.ConversionPattern=%-7p %d [%t] %c %x - %m%n

log4j.appender.Appender2=org.apache.log4j.FileAppender
log4j.appender.Appender2.File=C:/Users/Log4jWebDemo.log
log4j.appender.Appender2.layout=org.apache.log4j.PatternLayout
log4j.appender.Appender2.layout.ConversionPattern=%-7p %d [%t] %c %x - %m%n

与这个问题相关的问题说我应该将其放在类路径中,但是老实说我不知道​​它们的含义(对EJB来说是全新的)。

这就是我在bean中所做的事情:

@Stateless
public class SomeBean implements SomeBeanRemote {

    private static final Logger LOGGER = LoggerFactory.getLogger(SomeBean.class);

    @Override
    public someMethod() {
        LOGGER.info("Prueba");
        ...
    }

   ...
}

另外,我应该将文件放在EJB内吗? 如果我想修改Appender2的目的地怎么办?

我正在使用Netbeans 8.2。

更新1

我将其放置在我的ejb的META-INF文件夹中,从中可以看到它存在于我在.ear内部部署的Cadets-ejb.jar中的同一文件夹中。

但是我仍然遇到同样的错误。

部分文件夹结构:

Some
    build
    Some-ejb
        build
        dist
        nbproject
        src
            conf
                META-INF
            java
        test
    dist
    lib
    nbproject
    src

更新2

我设法使其正常运行,但是通过将属性文件手动放置在build文件夹中的正确位置,这意味着每次执行干净构建时都需要这样做。

我尝试将其放置在src文件夹中,但是在构建时不会复制它,只会复制src/conf ,而这是该文件的错误位置。

为什么在构建时会忽略src中的文件?

现在是我的结构:

Some
    /build
    /Some-ejb
        /build
        /dist
        /nbproject
        /src
            /conf
                /META-INF
                   MANIFEST.MF
            /java
           /log4j.properties
        /test
    /dist
    /lib
       /log4j.jar
    /nbproject
    /src

现在我知道,一旦创建了jar,该文件就不必与META-INF和我的类包处于同一级别。

我把它放在这里解决了

Some
    /build
    /Some-ejb
        /build
        /dist
        /nbproject
        /src
            /conf
                /META-INF
                   MANIFEST.MF
            /java
                log4j.properties
        /test
    /dist
    /lib
       /log4j.jar
    /nbproject
    /src

在我搜索了很多之后,我想我找到了一个解决方案:

进行全球配置

如果您的EAR文件中包含log4j库,请检查应用服务器的JVM属性,以确保已设置log4j.configuration属性:

  1. 登录到Glassfish管理控制台( http:// [主机名]:4848 /
  2. 单击“服务器(管理服务器)”->单击“服务器配置”,然后单击“配置”->“ JVM设置”->“ JVM选项”。 (取决于您的服务器版本,但重要的是“ JVM设置”>“ JVM选项”)
  3. 如果存在-Dlog4j.configuration的条目,请验证它是否包含log4j.properties文件的位置。
  4. 如果-Dlog4j.configuration的条目不存在 ,请创建一个。 它必须遵循以下模板: -Dlog4j.configuration=file:///path/to/your/log4j.properties
  5. 重新启动GlassFish。
  6. 部署示例应用程序,并检查Log4J语句现在是否可用。

如果您的项目不包含log4j库

  1. 将log4j.jar复制到GLASSFISH_HOME / lib中。

对于一个项目

例如,您可以具有以下结构:

Some
    /build
    /Some-ejb
        /build
        /dist
        /nbproject
        /src
            /conf
                /META-INF
                   MANIFEST.MF
            /java
        /test
    /dist
    /lib
       /log4j.jar
    /nbproject
    /src
       /log4j.properties

为了将log4j文件包括到您的类路径中,您必须将以下内容放入EJB Project的META-INF/MANIFEST.MF

Class-Path: src lib/log4j.jar

是的:它与EAR有关,而不与EJB项目有关。

不要将log4j.properties本身放在类路径中,而只能放在包含该文件的目录中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM