436

log4jをビルドパスに配置しましたが、アプリケーションを実行すると次のメッセージが表示されます。

log4j:WARN No appenders could be found for logger (dao.hsqlmanager).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

これらの警告はどういう意味ですか?ここのアペンダーは何ですか?

4

32 に答える 32

530

このlog4jガイドの簡単な紹介は少し古いですが、まだ有効です。

このガイドでは、ロガーとアペンダーの使用方法に関する情報を提供します。


作業を開始するには、2 つの簡単な方法があります。

最初の 1 つは、次の行をメイン メソッドに追加することです。

BasicConfigurator.configure();

2 番目の方法は、この標準log4j.properties(上記のガイドから取得) ファイルをクラスパスに追加することです。

# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1

# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender

# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
于 2012-09-21T14:23:16.897 に答える
41

これは単なる警告です。

固定

これは、デフォルトの構成ファイルlog4j.propertieslog4j.xml見つからず、アプリケーションが明示的な構成を実行しない場合に発生します。

これを修正するには、クラスパス上の場所(通常は jar ファイルと同じ) を作成/コピーlog4j.propertiesするだけです。log4j.xml

必要に応じて Java オプションを設定します: -Dlog4j.configuration=file:///path/to/log4j.properties.

log4jを使用Thread.getContextClassLoader().getResource()してデフォルトの構成ファイルを検索し、ファイル システムを直接チェックしません。配置する適切な場所を知るには、使用中のクラス ローダーの検索戦略を理解する必要がありますlog4j.properties。一部の環境ではコンソールまたはファイル システムへの出力が禁止されている可能性があるため、既定の構成は提供されません。log4j.xmllog4j

デバッグ

デバッグには、パラメーターを使用してみて-Dlog4j.debug=trueください。

の構成log4j.properties

のサンプル構成log4j.properties:

# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1

# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender

# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

# Print only messages of level WARN or above in the package com.foo.
log4j.logger.com.foo=WARN

複数のアペンダーを使用する別の構成ファイルを次に示します。

log4j.rootLogger=debug, stdout, R

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log

log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

アパッチソル

Solrを使用している場合は、クラスパス<solr>/example/resources/log4j.properties上の場所にコピーします。

log4j.propertiesSolr からのサンプル構成は次のようになります。

#  Logging level
solr.log=logs/
log4j.rootLogger=INFO, file, CONSOLE

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender

log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x \u2013 %m%n

#- size rotation with log cleanup.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.MaxFileSize=4MB
log4j.appender.file.MaxBackupIndex=9

#- File to log to and log format
log4j.appender.file.File=${solr.log}/solr.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS}; %C; %m\n

log4j.logger.org.apache.zookeeper=WARN
log4j.logger.org.apache.hadoop=WARN

# set to INFO to enable infostream log messages
log4j.logger.org.apache.solr.update.LoggingInfoStream=OFF

以下も参照してください。

于 2015-04-06T20:20:03.040 に答える
22

ここでの回答のほとんどは、ファイルを正しい場所に配置することを示唆していlog4j.propertiesます(mavenプロジェクトの場合、に配置する必要がありますsrc/main/resources)

しかし、私にとって問題は、 mylog4j.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{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
于 2016-08-09T02:13:33.067 に答える
9

先ほど説明したように、2 つのアプローチがあります。

最初の 1 つは、次の行をメイン メソッドに追加することです。

BasicConfigurator.configure();

2 番目の方法は、この標準の log4j.propertiesファイルをクラスパスに追加することです。

2 番目のアプローチを取るときは、ファイルを適切に初期化する必要があります。

Properties props = new Properties();
props.load(new FileInputStream("log4j property file path"));
props.setProperty("log4j.appender.File.File", "Folder where you want to store log files/" + "File Name");

ログファイルを保存するために必要なフォルダーを必ず作成してください。

于 2014-12-22T13:47:34.160 に答える
7

Loggerメッセージをログに記録するには、コードで を使用します。は、特定のターゲットにメッセージを書き込むために にAppender追加されるオブジェクトです。テキストファイルへの書き込み、またはコンソールへの書き込みがありますLogger。詳細については、ロガーとアペンダーのセットアップのコードを表示する必要があります。FileAppenderConsoleAppender

Logger と Appender の相互作用をよりよく理解するには、チュートリアルをお読みください。

于 2012-09-21T14:21:48.843 に答える
4

log4j jar ファイルまたは Java コードが log4j 構成ファイルを探す場所を理解する必要があると思います。

src/main/resources/log4j.propertiesEclipseパスです。コードで絶対パスをハードコードする必要がないように、適切な場所に配置してください。

そのための私の記事とサンプルソリューションを読んで ください https://askyourquestions.info/how-to-see-where-the-log-is-logger-in-slf4j/

于 2016-04-28T14:36:34.897 に答える
1

intellij 12 で maven を使用して実行可能な jar をビルドしようとしたときに、この問題に遭遇しました。Java マニフェスト ファイルにクラス パスが含まれていなかったため、log4j プロパティ ファイルがルート レベルで見つからないことが判明しました。 jar ファイルから実行されました。)

