1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
| package com.example.demo.util;
import java.io.*; import java.nio.file.Paths; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter;
public class LogUtils {
private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
public static void appendErrorLog(String filePath, String message, Throwable throwable) { File file = getAbsoluteFile(filePath);
if (!file.getParentFile().exists()) { file.getParentFile().mkdirs(); }
synchronized (LogUtils.class) { try (BufferedWriter writer = new BufferedWriter(new FileWriter(file, true))) { writer.write("============================================================"); writer.newLine(); writer.write("时间: " + DATE_FORMAT.format(LocalDateTime.now())); writer.newLine(); writer.write("错误信息: " + message); writer.newLine();
if (throwable != null) { writer.write("异常类型: " + throwable.getClass().getName()); writer.newLine(); writer.write("异常消息: " + throwable.getMessage()); writer.newLine(); writer.write("堆栈信息:"); writer.newLine();
StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); throwable.printStackTrace(pw); writer.write(sw.toString()); }
writer.newLine(); writer.flush(); } catch (IOException e) { System.err.println("写入错误日志失败:" + e.getMessage()); } } }
private static File getAbsoluteFile(String filePath) { File file = new File(filePath); if (!file.isAbsolute()) { String currentDir = System.getProperty("user.dir"); file = new File(currentDir, filePath); } return file; } }
|