代码之家  ›  专栏  ›  技术社区  ›  wds

在Maven Jetty 7插件中启用调试日志记录

  •  18
  • wds  · 技术社区  · 14 年前

    我正在运行一个简单的Java WebApp mvn jetty:run ,使用最新的jetty插件,但我似乎找不到方法告诉jetty将调试消息输出到控制台(对于嵌入的jetty实例,而不是插件本身)。它当前只输出警告和信息消息。我试过设置 -DDEBUG -DVERBOSE 但他们什么都不做。我已经看过了 documentation 但似乎不包括这一点。

    5 回复  |  直到 9 年前
        1
  •  18
  •   Pascal Thivent    14 年前

    更新: 好吧,我终于把事情做好了,我就是这么做的。

    我的理解是,Jetty7不依赖于特定的日志框架,即使对于JSP引擎也是如此,因为Jetty7使用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>
    

    通过此设置,Jetty将输出调试消息:

    $ mvn jetty:run
    ...
    00:31:33.089 [main] DEBUG org.mortbay.log - starting DefaultHandler@145e5a6
    00:31:33.089 [main] DEBUG org.mortbay.log - started DefaultHandler@145e5a6
    00:31:33.105 [main] DEBUG org.mortbay.log - starting RequestLogHandler@1e80761
    00:31:33.106 [main] DEBUG org.mortbay.log - started RequestLogHandler@1e80761
    00:31:33.106 [main] DEBUG org.mortbay.log - starting HandlerCollection@1485542
    00:31:33.106 [main] DEBUG org.mortbay.log - started HandlerCollection@1485542
    00:31:33.106 [main] DEBUG org.mortbay.log - starting org.mortbay.jetty.Server@a010ba
    00:31:33.174 [main] DEBUG org.mortbay.log - started org.mortbay.jetty.nio.SelectChannelConnector$1@ee21f5
    00:31:33.216 [main] INFO  org.mortbay.log - Started SelectChannelConnector@0.0.0.0:8080
    00:31:33.217 [main] DEBUG org.mortbay.log - started SelectChannelConnector@0.0.0.0:8080
    00:31:33.217 [main] DEBUG org.mortbay.log - started org.mortbay.jetty.Server@a010ba
    [INFO] Started Jetty Server
    

    资源:

        2
  •  11
  •   yegor256    13 年前

    要扩展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
    

    其他资源:

        3
  •  5
  •   somebodywhocares    13 年前

    您也可以这样做“mvn-x jetty:run”

        4
  •  2
  •   Stepan Vavra    9 年前

    要扩展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记录器。默认值在 http://www.slf4j.org/apidocs/org/slf4j/impl/SimpleLogger.html )

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

    <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>
    
        5
  •  0
  •   vogdb    13 年前

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

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

    用于资源插件