参考までに、次のようなロガーを取得していました。

Logger log = LogManager.getLogger(MyClassIWantedToLogFrom.class);

そして、これを含むpomファイルで動作させることができました:

         <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.2-beta-5</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath> 
                        <mainClass>com.mycompany.mainPackage.mainClass</mainClass>
                    </manifest>
                    <manifestEntries>
                        <Class-Path>.</Class-Path> <!-- need to add current directory to classpath properties files can be found -->
                    </manifestEntries>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
于 2014-07-24T06:49:14.723 に答える
1

プロジェクトが Eclipse で開いていることを確認してから、Eclipse の上部にある [実行] メニューをクリックし、次の項目をクリックします。

  1. 走る

  2. 実行構成

  3. クラスパス (タブ)

  4. ユーザーエントリ

  5. 右側にjarを追加

  6. log4j jarファイルを追加

  7. 申し込み

  8. 走る

エラー メッセージは表示されなくなります。

于 2016-01-11T19:03:55.607 に答える
1

私にとっては、理由は明らかに異なっており、エラー メッセージは誤解を招くものでした。

私のbuild.gradleでこれだけを使用すると、ログの先頭にslf4jが見つからないと不平を言うでしょうが、フォーマットは不十分ですが、それでもログに記録されます。

    compile 'log4j:log4j:1.2.17'

その依存関係を追加すると、議論された「アペンダーが見つかりませんでした」というエラーメッセージが表示されますsrc/main/java/log4j.properties

    compile 'log4j:log4j:1.2.17'
    compile 'org.slf4j:slf4j-log4j12:1.7.25'

最後に、次の依存関係を追加すると(別のプロジェクトからコピーして推測しただけです)、問題が解決しました。

    compile 'log4j:log4j:1.2.17'
    compile 'org.slf4j:slf4j-log4j12:1.7.25'
    compile 'commons-logging:commons-logging:1.2'

理由はわかりませんが、これで動作します。それに関する洞察はありますか?

于 2020-06-17T06:52:55.310 に答える
0

EclipseからJUnitテストをlog4j.properties実行すると、ファイルが.src/test/resources

その理由は、Eclipse (またはm2esrc/test/resourcesコネクタ) が期待される出力フォルダーにコンテンツをコピーしなかったためです。根本的な原因は、 Java ビルド パス-> [ソース] タブ ->ビルド パスのソース フォルダー-> src/target/test-classesの下のプロジェクトのプロパティでした。test/resources、なぜかエントリがありました。その除外エントリを削除しました。Excluded: **

または、手動で にコピーsrc/test/resources/log4j.propertiesすることもできましたtarget/test-classes/log4j.properties

于 2016-08-16T17:37:54.417 に答える
0

このサイトの解決策は私にとってはうまくいきましたhttps://crunchify.com/java-how-to-configure-log4j-logger-property-correctly/。log4j からの警告がまったく表示されなくなりました

これを src/main/resources に置いた log4j.properties ファイルに入れました

# This sets the global logging level and specifies the appenders
log4j.rootLogger=INFO, theConsoleAppender

# settings for the console appender
log4j.appender.theConsoleAppender=org.apache.log4j.ConsoleAppender
log4j.appender.theConsoleAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.theConsoleAppender.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
于 2018-09-18T20:35:46.657 に答える
-4

Java Eclipse で、conf_ref を conf フォルダーにコピーします。

于 2016-07-20T10:53:33.693 に答える