2017-03-27 31 views
1

私はWebアプリケーションのログを記録する目的でLog4j2を使用しています。 単純なJavaクラスを作成してロガーを呼び出すと、完全に正常に動作し、ログをファイルに出力します。しかし、私がサーブレットクラスで同じことをしても、動作しません。 ドキュメントで指定されているとおり、web.xmlのlog4j2に関連するものは設定していません。サーブレット3.0のLog4j2を使用

web.xmlのコード:サーブレットクラスで

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns="http://xmlns.jcp.org/xml/ns/javaee"  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> 
<display-name>SampleWebApp</display-name> 
<welcome-file-list> 
<welcome-file>Welcome.jsp</welcome-file> 
</welcome-file-list> 
</web-app> 

ロギングコード:

public class MyServlet extends HttpServlet { 
private static final long serialVersionUID = 1L; 
private static final Logger log=LogManager.getLogger(MyServlet.class); 

私はこれを追加したので、私は明示的に、WEB-INFフォルダにlog4j2.xmlファイルを配置していませんプロジェクトをビルドした後、自動的にWEB-INF/classesに追加されます。

いくつかの設定がありません。

コードのライン:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 

     log.error("i am inside servlet"); 
     /*response.getWriter().append("Served at: ").append(request.getContextPath());*/ 
     System.out.println("GET called"); 

    } 

log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?> 
    <Configuration> 
     <Appenders> 
     <Console name="Console"> 
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
     </Console> 
     <File name="MyFile" filename="C:/Users/jasleen_kathuria/Documents/logs/info.log"> 
     <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
     </File> 
     </Appenders> 
<Loggers> 
<logger name="MyServlet" level="TRACE"> 
     <AppenderRef ref="MyFile"/> 
    </logger> 
</Loggers> 
+0

"これは機能していません"というのは、まだSA上のエラーの説明です...少なくとも、エラーの内容を指定することはできますか?コンパイラエラー、ランタイムエラー、またはロガーがログファイルにアクセスできない場合は、サーバー上のログファイルを見つけることができません。 :) – xander

+0

これは奇妙ですが、私はエラーを取得していません!そのログが生成されないことだけです。 –

+0

パッケージ内にMyServletクラスがあります。もしそうなら、_full name_をロガー設定に入れなければなりません。 – minus

答えて

0

あなたのWebアプリ、上のサーブレットコンテナ、およびどのようを展開/ビルド、少なくともどのように言うべきクラスパスにを追加してください。

すべて同じですが、主な問題はおそらく、あなたがWEB-INF/libにlog4j2 jarを追加していないか、またはWEB-INF/classesに設定しているということです。

単純なJavaクラスを呼び出すと、Webアプリケーションとは異なるクラスパスに頼っています。

log4j2.jarがデプロイされていることを確認します。たとえば、warをビルドしてその内容を確認することができます。

+0

私はTomcat 8.5を使用しています。私はlog4j2(coreとapi)用の2つのメインjarファイルをWEB-INF/libフォルダに置き、設定ファイルもWEB-INF/classesフォルダにあります。私は自分のプロジェクトをWARファイルとしてエクスポートし、Tomcat web-appsフォルダに配置します。 –

+0

実際のエラー(もしあれば)を少なくとも投稿して、動作しないロガーを使ってコード行を表示してください。 – minus

+0

私はajax呼び出しでサーブレットを呼び出しています。ajax呼び出しは成功しますが、ロギングコードは実行されず、コンパイルエラーまたはランタイムエラーも発生しません。 –

0

Tomcatを再起動してブラウザのキャッシュをクリアした後で解決しました。私は今ログが印刷されているのを見ることができます。

関連する問題