Java 项目中基于 Log4j 的日志工具类封装实践
在 Java 企业级开发中,日志是系统调试、监控和排查问题的核心手段。直接调用 Log4j 往往导致耦合度高、日志格式不统一。这里分享一种封装方案,通过接口抽象和工具类辅助,让日志调用更简洁规范。
1. 定义日志接口
首先定义统一的 Logger 接口,屏蔽底层 Log4j 的具体实现细节,方便后续切换或扩展。
public interface Logger {
/** 配置文件路径 */
String LOG4JFILE = "log4j.properties";
/** 日志名称空间 */
String SYSTEMLOG = "Systemlog";
void debug(Object message);
void debug(Object message, Throwable throwable);
void info(Object message);
void info(Object message, Throwable throwable);
void warn(Object message);
void warn(Object message, Throwable throwable);
void error(Object message);
void error(Object message, Throwable throwable);
}
2. 实现 Log4j 适配器
核心在于 LoggerAdapter,负责初始化配置并代理实际日志输出。注意懒加载机制,确保配置只加载一次,避免重复读取文件。
package com.example.log;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
{
;
{
PropertyConfigurator.configure(LOG4JFILE);
log4j = Logger.getLogger(SYSTEMLOG);
}
{
(log4j == ) getInstance();
log4j.debug(message);
}
{
(log4j == ) getInstance();
log4j.debug(message, throwable);
}
{
(log4j == ) getInstance();
log4j.info(message);
}
{
(log4j == ) getInstance();
log4j.info(message, throwable);
}
{
(log4j == ) getInstance();
log4j.warn(message, throwable);
}
{
(log4j == ) getInstance();
log4j.warn(message);
}
{
(log4j == ) getInstance();
log4j.error(message);
}
{
(log4j == ) getInstance();
log4j.error(message, throwable);
}
}

