4

構成に欠けているステップを見つけるのを手伝ってもらえますか?

非常に単純な Web アプリケーションにロガーを追加しようとしています。そのために、log4j2 (ベータ 9) を使用しています。

log4j2.xml私は次のように書き留めました

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} /%L/[%M] - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Logger name="prova.Hello" level="trace" additivity="false">
          <AppenderRef ref="Console"/>
        </Logger>
        <Logger name="servletstest.TestLogger" level="trace" additivity="false">
          <AppenderRef ref="Console"/>
        </Logger>
        <Root level="trace">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

WEB-INFフォルダに入れました。

次に、次のことを行う単純なサーブレットがあります

response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
    /* TODO output your page here. You may use following sample code. */
    out.println("<!DOCTYPE html>");
    out.println("<html>");
    out.println("<head>");
    out.println("<title>Servlet TestLogger</title>");            
    out.println("</head>");
    out.println("<body>");
    out.println("<h1>Servlet TestLogger at " + request.getContextPath() + "</h1>");
    out.println("</body>");
    out.println("</html>");
    logger.error("error");
    logger.info("info");
    logger.trace("trace");
    logger.debug("debug");
} finally {
    out.close();
}

ご覧のとおり、ロガーが期待どおりに機能するかどうかを確認するだけですが、機能しません。ここでWebアプリを読むことで、サーブレット3.0を実行するため、アプリケーションのweb.xmlを構成する必要はありません。実際、構成を追加しようとすると、次のエラーが表示されます

javax.servlet.UnavailableException: In a Servlet 3.0+ application, you must not define a log4jServletFilter in web.xml. Log4j 2 defines this for you automatically.

しかし、私が期待する出力は次のようになるため、log4j2構成ファイルをロードしないようです

10:57:55.490 [http-bio-8084-exec-5] ERROR servletstest.TestLogger - error
10:57:55.490 [http-bio-8084-exec-5] INFO servletstest.TestLogger - info
10:57:55.490 [http-bio-8084-exec-5] TRACE servletstest.TestLogger - trace
10:57:55.490 [http-bio-8084-exec-5] DEBUG servletstest.TestLogger - debug

代わりに私は

10:57:55.490 [http-bio-8084-exec-5] ERROR servletstest.TestLogger - error

xml ファイルを読み込めないようで、デフォルトでロガー レベルがエラーのみに設定されています。同じウェブページに書かれています

Tomcat 7 <7.0.43 では、catalina.properties を変更し、jarsToSkip プロパティから「log4j*.jar」を削除する必要があります。Log4j JAR ファイルのスキャンをスキップする場合は、他のコンテナーでも同様の操作が必要になる場合があります。

tomcat 7.0.41を実行しているため、catalina.propertiesを編集し、jartoskipプロパティからlog4j * .jarを削除しました。

私は何を間違っていますか?

ちなみにweb.xmlにはこれがあります

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <display-name>test</display-name>
    <servlet>
        <servlet-name>Jersey REST Service</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>prova</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet>
        <servlet-name>TestLogger</servlet-name>
        <servlet-class>servletstest.TestLogger</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey REST Service</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>TestLogger</servlet-name>
        <url-pattern>/TestLogger</url-pattern>
    </servlet-mapping>
     <listener>
        <listener-class>org.apache.logging.log4j.core.web.Log4jServletContextListener</listener-class>
    </listener>

</web-app>

これversionは 2.5 であり、正しくは 3.0 ではありません。おそらく、これが私に何らかの影響を与えているのでしょうか? またはジャージ構成?

編集: Web アプリのバージョンを 3.0 にするために、もう一度試しweb.xmlて次のように変更しましたが、構成が読み込まれません。何が間違っていますか?

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <servlet>
        <servlet-name>Prova</servlet-name>
        <servlet-class>test.Prova</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Prova</servlet-name>
        <url-pattern>/Prova</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
</web-app>

助けてくれてありがとう。

4

2 に答える 2

4

コメントで推測したように、WEB-INF/classesではなくに入れる必要がありWEB-INFます。

于 2013-11-09T19:47:28.990 に答える
1

開発目的で Eclipse ide を使用している場合は、log4j2.xml ファイルを src フォルダーに配置できます。

ここに画像の説明を入力

于 2015-04-20T13:54:37.200 に答える