0

jetty-maven-plugin を使い始めたばかりです。

ログとシステム出力に関して奇妙な動作を見つけました。

mavenでjettyを起動すると

mvn -Djetty.port=8093 -Dlog4j.configuration=file:src/log4j.properties jetty:run

Bean コンストラクターの sysout メッセージが表示されます。

その後、 http://my.local.host:8093/api/rest/admin/housesという URL をリクエストすると、ブラウザーには正しいページが表示されますが、家に似たものは何も表示されません! コンソールまたはログ ファイルで。

ただし、Jetty、Spring などからの他のいくつかの INFO メッセージがそこに出力されます。

@Controller
public class AppAdminClientJsonController {

    private final static Logger logger = 
         LoggerFactory.getLogger(AppAdminClientJsonController.class);

    public AppAdminClientJsonController() {
         System.out.println("----------AppAdminClientJsonController----------");
    }

    @RequestMapping(value = "/admin/houses", method = RequestMethod.GET)
    public @ResponseBody
    List<House> getHouses() {

        logger.warn("house!");
        System.out.println("house!!");

        return Arrays.asList(new House("somesite", "http://somesite.com"));

    }
}

そのため、通常、Jetty は私のロガーを尊重せず、ファンキーな方法でシステムの出力ストリームをオーバーライドするため、サーバーが起動して実行された後は何も出力されません。

これは何ですか?

pom.xml のプラグインの部分

<plugin>
    <!-- http://wiki.eclipse.org/Jetty/Feature/Jetty_Maven_Plugin#Quick_Start:_Get_Up_and_Running -->
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>8.1.8.v20121106</version>
    <configuration>
        <webAppSourceDirectory>${basedir}/${webappRootPath}</webAppSourceDirectory>
        <scanIntervalSeconds>10</scanIntervalSeconds>
        <webAppConfig>
            <contextPath>/</contextPath>
            <descriptor>${basedir}/${webappRootPath}/WEB-INF/web.xml</descriptor>
        </webAppConfig>
    </configuration>
</plugin>

アップデート

System.out オブジェクト自体を印刷しようとしました。私は正しかった、Jetty はそれを上書きしました:

春の初期段階では、 java.io.PrintStream@175390b7 でした。

サーバーの起動後、 java.io.PrintStream@9c783fc になりました

4

1 に答える 1

1

Jetty は log4j にログを記録しません。

独自のロガー フレームワークがあります (これは偶然にも log4j よりも前のものです)。

デフォルトでは、独自のロガー フレームワークを使用してSystem.errにログアウトします。また、jetty のデフォルトのスタートアップ構成には、etc/jetty-logging.xmlすべての System.out および System.err をローリング ログ ファイルにルーティングする が含まれています。

ただし、jetty ロギング フレームワークは、クラスパスに存在する場合は slf4j を使用します。

log4j にログを記録したい場合は、slf4j 経由で行う必要があります。これを有効にするには、jetty-maven-plugin で構成された依存関係に次の依存関係が存在する必要があります ...

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>***your preferred version here***</version>
</dependency>

利用可能な slf4j-log4j12 のバージョン: http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.slf4j%22%20AND%20a%3A%22slf4j-log4j12%22

于 2013-02-10T05:48:24.067 に答える