在 maven jetty 7 插件中启用调试日志记录
Posted
技术标签:
【中文标题】在 maven jetty 7 插件中启用调试日志记录【英文标题】:Enable debug logging in maven jetty 7 plugin 【发布时间】:2011-01-23 06:43:45 【问题描述】:我正在运行一个带有简单mvn jetty:run
的 java webapp,使用最新的码头插件,但我似乎无法找到一种方法来告诉码头将调试消息输出到控制台(对于嵌入式码头实例,不是插件本身)。它目前只输出 WARN 和 INFO 消息。我试过设置-DDEBUG
和-DVERBOSE
,但它们什么也没做。我已经看过documentation,但它似乎没有涵盖这一点。
【问题讨论】:
【参考方案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>%dHH:mm:ss.SSS [%thread] %-5level %logger36 - %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 服务器资源:
Maven Jetty Plugin 页面 [m2] jetty6 plugin & log4j 消息/线程 Logback 文档中的 Chapter 3: Logback configuration【讨论】:
谢谢,帕斯卡。我只看到了您答案的第一个版本,所以我花了一段时间才接受它。我不记得我想这样做是为了什么,但如果它再次出现,我一定会再次提及。【参考方案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
其他资源:
Jetty Log configuration log4j configuration【讨论】:
系统属性 log4j.configurationFile 对我不起作用,但 log4j.configuration。 对于 log4j 1.2.16 Maven 3 我不得不去<systemProperty> <name>log4j.configuration</name> <value>$project.baseUri/src/test/resources/log4j.properties</value> </systemProperty>
【参考方案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>
【讨论】:
以上是关于在 maven jetty 7 插件中启用调试日志记录的主要内容,如果未能解决你的问题,请参考以下文章
Myeclipse中maven工程使用jetty插件启动jetty服务器调试