ログファイルを出力する簡単なテストプログラムです。(log4jは使いません。)
Logger.java
ログ出力部品として呼び出されるクラス例です。
package com.itbibo.example.logger;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.nio.charset.Charset;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
public class Logger {
/** 日付フォーマット **/
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS");
/** ログファイルのライター **/
private static PrintWriter logW = null;
/** ログファイル初期化フラグ **/
private static boolean logInit = false;
/**
* ログファイル初期化(上書き)
* @param logFilePath ログファイルパス
* @param charset 文字集合名
* @return
*/
public static int initFile(String logFilePath, Charset charset) {
return init(logFilePath,charset,false);
}
/**
* ログファイル初期化(追記)
* @param logFilePath ログファイルパス
* @param charset 文字集合名
* @return
*/
public static int initFileAppend(String logFilePath, Charset charset) {
return init(logFilePath,charset,true);
}
/**
* ログ出力初期化
* @param logFilePath
* @param charset 文字集合名
* @param append (true:追記、false:上書き)
* @see https://docs.oracle.com/javase/jp/11/docs/api/java.base/java/nio/charset/Charset.html
* https://docs.oracle.com/javase/jp/11/intl/supported-encodings.html
* @return
*/
private static int init(String logFilePath, Charset charset, boolean append) {
if (logInit) {
return 1;
}
// PrintWriterクラスのオブジェクトを生成する
try {
logW = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(logFilePath), charset)), append);
} catch (FileNotFoundException e) {
e.printStackTrace();
return 1;
}
logInit = true;
return 0;
}
/** INFOログ **/
public static void info(String msg) { logOutput(" INFO ", msg); }
/** WARNログ **/
public static void warn(String msg) { logOutput(" WARN ", msg); }
/** ERRORログ **/
public static void error(String msg) { logOutput(" ERROR ", msg); }
/** ERRORログ(例外有) **/
public static void error(String msg, Exception e) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
logOutput(" ERROR ", msg.concat(" ").concat(sw.toString()));
}
/** FATALログ(例外有) **/
public static void fatal(String msg, Exception e) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
logOutput(" FATAL ", msg.concat(" ").concat(sw.toString()));
}
/**
* ログ出力
* @param logCategory ログカテゴリ
* @param msg ログメッセージ
*/
private static void logOutput(String logCategory, String msg) {
if (!logInit) {
return;
}
StringBuilder sb = new StringBuilder();
sb.append(Thread.currentThread().getStackTrace()[3].getClassName());
sb.append(".");
sb.append(Thread.currentThread().getStackTrace()[3].getMethodName());
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
logW.println(sdf.format(timestamp) + logCategory + sb.toString() + " " + msg);
logW.flush();
}
/**
* ログファイルを閉じる
*/
public static void close() {
if (logW != null) {
logW.close();
}
logInit = false;
}
}
LoggerTest.java
ログ出力部品を呼び出すクラス例です。
package com.itbibo.example.logger;
import java.nio.charset.Charset;
public class LoggerTest {
public static void main(String[] args) {
String logFilePathShift_JIS="C:\\tmp\\LoggerTest-Shift_JIS.log";
Logger.initFile(logFilePathShift_JIS, Charset.forName("Shift_JIS"));
Logger.info("Logger info テスト");
Logger.warn("Logger warnning テスト");
Logger.error("Logger error テスト");
Logger.close();
String logFilePathUTF_8="C:\\tmp\\LoggerTest-UTF-8.log";
Logger.initFile(logFilePathUTF_8, Charset.forName("UTF-8"));
Logger.info("Logger info テスト");
Logger.warn("Logger warnning テスト");
Logger.error("Logger error テスト");
Logger.close();
}
}