首页
App
&
Coffee
文档
项目
分享
反馈
俱乐部
登录
注册
jfinal如何用aop来做系统日志记录?
hotsmile
2017-07-15 10:11
我想了解一下,jfinal如果要实现aop的方式来处理系统操作日志,该如何处理,是否支持切面?
我知道spring是很方便,可以通过自定义注解类来实现,不知道jfinal是否支持?
项目:
JFinal
3
1
评论区
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才需要日志写入表,现在做出来了没,可以参考一下吗,哈哈
回复
发送
我要反馈
热门反馈
扫码入社