2016-07-23 10 views
1

Webアプリケーションでlog4j2を設定しようとしましたが、いくつかのチュートリアルに従っています。私はglassfish 4.1.1サーバーとサーブレットバージョン3.1で作業しています。私は、以下の構成で、ロギング機能を設定することができる午前:log4j-web.jarを使用したWebアプリケーションでのLog4j2の設定

log4j.propertiesプロパティファイルはsrc/main/resourcesフォルダに置かれ

 # Root logger option 
    log4j.rootLogger=INFO, consoleAppender, fileAppender 

    # debug level logger 
    log4j.logger.kumar.suraj.college.administration.login=DEBUG 

    # Redirect log messages to console 
    log4j.appender.consoleAppender=org.apache.log4j.ConsoleAppender 
    log4j.appender.consoleAppender.Target=System.out 
    log4j.appender.consoleAppender.layout=org.apache.log4j.PatternLayout 
    log4j.appender.consoleAppender.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 

    # Redirect log messages to a log file, support file rolling. 
    log4j.appender.fileAppender=org.apache.log4j.DailyRollingFileAppender 
    log4j.appender.fileAppender.File=E:\\DEVELOPMENT\\JAVA\\web-logs\\web-college-administration\\applicationLogs.log 
    log4j.appender.fileAppender.layout=org.apache.log4j.PatternLayout 
    log4j.appender.fileAppender.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 

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>College Administration</display-name> 
     <!--  <context-param> 
        <param-name>log4jConfiguration</param-name> 
        <param-value>/log4j.properties</param-value> 
       </context-param>is it required 
     --> 
     <!--from where is this class referenced in dependency without web --> 
     <listener> 
      <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class> 
     </listener> 
     <servlet> 
      <servlet-name>loginServlet</servlet-name> 
      <servlet-class>kumar.suraj.college.administration.login.LoginServlet</servlet-class> 
     </servlet> 
     <servlet-mapping> 
      <servlet-name>loginServlet</servlet-name> 
      <url-pattern>/login</url-pattern> 
     </servlet-mapping> 

     </web-app> 

ファイルの場所を定義するコンテキストパラメータがコメントアウトされています。おそらくlog4jはデフォルトでlog4j.propertiesという名前のファイルを探します。ただ、ファイルの場所を指定する正しい方法があるかどうかを知りたがっています。

また、参照されているorg.apache.logging.log4j.web.Log4jServletContextListenerがどのjarかわかりません。私はすべてのjarファイルを検索しましたが、このクラスを見つけることができませんでした。 log4jの

<dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.17</version> 
    </dependency> 

ため

LoginServlet.java

package kumar.suraj.college.administration.login; 

    import java.io.IOException; 
    import javax.servlet.ServletException; 
    import javax.servlet.http.HttpServlet; 
    import javax.servlet.http.HttpServletRequest; 
    import javax.servlet.http.HttpServletResponse; 
    import org.apache.log4j.Logger; 

    import kumar.suraj.college.administration.adduser.AddUserServlet; 

    public class LoginServlet extends HttpServlet { 
     private static final long serialVersionUID = 1L; 

     // final static Logger logger = LogManager.getLogger(LoginServlet.class); 
     final static Logger logger = Logger.getLogger(LoginServlet.class); 

     public LoginServlet() { 
      super(); 
     } 

     @Override 
     protected void doGet(final HttpServletRequest request, final  HttpServletResponse response) 
     throws ServletException, IOException { 
      LoginServlet.logger.debug("debug level logging supported");    response.getWriter().append("Servedat:").append(request.getContextPath()); 
    response.getWriter().append("Hello Suraj"); 
} 

     @Override 
     protected void doPost(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException { 
       LoginServlet.logger.debug("debug level logging supported"); 
       this.doGet(request, response); 
     } 
    } 

のpom.xml依存性はこのすべてが正常に動作し、私は両方のコンソールでログだけでなく、ファイルを取得します。しかし、私は、以下のリンクごとに設定を変更しようとすると:代わりに、以前の私は

 <dependency> 
      <groupId>org.apache.logging.log4j</groupId> 
      <artifactId>log4j-web</artifactId> 
      <version>2.6.2</version> 
     </dependency> 

のlog4j-APIとlog4jのコアに切り替えて、指定した依存関係のよう

https://logging.apache.org/log4j/2.x/manual/webapp.html#Servlet-3.0 https://logging.apache.org/log4j/2.x/maven-artifacts.html

が追加されますlog4j-web.jarとの推移的な依存関係として

LoginServlet.javaで行ったその他の変更は、コンパイル時にエラーが発生しました。以下のようであるのlog4j-web.jar:

 import org.apache.logging.log4j.LogManager; 
    import org.apache.logging.log4j.Logger; 


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

主な変更は、ロガー変数二輸入の初期化です。残りの設定はそのまま残ります。また、この場合log4j-web.jarのweb.xmlで指定されたリスナークラスを見つけることができました。まだこのロギングではロギングが機能していません。

私はそれを手伝ってもらえますか、ここで間違っていますか教えてください。

答えて

1

私は前に言及したリンクのリサーチと再読を少ししてから、ついにウェブアプリケーションでlog4j2を設定することができました。今私が間違っていることについて言及したいと思います。

リンクhttps://logging.apache.org/log4j/2.x/manual/webapp.html

で述べたように、私は、サーブレット3.0以上を使用していた場合、私の配備記述子にLog4jServletContextListenerクラスを登録する必要はありません、それだけで、サーブレット2.5以下に登録する必要があります。また、私がlog4j2の命名規則を遵守している場合は、ファイルの場所を指定する必要はありません。

代わりにプロパティの形式はlog4j2にファイルとして今私はlog4j2.xmlを使用していますlog4j2.propertiesのもう一つの変化は、log4j1で使用されているし、別のです。私はこれを理解助けた以下のリンクで与えられた答えに感謝します。

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>College Administration</display-name> 
    <servlet> 
     <servlet-name>loginServlet</servlet-name> 
     <servlet-class>kumar.suraj.college.administration.login.LoginServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>loginServlet</servlet-name> 
     <url-pattern>/login</url-pattern> 
    </servlet-mapping> 

    </web-app> 

log4j2.xml

:現在のフォーマットがサポートされて Log4j 2 doesn't support log4j.properties file anymore?

はリンクhttps://logging.apache.org/log4j/2.0/manual/configuration.html#Properties以下

は私の配備記述子とlog4jのconfiguartionファイルが現在どのように見えるかです参照してください。

<?xml version="1.0" encoding="UTF-8"?> 
    <!DOCTYPE xml> 
    <Configuration status="WARN"> 
    <Appenders> 
     <Console name="Console" target="SYSTEM_OUT"> 
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
     </Console> 
     <File name="File" fileName="E:\\DEVELOPMENT\\JAVA\\web-logs\\web-college-administration\\applicationLogs.log"> 
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>  
     </File> 
    </Appenders> 
    <Loggers> 
    <Root level="debug"> 
     <AppenderRef ref="Console"/> 
     <AppenderRef ref="File"/> 
    </Root> 
    </Loggers> 
    </Configuration> 
関連する問題