【问题标题】:Enable debug logging in maven jetty 7 plugin在 maven jetty 7 插件中启用调试日志记录
【发布时间】:2011-01-23 06:43:45
【问题描述】:

我正在运行一个带有简单mvn jetty:run 的 java webapp,使用最新的码头插件,但我似乎无法找到一种方法来告诉码头将调试消息输出到控制台(对于嵌入式码头实例,不是插件本身)。它目前只输出 WARN 和 INFO 消息。我试过设置-DDEBUG-DVERBOSE,但它们什么也没做。我已经看过documentation,但它似乎没有涵盖这一点。

【问题讨论】:

    标签: java logging maven-2 jetty maven-jetty-plugin


    【解决方案1】:

    更新:好的,我终于开始工作了,这就是我所做的。

    我的理解是 Jetty 7 对特定的日志框架没有任何依赖关系,即使对于 JSP 引擎也是如此,因为 Jetty 7 使​​用 JSP 2.1 引擎。所以你可以使用任何日志框架。这里我将使用 logback。

    首先在插件中添加logback-classic作为依赖,并将logback.configurationFile系统属性设置为指向配置文件:

    <project>
      ...
      <build>
        ...
        <plugins>
          <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version>7.0.0.pre5</version>
            <configuration>
              <systemProperties>
                <systemProperty>
                  <name>logback.configurationFile</name>
                  <value>./src/etc/logback.xml</value>
                </systemProperty>
              </systemProperties>
            </configuration>
            <dependencies>
              <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>0.9.15</version>
              </dependency>
            </dependencies>
          </plugin>
          ...
        </plugins>
      </build>
      ...
    </project>
    

    然后添加一个src/etc/logback.xml 配置文件。以下是最低配置:

    <configuration>
      <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
          <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
        </layout>
      </appender>
    
      <root level="debug">
        <appender-ref ref="STDOUT"/>
      </root>
    </configuration>
    

    使用此设置,码头将输出 DEBUG 消息:

    $ mvn码头:运行 ... 00:31:33.089 [main] 调试 org.mortbay.log - 开始 DefaultHandler@145e5a6 00:31:33.089 [main] 调试 org.mortbay.log - 开始 DefaultHandler@145e5a6 00:31:33.105 [main] 调试 org.mortbay.log - 开始 RequestLogHandler@1e80761 00:31:33.106 [main] 调试 org.mortbay.log - 开始 RequestLogHandler@1e80761 00:31:33.106 [main] 调试 org.mortbay.log - 开始 HandlerCollection@1485542 00:31:33.106 [main] 调试 org.mortbay.log - 开始 HandlerCollection@1485542 00:31:33.106 [main] 调试 org.mortbay.log - 开始 org.mortbay.jetty.Server@a010ba 00:31:33.174 [main] 调试 org.mortbay.log - 开始 org.mortbay.jetty.nio.SelectChannelConnector$1@ee21f5 00:31:33.216 [main] INFO org.mortbay.log - 开始 SelectChannelConnector@0.0.0.0:8080 00:31:33.217 [main] 调试 org.mortbay.log - 开始 SelectChannelConnector@0.0.0.0:8080 00:31:33.217 [main] 调试 org.mortbay.log - 开始 org.mortbay.jetty.Server@a010ba [INFO] 启动 Jetty 服务器

    资源:

    【讨论】:

    • 谢谢,帕斯卡。我只看到了您答案的第一个版本,所以我花了一段时间才接受它。我不记得我想这样做是为了什么,但如果它再次出现,我一定会再次提及。
    【解决方案2】:

    为了扩展 Pascal 的答案,这就是它与 log4j 的工作方式:

    <project>
      ...
      <build>
        ...
        <plugins>
          <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version>7.0.0.pre5</version>
            <configuration>
              <systemProperties>
                <systemProperty>
                  <name>log4j.configurationFile</name>
                  <value>file:${project.basedir}/src/test/resources/log4j.properties</value>
                </systemProperty>
              </systemProperties>
            </configuration>
            <dependencies>
               <dependency>
                 <groupId>log4j</groupId>
                 <artifactId>log4j</artifactId>
                 <version>1.2.16</version>
               </dependency>
               <dependency>
                 <groupId>org.slf4j</groupId>
                 <artifactId>slf4j-api</artifactId>
                 <version>1.6.1</version>
               </dependency>
               <dependency>
                 <groupId>org.slf4j</groupId>
                 <artifactId>slf4j-log4j12</artifactId>
                 <version>1.6.1</version>
               </dependency>
            </dependencies>
          </plugin>
          ...
        </plugins>
      </build>
      ...
    </project>
    

    这是你的${project.basedir}/src/test/resources/log4j.properties

    log4j.rootLogger=INFO, CONSOLE
    log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
    log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
    log4j.appender.CONSOLE.layout.ConversionPattern = [%-5p] %c: %m\n
    log4j.logger.org.eclipse.jetty.util.log=INFO
    

    其他资源:

    【讨论】:

    • 系统属性 log4j.configurationFile 对我不起作用,但 log4j.configuration。
    • 对于 log4j 1.2.16 Maven 3 我不得不去&lt;systemProperty&gt; &lt;name&gt;log4j.configuration&lt;/name&gt; &lt;value&gt;${project.baseUri}/src/test/resources/log4j.properties&lt;/value&gt; &lt;/systemProperty&gt;
    【解决方案3】:

    你也可以这样做“mvn -X jetty:run”

    【讨论】:

      【解决方案4】:

      我觉得这个解决方案更方便

          <resources>
              <resource>
                  <directory>${project.basedir}/src/main/resources</directory>
                  <targetPath>${project.build.outputDirectory}</targetPath>
                  <includes>
                      <include>log4j.properties</include>
                  </includes>
              </resource>
          </resources>
      

      别忘了粘贴

          <overwrite>true</overwrite>
      

      资源插件

      【讨论】:

        【解决方案5】:

        为了扩展 Pascal 和 yegor256 的答案,这就是它与 SLF4J Simple logger 一起使用的方式(这是最简单的选择,因为您只需向 slf4j-simple 添加依赖项):

        <project>
          ...
          <build>
            ...
            <plugins>
              <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>7.0.0.pre5</version>
        
                <dependencies>
                   <dependency>
                      <groupId>org.slf4j</groupId>
                      <artifactId>slf4j-simple</artifactId>
                      <version>1.7.5</version>
                   </dependency>
                </dependencies>
              </plugin>
              ...
            </plugins>
          </build>
          ...
        </project>
        

        可以直接从 Maven pom 配置 SLF4J Logger。默认值在http://www.slf4j.org/apidocs/org/slf4j/impl/SimpleLogger.html中描述)

        例如,登录到具有更高调试级别(TRACE)的文件/tmp/output.log

        <configuration>
           <systemProperties>
              <systemProperty>
                 <name>org.slf4j.simpleLogger.logFile</name>
                 <value>/tmp/output.log</value>
              </systemProperty>
              <systemProperty>
                 <name>org.slf4j.simpleLogger.defaultLogLevel</name>
                 <value>trace</value>
              </systemProperty>
           </systemProperties>
        </configuration>
        

        【讨论】:

          猜你喜欢
          • 2011-11-02
          • 2012-03-03
          • 1970-01-01
          • 2011-12-26
          • 1970-01-01
          • 1970-01-01
          • 2015-01-11
          • 2014-11-02
          • 1970-01-01
          相关资源
          最近更新 更多