log4jを適切に初期化する方法は?


280

アプリケーションにlog4jを追加した後、アプリケーションを実行するたびに次の出力が得られます。

log4j:WARNロガー(slideselector.facedata.FaceDataParser)のアペンダーが見つかりませんでした。
log4j:WARN log4jシステムを適切に初期化してください。

これは、構成ファイルがないことを意味しているようです。この構成ファイルはどこに配置する必要がありますか。また、適切な開始コンテンツは何ですか。

デスクトップアプリケーションの開発にプレーンJavaを使用しています。したがって、ウェブサーバーなどはありません...


49
私のようなすべてのmavenの人のために:log4j.propertiesをsrc / main / resourcesに入れてください!!
Karussell、


Log4jの短いマニュアルを読むことは非常に役立ちます:logging.apache.org/log4j/1.2/manual.html
Sa'ad

回答:


278

Log4jデフォルトでは、log4j.propertiesまたはlog4j.xmlクラスパス上で呼び出されるファイルを探します。

ここで説明するようにシステムプロパティを設定することで、どのファイルを使用して初期化するかを制御できます。(「デフォルトの初期化手順」セクションを探してください)。

例えば:

java -Dlog4j.configuration=customName ....

引き起こします log4jクラスパス上のcustomNameというファイルを探すこと。

問題が発生した場合は、log4j.debugをオンにすると便利です。

-Dlog4j.debug

それはそれ自身を初期化するためにどのファイルを使用したか、どのロガー/アペンダーがどのように設定されたか、およびその方法などに関する多くの役立つ情報をSystem.outに出力します。

設定ファイルは、Javaプロパティファイルまたはxmlファイルです。以下は、log4j introドキュメントページから取得しプロパティファイル形式のサンプルです。

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

43
したがって、クラスパス上にないファイルから構成ファイルをロードするには、次のようにする必要があります。-Dlog4j.configuration = file:/ c:/my/folder/log4j.propertiesこれは実際にはURLです。
bbcooper

15
誰かが役に立つかもしれない小さなヒント:コードで対応するプロパティを有効にすることでlog4jデバッガーをオンにすることもできます-System.setProperty( "log4j.debug"、 "");
XXL 2013年

どこに置くのjava -Dlog4j.configuration=customName?私はProject / Preferences / Run / Debug Settingsを試し、いくつかの構成を選択し、Edit、Argumentsタブ、VM引数をクリックしました。customNameには.xml拡張子が含まれていますか?
Noumenon

2
多くのバリエーションを試した後、これはうまくいきました:-Dlog4j.configuration = file:/// C:/mydir/subdir/log4j.properties上記の例:-Dlog4j.configuration = file:/ c:/my/folder/log4j.properties失敗した。
user1062589 2016

1
マニュアルが-Dlog4j.debugあなたの設定をデバッグするのに役立つより多くを強調してくれることを本当に望みます。
Sridhar Sarnobat

239

log4jを適切に設定することは「実際の」プロジェクトに最適ですが、新しいライブラリをテストしているだけの場合など、簡単で汚いソリューションが必要になる場合があります。

もしそうなら、静的メソッドの呼び出し

org.apache.log4j.BasicConfigurator.configure();

コンソールへの基本的なログを設定し、エラーメッセージは表示されなくなります。


こんにちはa3。14_Infinityどこで使用すればよいですか?理解できません。私もこの問題についてより多くの回答を紹介しました。私を助けてください
Ravi Potnuru 2017

5
これはデフォルトではデバッグレベルのロギングになり、望ましくない場合があることに注意してください。あなたはそうのようにこれを変更することができます:Logger.getRootLogger().setLevel(Level.INFO);
forresthopkinsa

警告が消えただけでなく、コンソールウィンドウに便利なデバッグ情報が出力されました
Baked Inhalf

2
とても皮肉なことです。生産状態で使用します
aswzen '27 / 03/18

25

すべてを取り除くだけの場合(例:テスト中)

org.apache.log4j.BasicConfigurator.configure(new NullAppender());

20

あたりとしてはApache Log4jのFAQページ

「ロガーのアペンダーが見つかりません」および「log4jを正しく設定してください」という警告が表示されるのはなぜですか?

