Google Flogger日志格式配置及异常日志文件输出配置方法
没问题!要让Flogger把日志输出到文件并自定义格式,核心是搞定它默认依赖的**Java Util Logging (JUL)**后端配置——因为Flogger本身只是个日志API,实际的输出控制全靠后端实现来完成。下面一步步给你说清楚:
1. 配置JUL的日志属性文件
首先在项目的resources目录下创建一个logging.properties文件,用来定义日志的输出规则:
# 指定使用文件输出处理器 handlers=java.util.logging.FileHandler # 全局日志级别(低于该级别的日志会被过滤) .level=INFO # 配置FileHandler的核心参数 # 日志文件路径:%h代表用户主目录,也可以写绝对路径比如D:/logs/app.log java.util.logging.FileHandler.pattern=%h/flogger_app.log # 单个日志文件的最大容量(这里设为10MB) java.util.logging.FileHandler.limit=10485760 # 最多保留的滚动日志文件数量 java.util.logging.FileHandler.count=5 # 日志写入模式:true为追加,false为覆盖 java.util.logging.FileHandler.append=true # 指定日志格式器,先使用默认的SimpleFormatter java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter # 自定义SimpleFormatter的输出格式 # 格式说明:日期+时间+日志级别+类名+日志消息+异常栈 java.util.logging.SimpleFormatter.format=%1$tF %1$tT %4$s [%3$s] %5$s %6$s%n
2. 在代码中加载配置文件
修改你的TestFlogger代码,在main方法开头加载刚才的配置,确保日志规则生效:
package renameform; import com.google.common.flogger.FluentLogger; import java.io.IOException; import java.io.InputStream; import java.util.logging.LogManager; public class TestFlogger { private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static void main(String[] args) { // 加载自定义日志配置 try (InputStream configStream = TestFlogger.class.getClassLoader().getResourceAsStream("logging.properties")) { LogManager.getLogManager().readConfiguration(configStream); } catch (IOException e) { System.err.println("加载日志配置失败: " + e.getMessage()); } try { int a=2/0; }catch(Exception exception) { logger.atInfo().withCause(exception).log("Log message with: %s", 200); } } }
3. 自定义复杂日志格式(可选)
如果默认的SimpleFormatter满足不了需求,你可以自己写一个格式器类:
package renameform; import java.util.logging.Formatter; import java.util.logging.LogRecord; import java.text.SimpleDateFormat; public class CustomFormatter extends Formatter { private final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); @Override public String format(LogRecord record) { StringBuilder sb = new StringBuilder(); // 拼接日期时间 sb.append(dateFormat.format(record.getMillis())).append(" "); // 拼接日志级别(左对齐占7位) sb.append(String.format("%-7s", record.getLevel().getName())).append(" "); // 拼接类名和方法名 sb.append(record.getSourceClassName()).append(".").append(record.getSourceMethodName()).append(" - "); // 拼接日志消息 sb.append(formatMessage(record)).append("\n"); // 拼接异常栈(如果存在) if (record.getThrown() != null) { sb.append("Exception: ").append(record.getThrown().toString()).append("\n"); for (StackTraceElement element : record.getThrown().getStackTrace()) { sb.append("\tat ").append(element).append("\n"); } } return sb.toString(); } }
然后修改logging.properties里的格式器配置:
java.util.logging.FileHandler.formatter=renameform.CustomFormatter
4. 验证效果
运行代码后,你会在指定路径(比如用户主目录下的flogger_app.log)看到类似这样的日志内容:
2024-05-20 16:20:30.456 INFO renameform.TestFlogger.main - Log message with: 200 Exception: java.lang.ArithmeticException: / by zero at renameform.TestFlogger.main(TestFlogger.java:18)
内容的提问来源于stack exchange,提问作者Vishal Lahane
相关产品推荐
相关产品推荐

