質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.36%

Java log4jの文字化け

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 13K+

score 190

現在、既存のWebアプリ改修を行っています。
そのアプリの中にlog4jを使用したログ出力機能があるのですが、ローカル環境と本番環境での挙動に差があり原因を調べておりますが「決定的な原因はこれ!」というものがわからず、本番環境のプログラムを何度も交換しながらテストするわけにもいかない為困っております。
また、私はlog4jを使用したこともなく、詳しい知識もない状態で「調べておいて」と言われてしまっている状況です。

質問
log4jを使用して文字化け「??????」が発生する際、考えられる原因箇所・調査方法

事象
ローカル環境では文字化けなく、日本語がログにちゃんと出力される
本番環境では日本語に文字化けが発生し、「?????????」のように表示されてしまう
出力されていたLOGファイルの文字コードは「SJIS」となっていました。

関係がありそうなところで、log4j.xmlの内容を記します。
【log4j.xml】

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" >
  <appender name="C" class="org.apache.log4j.ConsoleAppender">
     <param name="threshold" value="debug"/>
     <param name="Target" value="System.out" /> 
     <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%-5p\t%d\t[%t]\t%m%n" />
     </layout>
  </appender>
  <appender name="update" class="org.apache.log4j.DailyRollingFileAppender">
     <param name="threshold" value="debug"/>
     <param name="File" value="${catalina.home}/logs/trans/update.log" /> 
     <param name="Append" value="true" />
     <layout class="jp.co.xxx.trans.log.UserKeyAndPatternLayout">
        <param name="ConversionPattern" value="%-5p\t%d\t[%t]\t%m%n" />
     </layout>
     <filter class="jp.co.xxx.trans.log.RegexMatchFilter" >
        <param name="regex" value="^(insert|update|delete).*" />
     </filter>
  </appender>
  <appender name="trace" class="org.apache.log4j.DailyRollingFileAppender">
     <param name="threshold" value="debug"/>
     <param name="File" value="${catalina.home}/logs/trans/trace.log" /> 
     <param name="Append" value="true" /> 
     <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%-5p\t%d\t[%t]\t%m%n" />
     </layout>
  </appender>
  <appender name="request" class="org.apache.log4j.DailyRollingFileAppender">
     <param name="threshold" value="debug"/>
     <param name="File" value="${catalina.home}/logs/trans/request.log" /> 
     <param name="Append" value="true" /> 
     <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%-5p\t%d\t[%t]\t%m%n" />
     </layout>
  </appender>
  <appender name="system" class="org.apache.log4j.DailyRollingFileAppender">
     <param name="threshold" value="info"/>
     <param name="File" value="${catalina.home}/logs/trans/system.log" /> 
     <param name="Append" value="true" />
     <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%-5p\t%d\t[%t]\t%m%n" />
     </layout>
  </appender>
  <appender name="warnAppender" class="org.apache.log4j.DailyRollingFileAppender">
     <param name="threshold" value="warn"/>
     <param name="File" value="${catalina.home}/logs/trans/warn.log" /> 
     <param name="Append" value="true" /> 
     <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%-5p\t%d\t[%t]\t%m%n" />
     </layout>
  </appender>
  <appender name="errorAppender" class="jp.co.xxx.trans.log.ErrorsFileAppender">
     <param name="threshold" value="error"/>
     <param name="File" value="${catalina.home}/logs/trans/errors/error.log" /> 
     <param name="Append" value="true" /> 
     <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%-5p\t%d\t[%t]\t%m%n" />
     </layout>
  </appender>

  <logger name="error">
    <appender-ref ref="errorAppender"/>
  </logger>
  <logger name="warn">
    <appender-ref ref="warnAppender"/>
  </logger>
  <logger name="jp.co.xxx.trans">
    <appender-ref ref="trace"/>
  </logger>
  <logger name="org.seasar.extension.jdbc">
    <appender-ref ref="trace"/>
    <appender-ref ref="update"/>
  </logger>
  <logger name="org.seasar.framework.aop.interceptors.TraceInterceptor">
    <appender-ref ref="trace"/>
  </logger>
  <logger name="org.seasar.extension.jta">
    <appender-ref ref="trace"/>
  </logger>
  <logger name="org.seasar.extension.filter.RequestDumpFilter">
    <appender-ref ref="request"/>
  </logger>
  <root>
    <appender-ref ref="system"/>
  </root>
</log4j:configuration>

その他原因解明に必要な事項があればお手数ですがお伺いできますと幸いです。
よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Alice0225

    2016/10/24 10:29

    言葉足らずな為追記です。出力されたログファイルの文字コードに関してはローカル・本番ともに「SJIS」となっておりました。同様の文字コードであるにもかかわらず本番環境のみ文字化けとなってしまう理由が知りたいのです。

    キャンセル

  • A-pZ

    2016/10/24 10:39

    開発環境と本番環境のOSの違いなども影響しますし、本番環境のログが文字化けする件について、このログ設定からはいくつかログを出していますが、すべて文字化けを起こしているということでしょうか。本番環境のログファイルを入手し、テキストエディタないしはターミナルにてShift-JISを指定して開いてもダメだったでしょうか。

    キャンセル

  • Alice0225

    2016/10/24 10:55

    >>A-pZさん 当Webアプリから出力されるファイルのうち、日本語が出現する箇所に関してはすべて「??????」表記となってしまっています。SAKURAエディタを使用し、各文字コードを指定して開いてみましたが結果はいずれも「??????」のままとなりました。

    キャンセル

回答 2

check解決した方法

0

自己解決いたしましたのでご報告いたします。
スタート→コントロールパネル→時計、言語、および地域→場所の変更
「管理」タブ→システム ロケールの変更(C)...
上記より、Unicode 対応でないプログラムの現在の言語:を「英語(米国)」から「日本語(日本)」にすることで解決に至りました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

log4j使用したことないので単に検索しただけの情報ですが、

ご質問にあるconfigurationファイルにはencodingの指定がないので、下記のプロパティーの値もしくはそれもないならシステムのデフォルトといった指定になっているのではないかと推測しました。

ログの出力コード系の設定変更

プロパティの設定がどうなっているかも調べられれば違いが判る可能性があると思います。

なお本番稼働している方のログをテキストエディターではなくバイナリーエディターで開き、本来表示されているはずの文字列とファイル中のバイトデータ列を示されるとlog4jの設定方法の知識如何にかかわらずどのようなエンコーディングになっていそうかの予測がつきやすいと思います。
これは少々迂遠な方法に思えますが、質問者さんもおっしゃっているとおり既に運用に入っているシステムなので色々な実験をしてみることが許されない状況であることから「事実を正確に知る」という意味では有効だと思いました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.36%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る