Java基于注解实现日志记录模块,超详细注释!
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
// 定义操作日志注解
@Target(ElementType.METHOD) // 该注解只能用于方法上
@Retention(RetentionPolicy.RUNTIME) // 在运行时可通过反射获取该注解信息
public @interface OperationLog {
String module() default ""; // 模块名,默认为空字符串
String desc() default ""; // 操作描述,默认为空字符串
}
// 示例:使用OperationLog注解记录操作
public class LogService {
// 使用OperationLog注解标记该方法需要记录日志
@OperationLog(module = "用户管理", desc = "用户登录")
public void logUserLogin(String username) {
// 实现日志记录逻辑
}
// 通过反射获取方法上的OperationLog注解信息并进行日志记录
public void recordLog(OperationLog operationLog, String extraInfo) {
// 实现日志记录逻辑,这里只是打印信息,实际应用中应写入日志文件或数据库
System.out.println("模块:" + operationLog.module() + ",操作描述:" + operationLog.desc() + ",额外信息:" + extraInfo);
}
// 示例方法:通过反射获取方法上的OperationLog注解并记录日志
public void processLog() {
try {
// 获取processLog方法的Class对象
Class<?> clazz = this.getClass();
// 获取processLog方法的Method对象
java.lang.reflect.Method method = clazz.getMethod("recordLog", OperationLog.class, String.class);
// 获取方法上的OperationLog注解
OperationLog operationLog = method.getAnnotation(OperationLog.class);
// 调用recordLog方法记录日志
recordLog(operationLog, "无");
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
}
// 测试日志记录
public class TestLog {
public static void main(String[] args) {
LogService logService = new LogService();
logService.processLog(); // 输出日志信息
}
}
这个代码示例展示了如何定义一个注解OperationLog
来标记方法需要记录的操作信息,并演示了如何使用Java反射机制在方法执行后获取该注解信息并记录日志。这个过程是日志框架设计中的一个常见模式,对于学习如何使用注解和反射有很好的教育意义。
评论已关闭