You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:02:30