2011-08-17 6 views
5

私は自分のプロジェクトにログインするためにlog4jを使用します。ここでは、サンプルの設定だです:log4jとweblogic:重複したログメッセージ

public class MyClass { 
    private final Logger logger = Logger.getLogger(MyClass.class); 

    public MyClass() { 
    BasicConfigurator.configure(); 
    Logger.getLogger(MyClass.class).setLevel(Level.INFO); 
    } 

    ... 

} 

問題が続いありますが、2回目の呼び出しに2と同じメッセージが存在する、(私は最初の呼び出しで意味だけで1メッセージがある次の各ロガーはそれを呼び出すには、ログメッセージを複製していることですそれらのうちの3つなど)。新しいロガーのインスタンスが作成され、すべての古いインスタンスで使用されるたびに発生するようです。
この問題を回避するにはどうすればよいですか?おかげさまで

UPP。それを静的にしようとしましたが、とにかく動作しません。私はまだ複数のログメッセージを取得します。何か案は?おそらくいくつかのWeblogic固有のものでしょうか?

答えて

4

ロガーstatic

private static final Logger logger = Logger.getLogger(MyClass.class); 

がここに鍵が各クラスのではなく、インスタンスごとにLoggerを作成することであることを確認してください。

+0

ありがとうございます@ショーン。 – kardanov

+0

ええと、これを試してみましたが、成功しませんでした。そしてあなたのアドバイスはとても合理的です。 – kardanov

+0

解決策を見つけましたか?私はここで同じ振る舞いをしており、これまでこれを修正することはできませんでした。 –

2

追加設定falseprogrammaticallyまたは設定で試してください。私は上記の提案として、あなたのLoggerクラスは静的にする場合のlog4j.xml

<logger name="com.stackoverflow.answers.gnat" additivity="false"> 
    <!-- note additivity value set above --> 
    <level value="INFO"/> 
    <appender-ref ref="knowledge"/> 
    <appender-ref ref="reputation"/> 
</logger> 
+0

答えを@gnatてくれてありがとうございます: 'log4j:WARN loggerのアペンダーが見つかりませんでした。 log4j:WARN log4jシステムを正しく初期化してください'全く初期化されていないようです。 – kardanov

+0

_WARNアペンダーがありません..._表示されます。おなじみの音。私はlog4jのドキュメントを嫌うと書いていたのですか?mavenのドキュメントだけがそれよりも悪いようですが)私は何らかの属性をあまりにも早い時期に設定するといつもそう感じました。可能であれば、加算性を設定しようとすることを検討してください。私の回答のBtw 'xml'の例がコードベースからコピーされています。私は今作業しています(私はちょうど会社固有の名前と参考文献を難読化しています)、それは後半の年など何でもうまく動作することが証明されています – gnat

1

でそれを設定し、あなたが設定していることを確実にトリックをした私に

Logger.getLogger(MyClass.class).setAdditivity(false); 

、 log4jは、JVMレベルの-Dシステム・プロパティーまたはアプリケーションの構成のいずれかを介して問題を起こすべきではありません。クラスロード時またはインスタンス作成時に構文解析を呼び出すことは、不要なオーバーヘッドです。

log4jは、サーバの初期化時であっても、アプリケーションのデプロイ時であれ、一度だけ設定を初期化する必要があります。

あなたのプロジェクトはウェブアプリケーションですか?

また、あなたはここでWebLogic Serverのログ構成にフックについての詳細を調べることができます。http://download.oracle.com/docs/cd/E12840_01/wls/docs103/logging/logging_services.html

お役に立てば幸いです。

+0

@kevinpowe – kardanov

+0

ありがとう、 @ kardanov - 答えが役に立つと分かった場合は、あなたが答えに投票することができれば素晴らしいだろう。希望の伐採は今あなたを良く扱っています。 – kevinpowe

0

問題はBasicConfurator.configure()メソッドにあります。 私はJavaプロジェクトで全く同じ問題を抱えていましたが、WebLogicを使用していません。

BasicConfigurator.configure()メソッドをbeforeTest()からbeforeClass()に移動しましたが、突然問題が解決しました。

@BeforeClass 
public static void beforeClass() { 
    BasicConfigurator.configure(); 
    GeoLogger.setLogLevel(Level.INFO); 
} 

@Before 
public void beforeTest() { 
    //BasicConfigurator.configure(); 
} 

希望が解決策につながるのに役立ちます。

関連する問題