Skip to content

How To Use Log Annotation

zifangsky edited this page Mar 21, 2019 · 1 revision

日志注解的使用

@WebLog注解

使用示例一:

@ResponseBody
@RequiresPermissions("/aaa/bbb")
@RequestMapping(value = "/selectByUsername", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@WebLog(content = "在controller中执行 selectByUsername 方法,查询用户名:#{username}")
public SysUser selectByUsername(String username) {
	return testService.selectByUsername(username);
}

使用示例二:

@WebLog(content = "请求的用户名:#{greeting.name},年龄:#{greeting.age},IP:#{ip}", type = LogTypes.BUSINESS, module = "测试业务接口", condition = "#{greeting.age>10}")
public HelloMessage greeting(Greeting greeting, String ip) {
	HelloMessage message = new HelloMessage();
	if(greeting != null){
		message.setContent("Hello <" + greeting.getName() + "," + greeting.getAge() + ">,Welcome!");
	}

	return message;
}

以下是@WebLog注解的详细参数说明:

(1)content:

用于设置日志正文部分,默认为空字符串。支持使用类SPEL表达式(语法:#{参数})动态传递日志数据,比如上面的#{username}#{greeting.name}

(2)type:

用于设置某条日志的类型。当前内置了两种日志类型:

  • OPERATION:操作日志
  • BUSINESS:业务日志

(3)module:

用于设置某条日志所属的业务模块,默认为空字符串。同样也支持使用类SPEL表达式(语法:#{参数}

(4)condition:

用于设置在什么条件下记录某条日志,当该参数是不为空的字符串时生效。此外,该参数是一个类SPEL表达式的条件,比如上面的#{greeting.age>10}

(5)unless:

用于设置在什么条件下不记录某条日志,当该参数是不为空的字符串时生效。此外,该参数是一个类SPEL表达式的条件,同时跟参数condition的含义刚好相反

@WebLogs注解

这个注解实际上是@WebLog注解的数组形式,用于同时记录多条不同的日志,使用示例如下:

@WebLogs({
		@WebLog(content = "查询用户名【#{username}】的基本信息", type = LogTypes.BUSINESS, module = "用户模块")
		,@WebLog(content = "执行 selectByUsername 方法", type = LogTypes.OPERATION)
})
public SysUser selectByUsername(String username) {
	return userMapper.selectByUsername(username);
}