- - PR -
AIX + Websphere + log4j にてファイル名、行番号が(?:?)になる
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-08-30 14:14
お世話になります。
WAS初心者です。 ただいま以下の環境でシステムを構築しています。 ▼環境 OS:AIX(ver5.2) web:Websphere(ver5) JDKバージョン:1.3.1 log4jバージョン:1.2.13 log4jを利用してログを出力しているのですが、 「ConversionPattern」を利用してレイアウトに「(%F:%L)」を 指定している部分が「(?:?)」と表示されてしまいます。 WEBアプリケーションを起動した直後は正常にファイル名、行番号が出力されているのですが、 何度かログ出力を実行していると「(?:?)」になってしまいます。 WEBアプリケーションを再起動しても同様の状態になります。 また、同じWARファイルをWindowsXP + Websphere(ver6)の環境に導入した場合は 上記現象が再現しませんでした。 どなたか同じような現象に遭遇された方はいらっしゃいますでしょうか。 情報をいただけると助かります。 以上、よろしくお願いいたします [ メッセージ編集済み 編集者: newman 編集日時 2006-08-30 14:16 ] | ||||
|
投稿日時: 2006-10-25 23:47
はじめまして。
私もWAS初心者ですが、newmanさん同様の現象が出ています。 環境は、Websphereのバージョンが6.0であること以外は 同様で、また、しばらくはファイル名、行番号が出ている のに、突然(?:?)が出て参ります。 恥ずかしながら、原因の切り分けすらできず難渋しておりまして、 切り分け方法のアドバイスでも十分ですのでいただければ幸いです。 | ||||
|
投稿日時: 2006-10-26 09:26
javac -g:none
でコンパイルされたクラスの部分の行番号がでない という現象なのではないでしょうか。 スタックトレースなど、実行時にソースの行番号が出ますが、 アレはclassファイルにバイトコードのどのあたりがjavaファイルの どのあたりだったという情報を持っていて、 そこを参照して行番号を出しているのです。 ですから、javacのオプションでこの情報をカットすると 行番号がわからなくなってしまいます。 http://java.sun.com/j2se/1.5.0/ja/docs/ja/tooldocs/windows/javac.html javap -l によって逆コンパイルするとこの行番号テーブルを確認できます。 行番号不明となる該当クラスを逆コンパイルして行番号テーブルが ないことが確認できれば間違いないでしょう。 http://java.sun.com/j2se/1.5.0/ja/docs/ja/tooldocs/windows/javap.html | ||||
|
投稿日時: 2006-10-27 16:08
途中から行番号が消えてしまうと言うことは、JVMが実行コードを最適化する際に行番号への参照を失ってしまっているのではないでしょうか。
最適化を抑止するようなオプションがあれば回避できるかもしれません。 よほど問題になっていなければパフォーマンスとのトレードオフとして無視するのがいいかもしれません。 [ メッセージ編集済み 編集者: インギ 編集日時 2006-10-27 16:10 ] | ||||
|
投稿日時: 2006-10-27 16:54
そうか! ジャストインタイムコンパイラがネイティブコード化しちゃってる可能性があるのですね。 上記現象だとそちらのネタが正解のように思えます。 SunのVMであれば -Xint でネイティブコード化が防げますが、 このあたりの引数は非標準オプションですからVMベンダによりけりでしょうね。 http://java.sun.com/j2se/1.5.0/ja/docs/ja/tooldocs/windows/java.html | ||||
|
投稿日時: 2006-11-09 22:44
インギさま、nagiseさまの仰るように、JITさんがそのようにしている、
と考えるのが自然ですね。 パフォーマンスは、さして問題ではないので(どちらかというと、 WebSphereの設定を変えるほうが大変・・・)、ちょっとおいて置く ことにしようと思います。 みなさま、お忙しいところ、情報本当にありがとうございました。 |
1