2

非常にシンプルなこのscalaアプリケーションがあります。行うことは、ロガーを初期化し、logger.info("Hello") を実行することだけです。次の設定を持つクラスパスに log4j.properties ファイルがあります

# Root logger option
log4j.rootLogger=INFO, stdout

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

ただし、アプリケーションを実行しようとすると。log4j:WARN No appenders could be found for logger (app.TestApp$) というエラーが表示されます。log4j:WARN log4j システムを適切に初期化してください。

私は何が欠けていますか? ただし、クラスパスに hadoop-core.jar がある場合は、ログが出力されます (その中に log4j もあります)。

4

2 に答える 2

7

log4J 構成ファイルは、クラスパスにあると思っていても、クラスパスにありません。この問題を解決する最も簡単な方法は-Dlog4j.debug、VM パラメーターに追加することです。これにより、Log4J は構成を見つけるために使用しているアルゴリズムをトレースします。

scala -cp {yourclasspath} -Dlog4j.debug {yourscalaentrypoint}

残念ながら、Scalaは標準のJavaシステムプロパティを使用してクラスパスを保存しないため、Scalaプログラムを実行している場合、@ Jensの回答は役に立ちません。Scala プログラムに使用されるクラスパスを出力する必要がある場合は、この手法のようなものを使用する必要があります。

于 2012-06-16T12:54:12.290 に答える
1

プロパティ ファイルがクラスパスに見つからないようです。クラスパス (システム プロパティ java.class.path) を出力して、何が起こっているかを確認します。

于 2012-06-16T08:31:11.697 に答える