一个业务日志工具类
想把一些关键信息写到特定的文件里,所以写了一个文件工具类
代码
package utils;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.time.FastDateFormat;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.HashMap;
import java.util.concurrent.locks.ReentrantLock;
@Slf4j
public class FileLogUtils {
private static final String logDir;
private static final HashMap<String, Logger> fileMap;
private static final ReentrantLock lock;
static {
logDir = System.getProperty("user.dir") + "/logs";
fileMap = new HashMap<>();
lock = new ReentrantLock();
}
/**
* 获取文件输出流
*
* @author yehao
*/
public static Logger getLogger(String category) {
lock.lock();
try {
Logger logger = fileMap.get(category);
if (logger == null) {
logger = new Logger();
logger.setCategory(category);
logger.setLogDir(logDir);
logger.setFilePath(logger.getLogDir() + '/' + category + ".log");
File file = new File(logger.getFilePath());
if (!file.exists()) {
if (file.createNewFile()) {
log.info("创建新文件");
}
}
logger.setFile(file);
logger.setPrintWriter(new PrintWriter(new FileOutputStream(file, true), true));
fileMap.put(category, logger);
}
return logger;
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
lock.unlock();
}
}
@Data
public static class Logger {
private String category;
private String logDir;
private String filePath;
private File file;
private PrintWriter printWriter;
public void info(String format, Object... log) {
printWriter.println(String.format("[%s] - %s", FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss").format(new Date()), String.format(format, log)));
printWriter.flush();
}
public void info(String log) {
printWriter.println(String.format("[%s] - %s", FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss").format(new Date()), log));
printWriter.flush();
}
}
public static void main(String[] args) {
Logger logger = FileLogUtils.getLogger("test");
logger.info("test1: %s", "hello");
logger.info("test2");
logger.info("test3");
logger.info("test4");
}
}