これは、ときに、デフォルトの設定発生していないファイルをlog4j.propertiesしてlog4j.xml見つけることができないと、アプリケーションを実行する明示的な設定。デフォルトの構成ファイルを見つけるためにlog4j使用Thread.getContextClassLoader().getResource()し、ファイルシステムを直接チェックしません。log4j.propertiesを配置する適切な場所を知るかlog4j.xml、使用中のクラスローダーの検索戦略を理解する必要があります。log4j一部の環境ではコンソールまたはファイルシステムへの出力が禁止されている場合があるため、はデフォルト設定を提供しません。

基本的に、ロガーのアペンダーが見つからないという警告は、使用していることを意味しますlog4jロギングシステムが、アペンダー(FileAppender、ConsoleAppender、SocketAppender、SyslogAppenderなど)を構成ファイルに追加していないか、構成ファイルが行方不明。

log4jを構成するには、プロパティファイルを使用する(log4j.properties)、XMLファイルを使用する、Javaコードを使用する(rootLogger.addAppender(new NullAppender());)の3つの方法があります。

log4j.properties

プロパティファイルが存在する場合(Solrのインストール時など)、このファイルをクラスパス内に配置する必要がありますディレクトリ。

クラスパス

クラスパス値を決定する方法をLinuxでいくつかのコマンドを次に示します。

$ echo $CLASSPATH
$ ps wuax | grep -i classpath
$ grep -Ri classpath /etc/tomcat? /var/lib/tomcat?/conf /usr/share/tomcat?

またはJavaから: System.getProperty("java.class.path")

Log4j XML

以下は、XML形式のlog4jの基本的なXML構成ファイルです。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
  <appender name="console" class="org.apache.log4j.ConsoleAppender"> 
    <param name="Target" value="System.out"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/> 
    </layout> 
  </appender> 

  <root> 
    <priority value ="debug" /> 
    <appender-ref ref="console" /> 
  </root>

</log4j:configuration>

トムキャット

