1

私は次のコードを持っています:

private static final Log LOGGER = LogFactory.getLog(MyClass.class);
if (LOGGER.isErrorEnabled()) {
    LOGGER.error("ID_1: Log Message: " + parameter));
}

WARNそして、重大度をまたはに設定したいFATAL

実行時にlog4j.propertiesを更新できる場合、このメッセージの重大度をどのように変更しますか?を使用log4j.logger.com.foo=WARNすると、パッケージ全体の重大度のみが変更されます。

より具体的にする方法はありますか?実行時に単一のロギングステートメントのロギングレベルを変更できますか?

4

2 に答える 2

3

簡単に言えば、いいえ、できません。

やりたいことを行うには、レベルを引数として取る Logger メソッドを呼び出すようにコードを変更し、ガードを置き換える必要があります。例えば

if (logger.isEnabledFor(level)) {
    logger.log(level, "ID_1: Log Message: " + parameter, null);
}

levelそして、その変数に正しい値を取得するという問題があるため、これが役立つとは思いません。

より良い代替手段は、一意の名前でロガーを作成し、その特定のステートメントでのみ使用することです。次に、他のステートメントとは無関係に、そのステートメントのロギングを (ロギング構成を介して) 制御できます。

または、より現実的には、クラス名またはパッケージ名を使用してロガーに名前を付けます。これにより、非常に多くの Logger インスタンスを作成することなく、単一のグローバル ロガーよりも粒度が高くなります。

于 2011-06-08T10:07:12.713 に答える
0

LogLevelをパラメーターとして受け取るLog4jおよびlog-methodsを使用する場合は、LogLevelを指定できます。

Logger l = Logger.getLogger(this.getClass());
l.log(Level.WARN, message);
l.log(Level.ERROR, message);
l.log(Level.ERROR, message, throwable);
于 2011-06-08T10:10:04.400 に答える