一个业务日志工具类
想把一些关键信息写到特定的文件里,所以写了一个文件工具类
代码
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;@Slf4jpublic 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"); }}