struts2拦截器,我需要用log4j实现登陆日志和更新日志,我需要配置两个log4文件么?
用struts2的拦截器,实现登录日志和更新日志,我用写两个log4j文件还是一个就可以搞定了,刚用log4j,了解的不多。那么多个action怎么配置到一个文件里面,解决多个action判断是否写日志的问题。 struts2 log4j 拦截器
[解决办法]
log4j等级 debug debug级别
info info级别
warn warn级别
error error级别
不能用来记录你的什么登录和更新的,,,
action 是配置在struts2.xml中 可以使用 * 通配符 可以解决多个的问题
[解决办法]
ex: 设置 info级别 使用log.info("VPN设备信息数据采集程序开始运行~~~~~~~~~~~~~~~~~~~~"); 就可以 在日志中 写入
[解决办法]
怎么根据用户的不同用log4j生成不同的日志呢?
[解决办法]
配置两个categry就可以了
[解决办法]
用户不同生成不同的日志只有自己写了。
[解决办法]
Object execute(HibernateCallback callback, String logMessage) {
TimeWatch watch = new TimeWatch();
try {
return hibernateTemplate.execute(callback);
} finally {
logger.log(HibernateDao.class, String.format("%s, exeTime=%d", logMessage, watch.exeTime()));
}
}
@SuppressWarnings("unchecked")
public <T> List<T> find(final DetachedCriteria detachedCriteria, final Integer firstRst, final Integer maxRsts) {
return (List<T>) execute(new HibernateCallback() {
@Override
public Object doInHibernate(Session session) throws HibernateException, SQLException {
Criteria criteria = detachedCriteria.getExecutableCriteria(session);
if (firstRst != null) criteria.setFirstRst(firstRst);
if (maxRsts != null) criteria.setMaxRsts(maxRsts);
return criteria.list();
}
}, String.format("find list by criteria, criteria=%s, firstRst=%d, maxRsts=%d", detachedCriteria, firstRst, maxRsts));
}
ex: 设置 info级别 使用log.info("VPN设备信息数据采集程序开始运行~~~~~~~~~~~~~~~~~~~~"); 就可以 在日志中 写入
上面的问题解决了,多个可以在配置多个输出位置。但是现在我想实现的事,记录操作的sql。。。。纠结了,在拦截器里面写还是在dao层写呢。
因参数的形式,传到拦截器中么?dao层怎么得到执行的hql呢?
按照项目规范的开发模式具体的hql都是写在service层的,dao层提供接收hql并调用。struts2作为controller层是不能得到hql语句的,除非项目不规范,那么也就是说所有的hql在dao这层都能接收到,可以利用这一特点用spring的aspect的aop的返回后通知方式在对dao中所有有接收hql参数的方法拦截就行了。在方法执行后记录hql语句到日志