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

Java中如何在方法调用前后打印日志并减少重复代码?

最佳方案:封装通用计时日志工具方法

针对这种重复的“日志-执行-日志”模式,最简洁且易维护的方案是封装一个通用的计时日志工具方法,把日志逻辑和任务执行解耦,彻底消除重复代码。

实现步骤

  1. 编写工具类统一处理日志与任务执行:
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.function.Consumer;
import com.microsoft.playwright.Page;

public class LogTiming {
    private static final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    // 适配接收Page参数的任务方法
    public static void withTiming(String taskName, Page page, Consumer<Page> task) {
        LocalDateTime startTime = LocalDateTime.now();
        System.out.printf("[+] - %s (start) %s%n", taskName, dtf.format(startTime));
        try {
            task.accept(page);
        } finally {
            LocalDateTime endTime = LocalDateTime.now();
            System.out.printf("[+] - %s (end) %s%n", taskName, dtf.format(endTime));
        }
    }
}

这里用Consumer<Page>函数式接口接收待执行的任务方法(比如HomePage::performBankAccountDetail这类方法引用),try-finally保证即使任务抛出异常,结束日志也能正常输出。

  1. 简化原有调用代码:
Page page = context.newPage();
LogTiming.withTiming("Account detail", page, HomePage::performBankAccountDetail);
LogTiming.withTiming("Documents detail", page, DocumentsSequence::documentsVisualization);

方案优势

  • 彻底消除重复:所有日志打印逻辑集中在工具类,调用点只需传入任务名称和执行方法
  • 维护成本低:后续修改日志格式(比如切换到SLF4J等日志框架、调整输出内容)时,仅需修改LogTiming类,无需改动所有调用处
  • 扩展性强:可轻松重载方法支持其他场景,比如无参数任务用Runnable、带返回值任务用Function

进阶扩展(可选)

如果需要统计任务执行时长,可在工具方法中增加时长计算:

public static void withTiming(String taskName, Page page, Consumer<Page> task) {
    LocalDateTime startTime = LocalDateTime.now();
    System.out.printf("[+] - %s (start) %s%n", taskName, dtf.format(startTime));
    try {
        task.accept(page);
    } finally {
        LocalDateTime endTime = LocalDateTime.now();
        long duration = java.time.Duration.between(startTime, endTime).toMillis();
        System.out.printf("[+] - %s (end) %s (duration: %dms)%n", taskName, dtf.format(endTime), duration);
    }
}

内容的提问来源于stack exchange,提问作者binaryRat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:27:31