日志配置

日志配置分为项目运行日志和用户操作日志。

运行日志

项目日志框,架采用Spring Boot默认的Logbak,具体配置见logbak-spring.xml。该配置主要配置了项目分别输出INFO和ERROR级别的日志到日志文件,并且以天为单位保存,最多保存15天:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
...

<!--输出到文件-->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/info/info.%d{yyyy-MM-dd}.log</fileNamePattern>
<MaxHistory>${log.maxHistory}</MaxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>

<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/error/error.%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>

...

其中,${log.path}指定了日志文件路径:

1
<property name="log.path" value="log" />

表示和项目同级目录下的log目录。

${log.maxHistory}指定了文件最多保存的历史天数:

1
<property name="log.maxHistory" value="15" />

这里配置表示15天。

${log.pattern}配置了日志打印的格式:

1
<property name="log.pattern" value="%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n" />

包含时间,路径和线程等信息。

启动项目后可以看到在项目同级目录下生成了一个log文件夹:

更多关于Logbak的介绍可以参考:https://mrbird.cc/Spring-Boot-logback.html

另外一个值得一提的是,在application.yml中有段如下配置:

1
2
3
4
5
6
logging:
level:
cc:
mrbird:
system:
dao: debug

级别设置为debug后,cc.mrbird.system.dao目录下的增删改查操作SQL将会被打印到控制台中。

操作日志

项目中用户的操作日志使用AOP的方式实现,切点为@Log注解:

1
2
3
4
5
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Log {
String value() default "";
}

剩下的只需要在Service层或者Controller层的方法上加上@Log注解即可,如:

1
2
3
4
5
6
7
8
9
10
11
12
@Log("更换主题")
@GetMapping("user/theme")
@ResponseBody
public ResponseBo updateTheme(User user) {
try {
this.userService.updateTheme(user.getTheme(), user.getUsername());
return ResponseBo.ok();
} catch (Exception e) {
log.error("修改主题失败", e);
return ResponseBo.error();
}
}

这样当用户更换主题的时候,便会记录下如下该方法的操作用户、访问时间、方法总耗时、方法参数、操作用户的IP和具体地址等信息。

关于使用AOP记录用户操作日志的原理,可参考:https://mrbird.cc/Spring-Boot-AOP%20log.html


© 2017 - 2018  MrBird & Hosted by Coding Pages