Tomcatのログ出力をlog4j2に置き換える手順

Tomcat8.0.15で動作確認しました。

## logging.propertiesのリネーム/削除

{TOMCAT_HOME}/conf/logging.propertiesを削除または拡張子を変更します。

## Tomcat extrasライブラリのダウンロード

以下のライブラリを適当なミラーサーバからダウンロードします。
ここではjaistを選択します。

http://ftp.jaist.ac.jp/pub/apache/tomcat/tomcat-8/v8.0.15/bin/extras/tomcat-juli-adapters.jar
http://ftp.jaist.ac.jp/pub/apache/tomcat/tomcat-8/v8.0.15/bin/extras/tomcat-juli.jar

## ライブラリの配置

tomcat-juli-adapters.jar => {TOMCAT_HOME}/lib/tomcat-juli-adapters.jar
tomcat-juli.jar => {TOMCAT_HOME}/bin/tomcat-juli.jar (既存のファイルを置き換えます)

## log4j2ライブラリのダウンロードと配置

以下からバイナリのアーカイブをダウンロードします。
http://www.apache.org/dyn/closer.cgi/logging/log4j/2.1/apache-log4j-2.1-bin.zip

解凍したディレクトリにある以下のjarファイルを {TOMCAT_HOME}/lib/ 配下に置きます。

- log4j-1.2-api-2.1.jar
- log4j-api-2.1.jar
- log4j-core-2.1.jar

## log4j2.xmlの作成と配置

log4j2.xmlを作成して {TOMCAT_HOME}/lib/ や {TOMCAT_HOME}/conf/ に置きます。

```xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="OFF">
    <Properties>
        <Property name="pattern">[%d{yyyy-MM-dd HH:mm:ss.SSS}] %-5p %-24c{1}- %m%n</Property>
    </Properties>
    <Appenders>
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout pattern="${pattern}" />
        </Console>
        <RollingFile name="catalina" fileName="/path/to/logs/catalina.log" filePattern="/path/to/logs/catalina_%d{yyyy-MM-dd}.gz">
            <PatternLayout pattern="${pattern}" />
            <Policies><TimeBasedTriggeringPolicy /></Policies>
        </RollingFile>
        <RollingFile name="localhost" fileName="/path/to/logs/localhost.log" filePattern="/path/to/logs/localhost_%d{yyyy-MM-dd}.gz">
            <PatternLayout pattern="${pattern}" />
            <Policies><TimeBasedTriggeringPolicy /></Policies>
        </RollingFile>
        <RollingFile name="manager" fileName="/path/to/logs/manager.log" filePattern="/path/to/logs/manager_%d{yyyy-MM-dd}.gz">
            <PatternLayout pattern="${pattern}" />
            <Policies><TimeBasedTriggeringPolicy /></Policies>
        </RollingFile>
        <RollingFile name="host-manager" fileName="/path/to/logs/host-manager.log" filePattern="/path/to/logs/host-manager_%d{yyyy-MM-dd}.gz">
            <PatternLayout pattern="${pattern}" />
            <Policies><TimeBasedTriggeringPolicy /></Policies>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Logger name="org.apache.catalina.core.ContainerBase.[Catalina].[localhost]" level="info">
            <AppenderRef ref="console" />
            <AppenderRef ref="localhost"/>
        </Logger>
        <Logger name="org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager]" level="info" additivity="false">
            <AppenderRef ref="console" />
            <AppenderRef ref="manager"/>
        </Logger>
        <Logger name="org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager]" level="info" additivity="false">
            <AppenderRef ref="console" />
            <AppenderRef ref="host-manager"/>
        </Logger>
        <Root level="info">
            <AppenderRef ref="console" />
            <AppenderRef ref="catalina" />
        </Root>
    </Loggers>
</Configuration>
```
## 環境変数JAVA_OPTSの設定

{TOMCAT_HOME}/bin/setenv.sh(Windowsの場合はsetenv.bat)に以下を追加します。（ない場合は新規作成）

```bash
# setenv.sh
JAVA_OPTS="$JAVA_OPTS -Dlog4j.configurationFile=file:///path/to/log4j2.xml"
```
```bat
:: setenv.bat
@SET JAVA_OPTS=%JAVA_OPTS% -Dlog4j.configurationFile=file://C:/path/to/log4j2.xml
```

Tomcatを起動するとログがlog4j2で出力されているのがわかります。

```
[2015-01-15 14:35:37.518] INFO  HostConfig              - Deployment of web application directory C:\server\apache-tomcat-8.0.15\webapps\examples has finished in 547 ms
[2015-01-15 14:35:37.518] INFO  HostConfig              - Webアプリケーションディレクトリ C:\server\apache-tomcat-8.0.15\webapps\host-manager を配備します
[2015-01-15 14:35:37.655] INFO  TldScanner              - At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of J
ARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
[2015-01-15 14:35:37.664] INFO  HostConfig              - Deployment of web application directory C:\server\apache-tomcat-8.0.15\webapps\host-manager has finished in 146 ms
[2015-01-15 14:35:37.664] INFO  HostConfig              - Webアプリケーションディレクトリ C:\server\apache-tomcat-8.0.15\webapps\manager を配備します
[2015-01-15 14:35:37.842] INFO  TldScanner              - At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of J
ARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
[2015-01-15 14:35:37.848] INFO  HostConfig              - Deployment of web application directory C:\server\apache-tomcat-8.0.15\webapps\manager has finished in 184 ms
[2015-01-15 14:35:37.848] INFO  HostConfig              - Webアプリケーションディレクトリ C:\server\apache-tomcat-8.0.15\webapps\ROOT を配備します
[2015-01-15 14:35:37.990] INFO  TldScanner              - At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of J
ARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
[2015-01-15 14:35:37.997] INFO  HostConfig              - Deployment of web application directory C:\server\apache-tomcat-8.0.15\webapps\ROOT has finished in 149 ms
[2015-01-15 14:35:38.000] INFO  Http11AprProtocol       - Starting ProtocolHandler ["http-apr-8080"]
[2015-01-15 14:35:38.036] INFO  AjpAprProtocol          - Starting ProtocolHandler ["ajp-apr-8009"]
[2015-01-15 14:35:38.038] INFO  Catalina                - Server startup in 1704 ms
```

以上。