Tomcatを使用している場合は、次の場所に配置できますlog4j.properties/usr/share/tomcat?/lib/または/var/lib/tomcat?/webapps/*/WEB-INF/lib/フォルダー。

Solr

参考までに、Solrのデフォルトlog4j.propertiesファイルは次のようになります。

#  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

log4jがJ2EEまたはWARアプリケーションでプロパティファイルを見つけられないのはなぜですか?

短い答え:log4jクラスとプロパティファイルは、同じクラスローダーのスコープ内にありません。

Log4jの唯一のデフォルトの使用Class.forName()クラスをロードするためのメカニズムを。リソースも同様に処理されます。詳細については、ドキュメントを参照してjava.lang.ClassLoaderください。

したがって、問題が発生した場合は、自分でクラスまたはリソースをロードしてみてください。見つからない場合は、log4jも検出されません。;)


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



11

ルートアペンダーがあるlog4j.propertiesまたはlog4j.xmlをオンラインで見つけて、クラスパスに配置します。

### 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.SimpleLayout
log4j.rootLogger=debug, stdout

コンソールにログインします。後で調査できるように、ファイルにログを記録することをお勧めします。

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.maxFileSize=100KB
log4j.appender.file.maxBackupIndex=5
log4j.appender.file.File=test.log
log4j.appender.file.threshold=debug
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.rootLogger=debug,file

ただし、詳細なロギングアプリケーションの場合、特にデバッグの場合は、通常100KBを1MBまたは10MBに増やす必要があります。

個人的には、複数のロガーをセットアップし、ルートロガーをデバッグではなく警告またはエラーレベルに設定しました。


9

プロパティファイルをクラスパスに置かずにそれを行う別の方法は、Javaコードから直接プロパティを設定することです。これがサンプルコードです。

public class Log4JSample {

public static void main(String[] args) {
    Properties properties=new Properties();
    properties.setProperty("log4j.rootLogger","TRACE,stdout,MyFile");
    properties.setProperty("log4j.rootCategory","TRACE");

    properties.setProperty("log4j.appender.stdout",     "org.apache.log4j.ConsoleAppender");
    properties.setProperty("log4j.appender.stdout.layout",  "org.apache.log4j.PatternLayout");
    properties.setProperty("log4j.appender.stdout.layout.ConversionPattern","%d{yyyy/MM/dd HH:mm:ss.SSS} [%5p] %t (%F) - %m%n");

    properties.setProperty("log4j.appender.MyFile", "org.apache.log4j.RollingFileAppender");
    properties.setProperty("log4j.appender.MyFile.File", "my_example.log");
    properties.setProperty("log4j.appender.MyFile.MaxFileSize", "100KB");
    properties.setProperty("log4j.appender.MyFile.MaxBackupIndex", "1");
    properties.setProperty("log4j.appender.MyFile.layout",  "org.apache.log4j.PatternLayout");
    properties.setProperty("log4j.appender.MyFile.layout.ConversionPattern","%d{yyyy/MM/dd HH:mm:ss.SSS} [%5p] %t (%F) - %m%n");

    PropertyConfigurator.configure(properties);

    Logger logger = Logger.getLogger("MyFile");

    logger.fatal("This is a FATAL message.");
    logger.error("This is an ERROR message.");
    logger.warn("This is a WARN message.");
    logger.info("This is an INFO message.");
    logger.debug("This is a DEBUG message.");
    logger.trace("This is a TRACE message.");
}

}


6

ログレベルは、setLevel()を使用して設定できます。

レベルは、プログラムに表示させたい情報の種類を簡単に設定するのに役立ちます。

例えば:

Logger.getRootLogger().setLevel(Level.WARN); //will not show debug messages

可能なレベルのセットは次のとおりです。

痕跡、

デバッグ、

情報、

警告、

エラーと

致命的

Logging Servicesのマニュアルによると


6
import org.apache.log4j.BasicConfigurator;

このメソッドを呼び出す

BasicConfigurator.configure();

具体的には、これはに書き込みますSystem.out。引数なしのconfigureメソッドのjavadocは言う:Add a ConsoleAppender that uses PatternLayout using the PatternLayout#TTCC_CONVERSION_PATTERN and prints to System.out to the root category.
スニル

3

を有効-Dlog4j.debugにするには、[ システム]、[システムの詳細設定]、[環境変数]に移動し、システム変数_JAVA_OPTIONSをに設定し-Dlog4j.debugます。


1

何を開発していますか?Apache Tomcatを使用していますか?

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyyMMdd HH:mm:ss.SSS} [[%5p] %c{1} [%t]] %m%n

私のJavaアプリには、このようなプロパティがあります。


1

私のlog4jは以下のプロパティファイルで修正されました:

## 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.SimpleLayout
log4j.rootLogger=debug, stdout
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.maxFileSize=100KB
log4j.appender.file.maxBackupIndex=5
log4j.appender.file.File=./logs/test.log
log4j.appender.file.threshold=debug
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.rootLogger=debug,file

こんにちは、コンソールのデバッグとファイルのエラーの構成を追加するにはどうすればよいですか?
JhonArias

1

私は、ファイルの作成したlog4j.propertiesをして、リソースの隣にフォルダをhibernate.cfg.xmlのファイルと下のテキストでそれを満たしました:

log4j.rootLogger=INFO, CONSOLE

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c{1}:%L] %m%n

今、私は警告とエラーを取り除きました


1

単に、src / main / assemblyフォルダーの下に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{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

1

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

まず、このメソッドをメインメソッドに追加するだけです。

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");

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


1

log4j:configurationノードのデバッグ属性をtrueに設定してみてください。

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true">

構成ファイルが読み取られ、log4j環境の構成に使用されると、情報が出力されます。問題を解決するための詳細が表示される場合があります。


誰か知っている?同じオプションは、実行時の起動時に-Dlog4j.debug = trueの設定にフォールバックすることなく、プロパティ構成からも使用できますか?
JFK

1

Logging API - Java Logging APIは、エンドユーザー、システム管理者、フィールドサービスエンジニア、およびソフトウェア開発チームによる分析に適したログレポートを作成することにより、顧客サイトでのソフトウェアサービスとメンテナンスを容易にします。Logging APIは、セキュリティの失敗、構成エラー、パフォーマンスのボトルネック、アプリケーションやプラットフォームのバグなどの情報を収集します。コアパッケージには、プレーンテキストまたはXML形式のログレコードをメモリ、出力ストリーム、コンソール、ファイル、およびソケットに配信するためのサポートが含まれています。さらに、ロギングAPIは、ホストオペレーティングシステムにすでに存在するロギングサービスと対話できます。

パッケージjava.util.logging «Javaプラットフォームのコアロギング機能のクラスとインターフェースを提供します。


Log4j 1.x «log4jは、人気のあるJavaベースのロギングユーティリティです。Log4jは、多くの作者の研究に基づいたオープンソースプロジェクトです。開発者は、Appenders [コンソール、ファイル、DB、電子メール]を使用して、さまざまな場所に出力されるログステートメントを制御できます。外部構成ファイルを使用して、実行時に完全に構​​成可能です。

Log4jには3つの主要コンポーネントがあります。

  • ロガー -[オフ、致命的、エラー、警告、情報、デバッグ、トレース]
  • アペンダー

    • Apache Commons Logging: ConsoleAppender、FileAppender、RollingFileAppender、DailyRollingFileAppender、JDBCAppender- DriverSocketAppender

    • MongoDBのためのLog4jアペンダ: MongoDbAppender -Driver

  • レイアウト-[PatternLayout、EnhancedPatternLayout]

構成ファイルは、XMLまたはJavaプロパティ(key = value)形式で書き込むことができます。

  1. log4j_External.properties«Javaプロパティ(key = value)形式

開始 " $ { "と終了 " } "の間の文字列はキーとして解釈されます。置換された変数の値は、システムプロパティとして、または構成ファイル自体で定義できます。アペンダー固有のオプションを設定します。«log4j.appender.appenderName.option = value、名前付きアペンダーごとに、そのレイアウトを構成できます。

log4j.rootLogger=INFO, FILE, FILE_PER_SIZE, FILE_PER_DAY, CONSOLE, MySql

#log.path=./
log.path=E:/Logs

# https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html
# {%-5p - [WARN ,INFO ,ERROR], %5p 0- [ WARN, INFO,ERROR]}
log.patternLayout=org.apache.log4j.PatternLayout
log.pattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n

# System.out | System.err
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target=System.err
log4j.appender.CONSOLE.layout=${log.patternLayout}
log4j.appender.CONSOLE.layout.ConversionPattern=${log.pattern}

# File Appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=${log.path}/logFile.log
#log4j:ERROR setFile(null,false) call failed. - Defaults setFile(null,true)
#log4j.appender.FILE.Append = false
log4j.appender.FILE.layout=${log.patternLayout}
log4j.appender.FILE.layout.ConversionPattern=${log.pattern}

# BackUP files for every Day.
log4j.appender.FILE_PER_DAY=org.apache.log4j.DailyRollingFileAppender
# [[ Current File ] - logRollingDayFile.log ], { [BackUPs] logRollingDayFile.log_2017-12-10, ... }
log4j.appender.FILE_PER_DAY.File=${log.path}/logRollingDayFile.log
log4j.appender.FILE_PER_DAY.DatePattern='_'yyyy-MM-dd
log4j.appender.FILE_PER_DAY.layout=${log.patternLayout}
log4j.appender.FILE_PER_DAY.layout.ConversionPattern=${log.pattern}

# BackUP files for size rotation with log cleanup.
log4j.appender.FILE_PER_SIZE=org.apache.log4j.RollingFileAppender
# [[ Current File ] - logRollingFile.log ], { [BackUPs] logRollingFile.log.1, logRollingFile.log.2}
log4j.appender.FILE_PER_SIZE.File=${log.path}/logRollingFile.log
log4j.appender.FILE_PER_SIZE.MaxFileSize=100KB
log4j.appender.FILE_PER_SIZE.MaxBackupIndex=2
log4j.appender.FILE_PER_SIZE.layout=${log.patternLayout}
log4j.appender.FILE_PER_SIZE.layout.ConversionPattern=${log.pattern}

# MySql Database - JDBCAppender
log4j.appender.MySql=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.MySql.driver=com.mysql.jdbc.Driver
log4j.appender.MySql.URL=jdbc:mysql://localhost:3306/automationlab
log4j.appender.MySql.user=root
log4j.appender.MySql.password=
log4j.appender.MySql.layout=org.apache.log4j.EnhancedPatternLayout
log4j.appender.MySql.layout.ConversionPattern=INSERT INTO `logdata` VALUES ('%p', '%d{yyyy-MM-dd HH:mm:ss}', '%C', '%M', '%L', '%m');
#log4j.appender.MySql.sql=INSERT INTO `logdata` VALUES ('%p', '%d{yyyy-MM-dd HH:mm:ss}', '%C', '%M', '%L', '%m');

# Direct log events[Messages] to MongoDB Collection - MongoDbAppender
log.mongoDB.hostname=loalhost
log.mongoDB.userName=Yash777
log.mongoDB.password=Yash@123
log.mongoDB.DB=MyLogDB
log.mongoDB.Collection=Logs

log4j.appender.MongoDB=org.log4mongo.MongoDbAppender
log4j.appender.MongoDB.hostname=${log.mongoDB.hostname}
log4j.appender.MongoDB.userName=${log.mongoDB.userName}
log4j.appender.MongoDB.password=${log.mongoDB.password}
log4j.appender.MongoDB.port=27017
log4j.appender.MongoDB.databaseName=${log.mongoDB.DB}
log4j.appender.MongoDB.collectionName=${log.mongoDB.Collection}
log4j.appender.MongoDB.writeConcern=FSYNCED

テーブルのMySQLテーブル構造 logdata

CREATE TABLE IF NOT EXISTS `logdata` (
  `Logger_Level` varchar(5) COLLATE utf8_unicode_ci NOT NULL,
  `DataTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `ClassName` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
  `MethodName` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `LineNumber` int(10) NOT NULL,
  `Message` text COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
  1. log4j_External.xml«XML log4j:構成とパブリックDTDファイル
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE log4j:configuration PUBLIC
  "-//APACHE//DTD LOG4J 1.2//EN" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration debug="false">

    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
        <param name="target" value="System.out" />
        <param name="threshold" value="debug" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" />
        </layout>
    </appender>

    <appender name="FILE" class="org.apache.log4j.FileAppender">
        <param name="file" value="E:/Logs/logFile.log" />
        <param name="append" value="false" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" />
        </layout>
    </appender>

    <appender name="FILE_PER_SIZE" class="org.apache.log4j.RollingFileAppender">
        <param name="file" value="E:/Logs/logRollingFile.log" />
        <param name="immediateFlush" value="true"/>
        <param name="maxFileSize" value="100KB" />
        <param name="maxBackupIndex" value="2"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" />
        </layout>
    </appender>

    <appender name="FILE_PER_DAY" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="file" value="E:/Logs/logRollingDayFile.log" />
        <param name="datePattern" value="'_'yyyy-MM-dd" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n"/>
        </layout>
    </appender>

    <root>
        <priority value="info" />
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
        <appender-ref ref="FILE_PER_SIZE" />
        <appender-ref ref="FILE_PER_DAY" />
    </root>
</log4j:configuration>

  1. JavaプログラムのURLからのLog4j構成:

外部ファイルでカスタム構成を指定するには、使用するクラスでConfiguratorインターフェースを実装する必要があります

デフォルトの構成ファイル「log4j.properties」、「log4j.xml」が使用できない場合

  • 「log4j.properties」の場合、PropertyConfigurator .configure(java.net.URL)メソッドにフィードできます。
  • 「log4j.xml」の場合、DOMConfiguratorが使用されます。
public class LogFiles {
    // Define a static logger variable so that it references the Logger instance named "LogFiles".
    static final Logger log = Logger.getLogger( LogFiles.class );

    @SuppressWarnings("deprecation")
    public static void main(String[] args) {
        System.out.println("CONFIGURATION_FILE « "+LogManager.DEFAULT_CONFIGURATION_FILE);
        System.out.println("DEFAULT_XML_CONFIGURATION_FILE = 'log4j.xml' « Default access modifier");

        String fileName = //"";
                //"log4j_External.xml";
                "log4j_External.properties";
        String configurationFile = System.getProperty("user.dir")+"/src/" + fileName;

        if( fileName.contains(".xml") ) {
            DOMConfigurator.configure( configurationFile );
            log.info("Extension *.xml");
        } else if ( fileName.contains(".properties") ) {
            PropertyConfigurator.configure( configurationFile );
            log.info("Extension *.properties");
        } else {
            DailyRollingFileAppender dailyRollingAppender = new DailyRollingFileAppender();
            dailyRollingAppender.setFile("E:/Logs/logRollingDayFile.log");
            dailyRollingAppender.setDatePattern("'_'yyyy-MM-dd");

            PatternLayout layout = new PatternLayout();
            layout.setConversionPattern( "%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" );
            dailyRollingAppender.setLayout(layout);

            dailyRollingAppender.activateOptions();

            Logger rootLogger = Logger.getRootLogger();
            rootLogger.setLevel(Level.DEBUG);
            rootLogger.addAppender(dailyRollingAppender);

            log.info("Configuring from Java Class.");
        }

        log.info("Console.Message.");
        method2();
        methodException(0);
    }

    static void method2() {
        log.info("method2 - Console.Message.");
    }
    static void methodException(int b) {
        try {
            int a = 10/b;
            System.out.println("Result : "+ a);
            log.info("Result : "+ a);
        } catch (Exception ex) { // ArithmeticException: / by zero
            log.error(String.format("\n\tException occurred: %s", stackTraceToString(ex)));
        }
    }
    public static String stackTraceToString(Exception ex) {
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        ex.printStackTrace(pw);
        return sw.toString();
    }
}

1

私の修正は、「log4j.properties」を「src」フォルダに置くことでした。


0

log4jの上でApache Commons Loggingラッパーを使用している場合は、クラスパスで両方のjarを使用できるようにする必要があります。また、commons-logging.propertiesおよびlog4j.properties/xmlクラスパスで利用可能であるべきです。

また、を使用して、実装クラスとlog4j.properties名前を渡すこともできJAVA_OPTSます-Dorg.apache.commons.logging.Log=<logging implementation class name> -Dlog4j.configuration=<file:location of log4j.properties/xml file>JAVA_OPTSアプリ/ウェブサーバーの場合も同様に設定で行えます。

デプロイメントで変更できるプロパティを外部化するのに役立ちます。


0

これは.yamlを使用する別の方法です

論理構造:

Configuration:
    Properties:
    Appenders:
    Loggers:

サンプル:

Configutation:
    name: Default

    Properties:
        Property:
            name: log-path
            value: "logs"

    Appenders:

        Console:
        name: Console_Appender
        target: SYSTEM_OUT
        PatternLayout:
            pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"

       File:
          name: File_Appender
          fileName: ${log-path}/logfile.log
          PatternLayout:
            pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"

    Loggers:

        Root:
            level: debug
            AppenderRef:
              - ref: Console_Appender

        Logger:
            - name: <package>.<subpackage>.<subsubpackage>.<...>
              level: debug
              AppenderRef:
                 - ref: File_Appender
                 level: error             

参照:LOG4J 2構成:YAMLの使用


0

テストの場合、ログレベルの設定を含む簡単な方法:

org.apache.log4j.BasicConfigurator.configure();
org.apache.log4j.Logger.getRootLogger().setLevel(org.apache.log4j.Level.WARN);

// set to Level.DEBUG for full, or Level.OFF..

0

Mavenソリューション:

上記と同じ問題に遭遇し、Mavenソリューションでは2つの依存関係を使用しました。この構成は、単純なプロジェクトで標準構成のロガーを使用する場合のクイックテストのみを目的としています。さらに情報が必要な場合や、独自のロギングレベルを微調整したい場合は、後で構成ファイルを作成することもできます。

    <properties>
        <slf4jVersion>1.7.28</slf4jVersion>
    </properties>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4jVersion}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-jdk14</artifactId>
            <version>${slf4jVersion}</version>
        </dependency>

0

私はこれをやっただけで、問題は修正されました。

以下のブログをフォロー

https://intellij-support.jetbrains.com/hc/en-us/community/posts/206875685-How-to-fix-log4j-WARN-console-messages-when-running-an-Application-inside-IntelliJ-考え

しかし、ここで彼は以下のように言います

これを修正するには、次のlog4j.resourcesファイルをプロジェクトのmain / resourcesフォルダーに入力します。

log4j.resourcesを作成する代わりに、log4j.propertiesを作成します。IntelliJのリソースを右クリック->新規->リソースバンドル-log4jと名前を付けるだけ


0

log4j.propertiesまたはを追加した後でもIntellij IDEAでこのエラーが発生する場合log4j.xmlリソースのテストフォルダーにファイルを、Intellij IDEAはファイルの存在をまだ認識していません。

そのため、ファイルを追加した後、ファイルを右クリックし、[ log4j.xmlの再コンパイル ]を選択します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.