簡體   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