jfinal如何用aop来做系统日志记录?

我想了解一下,jfinal如果要实现aop的方式来处理系统操作日志,该如何处理,是否支持切面?

我知道spring是很方便,可以通过自定义注解类来实现,不知道jfinal是否支持?

评论区

hotsmile

2017-07-15 10:15

@JFinal 请指点一下!!!

JFinal

2017-07-15 11:42

做个拦截器,大致代码如下:
public void intercept(Invocation inv) {
log.info("调用 action 之前做日志");
inv.invoke();
log.info("调用 action 之后做日志");


然后将此拦截器配置成全局拦截器: me.add(new MyLogInterceptor());

建议稍微看一下 jfinal 手册,这是最基本的功能,其中 Invocation 中还有很多实用的方法可供调用,例如 inv.getActionKey() 等等

hotsmile

2017-07-15 12:02

@JFinal 谢谢波哥

杜福忠

2017-07-15 12:39

日志系统最好使用: Handler 不会被清除

手册:
2.7 configHandler (Handlers me)
此方法用来配置JFinal的Handler,如下代码配置了名为ResourceHandler的处理器,Handler
可以接管所有 web 请求,并对应用拥有完全的控制权,可以很方便地实现更高层的功能性扩展。
public void configHandler(Handlers me) {
me.add(new ResourceHandler());
}

hotsmile

2017-07-24 22:32

@杜福忠 我想实现一个自定义的注解类,然后拦截该注解,进行我的业务处理,你看这个思路行不行?

杜福忠

2017-07-25 10:01

@hotsmile 这样实现不太好, 用注解套的太深, 不易开发和维护, 建议拆成平级的,

你可以看下 InterceptorStack 类 将多个拦截器组合成为 对外部是一个拦截器 :

public class UserSongLikeValidator extends InterceptorStack {
public void config() {
addInterceptors(new UserIdValidator());//先运行
addInterceptors(new UserSongLikeValidator();//后运行
//.... 继续
}
}

用的时候这样:
@Before(UserSongLikeValidator.class)

是不是也满足你的需求了?

hotsmile

2018-04-11 18:50

@杜福忠 ,你这种方式有点侵入性,我觉得可以自定义一个注解类,拦截到这个注解类,就调用写日志操作,后面其他方法上直接加注解就可以了

杜福忠

2018-04-11 19:30

@hotsmile 2333 去年的帖子... 你才上线啊, 你如果想"自定义一个注解类", 然后还要 "拦截到这个注解类" 操作... 需要用的时候 还需 "加注解" 到某个地方 ..
很繁琐了... 参考波总说的, 但是不要注册成"全局拦截器" , 在需要的地方 使用 "@Before(MyLogInterceptor.class)" 就可以了, 再配合 Duang 用来对目标进行增强 就可以了, 何必再造一个轮子 ~ 4.2 Interceptor

王IT

2018-12-12 11:34

@JFinal public void intercept(Invocation inv) {

String ip = CommonUtils.getIP(inv.getController().getRequest());
String className = inv.getController().getClass().getName();
String methodName = inv.getMethodName();

RequestMessage reqApi = null;
ResponseMessage resApi = null;
String request = null;
try {
request = IOUtils.toString(inv.getController().getRequest().getInputStream());

LOG.info("请求IP:{};类:{};方法:{};参数:{}", ip, className, methodName, request);
// 解析JSON报文
reqApi = JsonUtil.fromJson(request, RequestMessage.class);

//这里拿出了json 流,后面controller 去json 流就没有了,所以日志打印完,还要放回request 对象里,(麻烦,没有spring aop 好使!)

JJfinal

2019-03-12 11:22

@hotsmile 我也是这么想的,加了注解日志才写入数据库是最好的,因为需求如果是查询是不需要记录的,只有insert和update才需要日志写入表,现在做出来了没,可以参考一下吗,哈哈

热门反馈

扫码入社