@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

log4netでの文字化け

1
投稿者投稿内容
みつん
大ベテラン
会議室デビュー日: 2004/05/21
投稿数: 100
投稿日時: 2004-05-21 18:12
はじめまして。みつんと申します。

今回初めてlog4netでロギングを行うことになりました。
ダウンロードから始め、サンプルを作って出力されたログファイルを見たところ、
日本語部分が文字化けしていました。
EncodingにShift-JISを設定しているのですがうまいきません。
基本的な事でお恥ずかしいのですが、
どなたかお力をお借りできませんでしょうか??
何卒、宜しくお願いいたします。

--------------------------------------------------------------
<?xml version="1.0" encoding="Shift_JIS" ?>
<log4net debug="false">
<appender name="TEST" type="log4net.Appender.FileAppender,log4net" >
<param name="File" value="error_log.txt" />
<param name="AppendToFile" value="true" />
<param name="Encoding" value="Windows-31J"/>
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] &lt;%X
{auth}&gt; - %m%n" />
</layout>
</appender>

<root>
<priority value="WARN" />
<appender-ref ref="TEST" />
</root>
<category name="TestLogin"><priority value="DEBUG" /></category>
</log4net>
_________________
ぢゃん♪
大ベテラン
会議室デビュー日: 2003/06/12
投稿数: 208
お住まい・勤務地: 都内
投稿日時: 2004-05-24 07:47
引用:

みつんさんの書き込み (2004-05-21 18:12) より:

コード:
    <param name="Encoding" value="Windows-31J"/>




どうも、.NET Frameworkでは "Windows-31J" というエンコード名が使えないような……。
コード:
System.Text.Encoding enc = System.Text.Encoding.GetEncoding("Windows-31J");


で試してみましたが、
コード:
System.ArgumentException: windows-31j はサポートされたエンコード名ではありません。

パラメータ名 : name


ですね。
IANAで登録されている名前なので、サポートされていないのが問題な気がしますけど……。)


それはともかく、ここを
コード:
    <param name="Encoding" value="Shift_JIS"/>


としてみたら、どうでしょう?

[ メッセージ編集済み 編集者: ぢゃん♪ 編集日時 2004-05-24 09:12 ]
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-05-24 09:42
駄目な原因はぢゃん♪さんの書き込みを参照していただくとして、ちょっと補足です。
引用:

みつんさんの書き込み (2004-05-21 18:12) より:
EncodingにShift-JISを設定しているのですがうまいきません。
--------------------------------------------------------------
<?xml version="1.0" encoding="Shift_JIS" ?>


もしここのencodingをShift-JISに設定したということなら、意味が違います。
この指定は、簡単に言うとxmlファイル自身がどのようなエンコーディングで保存されているかを意味します。
ここでは、log4netの「設定ファイル自身」のエンコーディングを指定しなければなりません。

設定ファイルがUTF8等で保存されているのに、Shift_JISなどに設定するのは誤りです。
日本語が含まれていないと実際には同じになったりしますが、間違って理解していたなら注意したほうが良いと思います。
みつん
大ベテラン
会議室デビュー日: 2004/05/21
投稿数: 100
投稿日時: 2004-05-24 11:23
ぢゃん♪さん、なちゃさん、ご返答ありがとうございます。

確かにあの後、VSのログをよく見ると、

log4net:WARN Unable to set property [Encoding] on object [log4net.Appender.FileAppender] (no property found)
log4net:WARN Unable to set property [Encoding] on object [log4net.Appender.FileAppender] (with acceptable conversion types)

というワーニングが出ていました。
これは例の箇所を

<param name="Encoding" value="Shift_JIS"/>

としても出力されます。

引用:

なちゃさんの書き込み (2004-05-24 09:42) より:
駄目な原因はぢゃん♪さんの書き込みを参照していただくとして、ちょっと補足です。
引用:

みつんさんの書き込み (2004-05-21 18:12) より:
EncodingにShift-JISを設定しているのですがうまいきません。
--------------------------------------------------------------
<?xml version="1.0" encoding="Shift_JIS" ?>


もしここのencodingをShift-JISに設定したということなら、意味が違います。
この指定は、簡単に言うとxmlファイル自身がどのようなエンコーディングで保存されているかを意味します。
ここでは、log4netの「設定ファイル自身」のエンコーディングを指定しなければなりません。

設定ファイルがUTF8等で保存されているのに、Shift_JISなどに設定するのは誤りです。
日本語が含まれていないと実際には同じになったりしますが、間違って理解していたなら注意したほうが良いと思います。



ご指摘ありがとうございます。確かにそのとおりですね。
念のため、Shift-JISで新しくファイルを作り保存しました。

出力されたログファイルは秀丸で開いているのですが、
エンコードをUTF-8に変更してから開くと、
ちゃんと日本語表示されます。(当たり前ですね..。)
log4netのバージョンは1.1.1なんですが、古いのでしょうか...。
ベータ版ではまだ上がありましたよねぇ。
いえ、私の設定がおかしいんですよね、きっと。
1

スキルアップ/キャリアアップ(JOB@IT)