即使它存在(在类路径上),Logback也找不到logback.xml

stu*_*eep 8 java war logback maven

我有一个logback的问题.我设置它(使用maven)并且一切似乎都很好,除了Logback报告它找不到配置文件(但我能够使用默认的记录器配置登录到控制台).

[#| 2013-07-03T07:55:30.843 + 0200 | INFO | glassfish3.1.2 | javax.enterprise.system.std.com.sun.enterprise.server.logging | _ThreadID = 124; _ThreadName =线程2; | 07:54:39,844 | -INFO in ch.qos.logback.classic.LoggerContext [default] - 无法找到资源[logback.groovy]

07:54:39,844 | -INFO in ch.qos.logback.classic.LoggerContext [default] - 无法找到资源[logback-test.xml]

07:54:39,844 | -INFO in ch.qos.logback.classic.LoggerContext [default] - 无法找到资源[logback.xml]

07:54:39,847 | -INFO in ch.qos.logback.classic.LoggerContext [default] - 设置默认配置.|#]

我将配置文件(称为logback.xml)放入src/main/resources我的Maven工件(这是一个WAR)的文件夹中.有趣的是,如果我尝试从类路径加载配置,我成功:

Reader r = new InputStreamReader(getClass().getClassLoader().getResourceAsStream("logback.xml"));
StringWriter sw = new StringWriter();
char[] buffer = new char[1024];
for (int n; (n = r.read(buffer)) != -1; )
    sw.write(buffer, 0, n);
String str = sw.toString();
System.out.println(str);
Run Code Online (Sandbox Code Playgroud)

打印我的示例配置文件:

[#|2013-07-03T07:55:30.844+0200|INFO|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=124;_ThreadName=Thread-2;|<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoders are assigned the type
             ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="debug">
        <appender-ref ref="STDOUT" />
    </root> </configuration>|#]
Run Code Online (Sandbox Code Playgroud)

pom.xml有以下条目:

        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.0.13</version>
        </dependency>

        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.0.13</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.5</version>
        </dependency>
Run Code Online (Sandbox Code Playgroud)

哪个打包为WAR文件(在EAR文件中).WAR文件中logback.xml的位置如下:WEB-INF/classes/logback.xml

有人知道我的设置有什么问题吗?

非常感谢您的帮助

stupidSheep

vik*_*eve 6

WAR文件中的位置是正确的WEB-INF/classes.

的logback配置文档有关,其中logback.xml文件可以位于一战中的谈判,但它并没有提到关于EAR什么.

你可以试试这个链接的信息吗?我想知道是否需要以特定的方式将其打包到EAR中.

  1. Glassfish 3 + ear + logback.xml

(编辑:删除第二个链接,不起作用)