tomcat 7ログ管理--基礎知識、構成、log 4 jを使用してログ分割

9043 ワード

ずっとtomcatのログ管理を研究したいと思っていましたが、今日やっと時間を割いて、インターネットで資料を調べたり、自分で実践したりして、やっとこの部分を理解しました.本人用tomcatバージョンは7.0.55で、以下に書いた内容もこのバージョンの構成に基づいているので、7以下は少し違うかもしれませんが、ここでは説明しません.正しくない部分があれば、皆さんのご指摘を歓迎します.
注意:tomcat 7ログ管理に関する一部の内容は、Apache tomcat 7.0ドキュメントのloggingセクションから来ており、ソースドキュメントの移行を参照してください.http://tomcat.apache.org/tomcat-7.0-doc/logging.html
———————————————————————私は本文の分割線です———————————————————————————————
次はtomcatログの基本知識の科学普及時間です.すでに知っていることはスキップしてください.
tomcat上のログの実装はApache Commons Loggingライブラリに基づいているため、commons-loggingパッケージを導入する必要があります(私はcommons-logging-1.2.jarを使用しています)
tomcat上でwebプロジェクトレコードログを実行するには、次の3つの方法があります.
  • システムjdkに付属のlogging API:java.util.logging;
  • java servlet仕様を使用して提供されるlogging API:javax.servlet.ServeretContext.log(.)
  • log 4 j
  • のような他のログフレームワークの使用を選択
    異なるプロジェクトで使用される同じログ・フレームワークは互いに独立していますが、プロジェクトがjava.util.loggingを直接または間接的に使用してログを記録している場合は、システムによって統一的にロードされ、異なるプロジェクト間で共有されているためです.
    1.java.util.loggingの使用
    JAva.util.logging APIのデフォルト実装機能は限られているため、tomcatのデフォルト構成ではログ管理(LogManager)の実装を別の実装コンテナJULIに置き換え、標準JDK java.util.loggingの構成メカニズムもサポートされている.JULIの各クラスのロードプロパティファイルを設定し、プロセッサを定義することができる.これにより、開発者により大きな自由度が与えられます.
    JULIのログ構成は、グローバル構成とプロジェクト構成に分けられます.グローバル構成はtomcatの構成ディレクトリ${catalina.base}/conf/logging.propertiesファイルにあり、このファイルが構成されていないか読めない場合、tomcatはJREのデフォルトログ構成を使用し、${java.home}/lib/logging.propertiesでプロファイルの内容を表示できます.プロジェクトプロファイルは、異なるプロジェクトに対して、WEB-INFO/classes/logging.propertiesにある.
    次のコードはJREのログプロファイルの一部で、ログプロセッサがConsoleHandler.System.errエラーログを受け入れることができることがわかります.
    handlers= java.util.logging.ConsoleHandler
    
    # To also add the FileHandler, use the following line instead.
    #handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler
    
    # Default global logging level.
    # This specifies which kinds of events are logged across
    # all loggers.  For any given facility this global level
    # can be overriden by a facility specific level
    # Note that the ConsoleHandler also has a separate level
    # setting to limit messages printed to the console.
    .level= INFO
    
    ############################################################
    # Handler specific properties.
    # Describes specific configuration info for Handlers.
    ############################################################
    
    # default file output is in user's home directory.
    java.util.logging.FileHandler.pattern = %h/java%u.log
    java.util.logging.FileHandler.limit = 50000
    java.util.logging.FileHandler.count = 1
    java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter
    
    # Limit the message that are printed on the console to INFO and above.
    java.util.logging.ConsoleHandler.level = INFO
    java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
    

    次のコードはtomcatプロファイルのログ構成部分です.FIleHandlerが追加され、ログをファイルに書き込むことができます.また、異なるloggerに対してそれぞれのレベルとhandlerを構成することができます.
    handlers = 1catalina.org.apache.juli.FileHandler, 2localhost.org.apache.juli.FileHandler, 3manager.org.apache.juli.FileHandler, 4host-manager.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
    
    .handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
    
    ############################################################
    # Handler specific properties.
    # Describes specific configuration info for Handlers.
    ############################################################
    
    1catalina.org.apache.juli.FileHandler.level = FINE
    1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
    1catalina.org.apache.juli.FileHandler.prefix = catalina.
    
    2localhost.org.apache.juli.FileHandler.level = FINE
    2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
    2localhost.org.apache.juli.FileHandler.prefix = localhost.
    
    3manager.org.apache.juli.FileHandler.level = FINE
    3manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
    3manager.org.apache.juli.FileHandler.prefix = manager.
    
    4host-manager.org.apache.juli.FileHandler.level = FINE
    4host-manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
    4host-manager.org.apache.juli.FileHandler.prefix = host-manager.
    
    java.util.logging.ConsoleHandler.level = FINE
    java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
    
    
    ############################################################
    # Facility specific properties.
    # Provides extra control for each logger.
    ############################################################
    
    org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
    org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.FileHandler
    
    org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO
    org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.FileHandler
    
    org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFO
    org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.org.apache.juli.FileHandler

    ここでorg.apache.juli.FileHandlerはjavaが提供する複数の実装クラスを統一的に使用できるエントリであり、handlerの名前の前に接頭辞を追加することができ、接頭辞はStringで始まり文字'.'で終わり、'.handler'を使用してroot loggerのhandlerセットを定義することができる
    2.ログ記録にログ4 jを使用
    Log 4 jは比較的広く応用されているログフレームワークであり、統合と使用が容易である.Apache Log 4 jを使用してjava.util.loggingの代わりにtomcatを再構成する方法について説明します.
    現在のプロジェクトに対してlog 4 jを使用したい場合は、log 4 j.jar、log 4 j.propertiesをプロジェクトのWEB-INFO/libとWEB-INFO/classesフォルダの下にそれぞれ入れるだけです.ただし、tomcatで実行されているすべてのプロジェクトにlog 4 jを適用するには、次の構成手順が必要です.
    1)まずlog 4 j.propertiesファイルを作成し、tomcatのlibディレクトリ$CATALINA_に配置します.BASE/lib下.次の構成はtomcatの公式ドキュメントログ構成のセクションから抜粋します.
    log4j.rootLogger = INFO, CATALINA
    
    # Define all the appenders
    log4j.appender.CATALINA = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.CATALINA.File = ${catalina.base}/logs/catalina
    log4j.appender.CATALINA.Append = true
    log4j.appender.CATALINA.Encoding = UTF-8
    # Roll-over the log once per day
    log4j.appender.CATALINA.DatePattern = '.'yyyy-MM-dd'.log'
    log4j.appender.CATALINA.layout = org.apache.log4j.PatternLayout
    log4j.appender.CATALINA.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
    
    log4j.appender.LOCALHOST = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.LOCALHOST.File = ${catalina.base}/logs/localhost
    log4j.appender.LOCALHOST.Append = true
    log4j.appender.LOCALHOST.Encoding = UTF-8
    log4j.appender.LOCALHOST.DatePattern = '.'yyyy-MM-dd'.log'
    log4j.appender.LOCALHOST.layout = org.apache.log4j.PatternLayout
    log4j.appender.LOCALHOST.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
    
    log4j.appender.MANAGER = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.MANAGER.File = ${catalina.base}/logs/manager
    log4j.appender.MANAGER.Append = true
    log4j.appender.MANAGER.Encoding = UTF-8
    log4j.appender.MANAGER.DatePattern = '.'yyyy-MM-dd'.log'
    log4j.appender.MANAGER.layout = org.apache.log4j.PatternLayout
    log4j.appender.MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
    
    log4j.appender.HOST-MANAGER = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.HOST-MANAGER.File = ${catalina.base}/logs/host-manager
    log4j.appender.HOST-MANAGER.Append = true
    log4j.appender.HOST-MANAGER.Encoding = UTF-8
    log4j.appender.HOST-MANAGER.DatePattern = '.'yyyy-MM-dd'.log'
    log4j.appender.HOST-MANAGER.layout = org.apache.log4j.PatternLayout
    log4j.appender.HOST-MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
    
    log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender
    log4j.appender.CONSOLE.Encoding = UTF-8
    log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout
    log4j.appender.CONSOLE.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
    
    # Configure which loggers log to which appenders
    log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost] = INFO, LOCALHOST
    log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager] =\
      INFO, MANAGER
    log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager] =\
      INFO, HOST-MANAGER

     2)log 4 jのjarパッケージをダウンロードするには1.2以上のバージョンが必要
     3)tomcat-juli.jar、tomcat-juli-adapters.jarをtomcatの外部コンポーネントとしてダウンロードします.ここでtomcat-juli.jarはデフォルトとは異なり、Apache Commons Loggingのすべての実装が含まれています.
     4)tomcatのグローバル構成としてlog 4 jを使用する場合は、まずlog 4 j.jar、tomcat-juli-adapters.jarを$CATALINA_に入れます.HOME/libディレクトリの下に$CATALINA_HOME/bin/tomcat-juli.jarをダウンロードしたtomcat-juli.jarに置き換えます
     5)違う$CATALINAを使うとHOMEと$CATALINA_BASEはtomcatを実行し、同じ$CATALINAを使用することを望んでいます.BASEがlog 4 jを構成するには、次の手順に従います.
        $CATALINA_の作成BASE/binと$CATALINA_BASE/libディレクトリ;
        log 4 j.jarとtomcat-juli-adapters.jarを$CATALINA_に入れますBASE/lib下;
        tomcat-juli.jarを$CATALINA_に入れるBASE/bin下;
        security managerで実行されているtomcatの場合は、$CATALINA_を編集する必要があります.BASE/conf/catalina.policyファイルは、異なるtomcat-juli.jarを使用するようにします.
     6)$CATALINA_を削除BASE/conf/logging.propertiesファイル
     7)tomcatの再起動
    上記の手順でtomcatのデフォルトjava.util.loggingの代わりにlog 4 jを使用してログを出力すると構成が完了します.