litemall源码阅读4.03 litemall-admin-api的日志
首先是每个control都有的:
private final Log logger = LogFactory.getLog(AdminAdController.class);
这个日志应该是控制台日志。
我详细阅读了这篇文章。
根据文章的描述,本项目在litemall-core的pom.xml中引入了slf4j-log4j12。所以应该使用的是log4j日志。
同时在application.yml中有日志的配置信息和日志级别。
我们在响应/login的代码中加入:
logger.info("测试日志:" + username + ":" + password);
之后debug启动,或者使用mvn clean build构建模块,则控制台相应输出:
在这里并没有找到配置日志文件的部分。这个日志应该仅仅用做控制台打印的。
而这个项目有另一个将日志写入数据库的类:
private LogHelper logHelper;
我们把关注点放在登录成功后的
进入函数,在该函数内部调用了LogAdmin
public void logAdmin(Integer type, String action, Boolean succeed, String result, String comment) {
LitemallLog log = new LitemallLog(); //自动生成的domain类对象
Subject currentUser = SecurityUtils.getSubject();
if (currentUser != null) {
LitemallAdmin admin = (LitemallAdmin) currentUser.getPrincipal();
if (admin != null) {
log.setAdmin(admin.getUsername());
} else {
log.setAdmin("匿名用户");
}
} else {
log.setAdmin("匿名用户");
}
//RequestContextHolder为获取当前request请求上下文的容器。
HttpServletRequest request =
((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
if (request != null) {
log.setIp(IpUtil.getIpAddr(request));
}
log.setType(type);
log.setAction(action);
log.setStatus(succeed);
log.setResult(result);
log.setComment(comment);
logService.add(log); //service对象。
}
首先是LitemallLog 类的对象log,这个对象以及mybatis映射文件mapper.xml和mapper.java文件都是利用mybatis-generator自动生成的。
其中的的service对象logService则包含了LitemallLogMapper对象。之后再logService内部调用
将日志插入到了数据库中。