0

コーディングを始めましょう:

@Startup 
@Singleton
import org.apache.log4j.Logger;
public class MyClass{

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

    @PostConstruct
    private void invoke() {
        LOG.info("INFO");
        LOG.warn("WARN");
        LOG.error("ERROR");
        LOG.fatal("FATAL");
        LOG.debug("DEBUG");
        LOG.trace("TRACE");
        }
}

私が変更した場合:

     <root-logger> <level name="INFO"/>...</root-logger> to   "DEBUG" instead of "INFO"

デバッグコンソールがあります。すべて正常に動作します。

今、私は何かを変えたいと思っています。

通常、ルートロガーを「INFO」にしたい。ただし、XYZ パッケージは「DEBUG」になります。

そのようなものですが、機能しません:

<logger category="XXX.YYY.ZZZ" use-parent-handlers="false">
            <level name="DEBUG"/>
            </logger>
            <root-logger>
                <level name="INFO"/>
                <handlers>
                    <handler name="CONSOLE"/>
                    <handler name="FILE"/>
                </handlers>
            </root-logger>

言い換えれば。XXX.YYY.ZZZ パッケージのみをデバッグしたい。別のパッケージではありません (別のパッケージの場合は「INFO」)。いくつかのフィルターまたは例外が必要な場合があります。

log4j の階層順序は次のとおりであるため、この XMLは機能しません。

OFF       <------ PERMITED
FATAL     <------ PERMITED
ERROR     <------ PERMITED
WARN      <------ PERMITED
INFO      <-----  COSTUME LOGGING PERMITTED UP TO INFO (if root-logger is "INFO)
DEBUG
TRACE
ALL

root-logger が "INFO" の場合、現在のパッケージへのコスチューム ロギングを作成する権限のみがあり、階層は UP TO INFOです

しかし、私はいくつかの例外またはそのようなものが必要です。XML 構成ファイルやプロパティ ファイルは必要ありません。standlone.xml を変更するだけです。

4

1 に答える 1

0

を に設定しuse-parent-handlersfalseいますが、ロガーにハンドラーがインストールされていません。trueロガーの値を変更するか、ハンドラーを追加する必要があります。

を false に設定するuse-parent-handlersと、特定のロガーにアタッチされたハンドラーのみが使用されます。ハンドラーがアタッチされていないため、出力をログに記録するハンドラーはありません。

あなたの例では、クラスの単純な名前を使用しています。つまり、カテゴリはMyClassパッケージ名ではありません。

次のようなものを試してください:

<logger category="MyClass">
    <level name="DEBUG"/>
</logger>
于 2013-04-16T00:30:50.073 に答える