自分のアプリケーションにlog4jを追加した後、私は自分のアプリケーションを実行するたびに次のような出力を得ます。
log4j:警告ロガー(slideselector.facedata.FaceDataParser)にアペンダが見つかりませんでした log4j:警告log4jシステムを正しく初期化してください。
これは設定ファイルが見つからないことを意味します。この設定ファイルはどこにあるべきですか?そして良いスタートコンテンツは何ですか?
私はデスクトップアプリケーションを開発するために普通のJavaを使っています。だから、Webサーバーなどはありません...
デフォルトでは、Log4jはクラスパス上でlog4j.propertiesまたはlog4j.xmlというファイルを探します。 here のようにシステムプロパティを設定することで、自分自身を初期化するために使用するファイルを制御できます(「デフォルトの初期化手順」を参照してください)。
例えば:
Java -Dlog4j.configuration=customName ....
Log4jがクラスパス上でcustomNameというファイルを探すようにします。
あなたが問題を抱えているなら、私はそれがlog4j.debugをつけることは有用であると思います:
-Dlog4j.debug
どのファイルが自分自身を初期化するのに使用されたか、どのロガー/アペンダが設定されたか、そしてどのようにしているかなど、たくさんの有用な情報をSystem.outに出力します。
設定ファイルは、Javaプロパティファイルまたはxmlファイルです。これは、 log4jイントロのドキュメントページ から取得したプロパティファイルのフォーマットの例です。
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
Log4jを適切に設定することは「本物の」プロジェクトには最適ですが、迅速で汚い解決策が必要かもしれません。新しいライブラリをテストするだけの場合は.
もしそうなら静的メソッドへの呼び出し
org.Apache.log4j.BasicConfigurator.configure();
コンソールへの基本的なログ記録を設定し、エラーメッセージは消えます。
あなたがただすべてを取り除けば(例えばあなたがテスト中であれば)
org.Apache.log4j.BasicConfigurator.configure(new NullAppender());
Apache Log4j FAQ page に従って)
「loggerにアペンダが見つかりません」および「log4jを正しく設定してください」という警告が表示されるのはなぜですか?
これは、デフォルトの設定ファイル
log4j.properties
およびlog4j.xml
が見つからず、アプリケーションが明示的な設定を行わない場合に発生します。log4j
は、デフォルトの設定ファイルを見つけるためにThread.getContextClassLoader().getResource()
を使用し、ファイルシステムを直接チェックしません。 log4j.propertiesまたはlog4j.xml
を配置する適切な場所を知るには、使用中のクラスローダーの検索方法を理解する必要があります。環境によっては、コンソールまたはファイルシステムへの出力が禁止される可能性があるため、log4j
はデフォルト設定を提供しません。
基本的に警告ロガーにアペンダは見つかりませんでしたは log4j
loggingシステムを使用していることを意味しますが、アペンダは追加されていません(FileAppender、ConsoleAppender、SocketAppender、SyslogAppenderなど)設定ファイルへの。)または設定ファイルが見つかりません。
Log4jを設定する方法は3つあります。プロパティファイル(log4j.properties
)、 XMLファイル )、およびJavaコード(rootLogger.addAppender(new NullAppender());
)です。
log4j.properties
プロパティファイルが存在する場合(たとえばSolrのインストール時)、このファイルを classpath ディレクトリ)内に配置する必要があります。
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")
。
以下は、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のデフォルトの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になりません。 ;)
また見なさい:
次のコマンドを使用して、Javaアプリケーション内からlog4j.propertiesの場所を設定できます。
org.Apache.log4j.PropertyConfigurator.configure(file/location/log4j.properties)
より多くの情報はここで利用可能です: https://logging.Apache.org/log4j/1.2/manual.html
Root appenderを持つ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に増やす必要があります。
個人的には複数のロガーを設定し、デバッグの代わりにルートロガーを警告またはエラーレベルに設定します。
プロパティファイルをクラスパスに配置せずにこれを実行するもう1つの方法は、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.");
}
}
setLevel() を使用してログレベルを設定できます。
レベルは、プログラムに表示させたい情報の種類を簡単に設定するのに役立ちます。
例えば:
Logger.getRootLogger().setLevel(Level.WARN); //will not show debug messages
可能なレベルのセットは以下のとおりです。
トレース、
デバッグ、
情報、
警告、
エラーと
致命的
import org.Apache.log4j.BasicConfigurator;
このメソッドを呼び出す
BasicConfigurator.configure();
-Dlog4j.debug
を有効にするには、 システム、システムの詳細設定、環境変数 に移動し、システム変数_Java_OPTIONS
を-Dlog4j.debug
に設定します。
単に、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
hibernate.cfg.xml ファイルの隣のリソースフォルダーに log4j.properties というファイルを作成し、以下のテキストを入力しました。
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
今、私は警告とエラーを取り除きました
私にとっての修正は、「log4j.properties」を「src」フォルダーに入れることでした。
先に説明したように、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");
ログファイルを保存するために必要なフォルダを必ず作成してください。
Log4j:configurationノードのdebug attributをtrueに設定してみてください。
<log4j:configuration xmlns:log4j="http://jakarta.Apache.org/log4j/" debug="true">
設定ファイルが読み込まれ、log4j環境を設定するために使用されるときに情報を出力します。あなたはあなたの問題を解決するためにより多くの詳細を得られるかもしれません。
Logging API - Java Logging APIは、エンドユーザー、システム管理者、フィールドサービスエンジニア、およびソフトウェア開発チームによる分析に適したログレポートを作成することによって、顧客サイトでのソフトウェア保守と保守を容易にします。 Logging APIは、セキュリティ障害、構成エラー、パフォーマンスのボトルネック、アプリケーションやプラットフォームのバグなどの情報を収集します。コアパッケージには、プレーンテキストまたはXML形式のログレコードをメモリ、出力ストリーム、コンソール、ファイル、およびソケットに配信するためのサポートが含まれています。さらに、ロギングAPIは、ホストオペレーティングシステムにすでに存在するロギングサービスと対話することができます。
パッケージ Java.util.logging «Javaプラットフォームのコアロギング機能のクラスとインタフェースを提供します。
Log4j 1.x «log4jは、人気のあるJavaベースのロギングユーティリティです。 Log4jは多くの作者の仕事に基づいたオープンソースプロジェクトです。開発者はAppenders [console、files、DB and email]を使用して、どのログステートメントをさまざまな場所に出力するかを制御できます。外部設定ファイルを使って実行時に完全に設定可能です。
Log4jには3つの主要コンポーネントがあります。
- ロガー - [OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE]
アペンダ
Apache Commons Logging: ConsoleAppender、FileAppender、RollingFileAppender、DailyRollingFileAppender、JDBCAppender -
Driver
、 SocketAppenderMongoDB用Log4Jアペンダー: MongoDbAppender -
Driver
- レイアウト - [PatternLayout、EnhancedPatternLayout]
設定ファイルはXMLまたはJavaプロパティ(キー=値)形式で記述できます。
- log4j_External.properties«Javaプロパティ(キー=値)の形式
開始 " $ { "と終了 " } "の間の文字列はキーとして解釈されます。置換変数の値は、システムプロパティとして、または設定ファイル自体に定義できます。アペンダ固有のオプションを設定します。 «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
テーブルlogdata
のMySQLテーブル構造
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;
- 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>
- 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();
}
}
あなたは何で発展していますか? 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アプリでこのようなプロパティを持っています。
私の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
これは.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の上でApache commonsロギングラッパーを使用している場合は、両方の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>
として渡すこともできます。アプリ/ Webサーバーの場合はJava_OPTS
を設定しても同じことができます。
展開時に変更可能なプロパティを外部化するのに役立ちます。
テストのために、ログレベルを設定することを含む簡単な方法:
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..