Javaのファイルにエラーログまたは例外を書き込む方法はありますか。 Log4jを使用しました。私はそれについてグーグルで調べたが、良い解決策を見つけられなかった。簡単なコードを書きました
catch (Exception e) {
PrintWriter pw = new PrintWriter(new FileOutputStream("Log"));
e.printStackTrace(pw);
}
エラーまたは例外をログに記録する他の方法はありますか? Log4jのサンプル例を提供することはできますか?
最初に log4j Manual を読んで、ローリングログファイルを簡単に構成できます。明示的なファイル操作を行う必要はありません。
#SET LEVEL of ROOT-LOGGER, you will like to have Debug in local, but in prod you may just want WARN and ABOVE. This setting is done here!
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. (basically, format of log)
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
# THIS IS WHERE YOU WILL HAVE ALL THE LOG WRITTEN
log4j.appender.R=org.Apache.log4j.RollingFileAppender
log4j.appender.R.File=/var/log/applogs/example.log
# Maximum size of log file, usually we keep 10MB
log4j.appender.R.MaxFileSize=100KB
# Keep one backup file, usually we keep 10
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.Apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
第二に、例外をキャッチするたびに、このようにします
public class MyClass{
private static Logger logger = Logger.getLogger(MyClass.class);
public ReturnType myMethod(Param p, Param2 p2) {
....
....
try {
..
} catch(MyException e) {
logger.log("Exceptions happen!", e); //this will put all the details in log file configured earlier
}
....
}
....
}
マニュアルを読む価値があります。さらに読む log4jマニュアルを完全に
try {
System.setErr(new PrintStream(new FileOutputStream(System.getProperty("user.home")+"/error.log")));
} catch (FileNotFoundException ex) {
ex.printStackTrace();
}
これで、すべてのエラー出力がこのファイルに書き込まれます
Log4jステートメントにパラメーターとして例外を追加できます。
catch(Exception e)
{
logger.error("Unexpected error", e);
}
OKを実行しているファイルアペンダーがある場合、これは例外の完全なスタックトレースを出力します。
log4j
を使用すると、exceptiosnを非常に簡単にログに記録できます。
try {
...
} catch(Exception e) {
log.error("An exception! Oops!", e);
}
「File Appender」についてこのチュートリアルをご覧ください
Log4jの簡単な紹介 および「構成」セクションを参照してください。
「RollingFileAppender」または「File appender」について検索することもできます。
ロガーを設定して、そのメッセージをアペンダーに送信します。このアペンダーは、メッセージをコンソール(stdin)、ファイル(FileAppender、RollingFileAppender ...)に転送できます...
これを使用してエラーログを実行します。
try{
throw new Exception("bla bla bla...");
} catch( Exception e ){
// log without stack trace
mLogger.error("Your log message");
// log with stack trace
mLogger.error("Your log message", e);
}
Log4j依存関係を使用してデータを記録できます。 このリンクに移動
https://logging.Apache.org/log4j/2.x/manual/configuration.html
Pom dependency ==>
<dependency>
<groupId>org.Apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.11.2</version>
</dependency>
<dependency>
<groupId>org.Apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.2</version>
</dependency>
Properties File eg ==>
status = error
dest = err
name = PropertiesConfig
property.filename = target/rolling/rollingtest.log
filter.threshold.type = ThresholdFilter
filter.threshold.level = debug
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %m%n
appender.console.filter.threshold.type = ThresholdFilter
appender.console.filter.threshold.level = error
appender.rolling.type = RollingFile
appender.rolling.name = RollingFile
appender.rolling.fileName = ${filename}
appender.rolling.filePattern = target/rolling2/test1-%d{MM-dd-yy-HH-mm-ss}-
%i.log.gz
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %d %p %C{1.} [%t] %m%n
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 2
appender.rolling.policies.time.modulate = true
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size=100MB
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.max = 5
logger.rolling.name = com.example.my.app // Change this to your own package
name otherwise will not work
logger.rolling.level = debug
logger.rolling.additivity = false
logger.rolling.appenderRef.rolling.ref = RollingFile
rootLogger.level = info
rootLogger.appenderRef.stdout.ref = STDOUT
Java code ==>
private static final Logger logger =
LogManager.getLogger(MyClass.class.getName());
logger.info("Entering application.");
logger.trace("Entering application.");
logger.debug("Debugg application.");
logger.error("Did it again!");