格里姆星:水晶是新石油免安装绿色中文版
5.95G · 2025-10-11
欢迎使用 Atlas Log 0.2.0!本教程将指导您使用最新版本的功能,特别是新修复的注解配置功能。
@Log
注解中格式化器配置问题<dependency>
<groupId>io.github.nemoob</groupId>
<artifactId>atlas-log-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
@SpringBootApplication
@EnableAtlasLog
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@RestController
public class TestController {
@GetMapping("/test")
@Log("测试接口")
public String test() {
return "Atlas Log 0.2.0 工作正常!";
}
}
@SpringBootApplication
@EnableAtlasLog(
enabled = true,
defaultLevel = "INFO",
spelEnabled = true,
// HTTP 日志配置 - 0.2.0 新修复
httpLog = @AtlasLogHttpLog(
urlFormat = "{remoteAddr} -> {method} {uri}{queryString}",
includeQueryString = true,
logFullParameters = true,
includeHeaders = false,
excludeHeaders = {"authorization", "cookie"}
),
// 链路追踪配置
trace = @AtlasLogTrace(
enabled = true,
headerName = "X-Trace-Id",
generator = "uuid"
),
// 性能监控配置
performance = @AtlasLogPerformance(
enabled = true,
slowThreshold = 1000L,
logSlowMethods = true
),
// 敏感数据配置
sensitive = @AtlasLogSensitive(
enabled = true,
customFields = {"password", "bankCard", "idCard"}
)
)
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
0.2.0 版本完全修复了 urlFormat 配置问题,现在支持以下占位符:
占位符 | 说明 | 示例值 |
---|---|---|
{method} | HTTP 方法 | GET , POST , PUT |
{uri} | 请求 URI | /api/users/123 |
{queryString} | 查询字符串 | ?name=john&age=25 |
{remoteAddr} | 客户端 IP | 192.168.1.100 |
@EnableAtlasLog(
httpLog = @AtlasLogHttpLog(
urlFormat = "{queryString}",
includeQueryString = true
)
)
输出效果:
# 请求: GET /api/users?id=123&name=john
# 日志: TraceId: xxx | URL: ?id=123&name=john | HTTP请求完成
@EnableAtlasLog(
httpLog = @AtlasLogHttpLog(
urlFormat = "[{remoteAddr}] {method} {uri}"
)
)
输出效果:
# 日志: TraceId: xxx | URL: [192.168.1.100] GET /api/users | HTTP请求完成
@EnableAtlasLog(
httpLog = @AtlasLogHttpLog(
urlFormat = "{remoteAddr} -> {method} {uri}{queryString}",
includeQueryString = true
)
)
输出效果:
# 日志: TraceId: xxx | URL: 192.168.1.100 -> GET /api/users?id=123 | HTTP请求完成
您也可以使用 YAML 配置,但注解配置具有更高优先级:
atlas:
log:
http-log:
url-format: "{method} {uri}{queryString}"
include-query-string: true
log-full-parameters: true
0.2.0 版本修复了注解级别格式化器不生效的问题:
@RestController
public class UserController {
// 使用 key-value 格式化器
@GetMapping("/users")
@Log(
value = "查询用户列表",
logArgs = true,
argumentFormatter = "key-value"
)
public List<User> getUsers(@RequestParam String name,
@RequestParam Integer age) {
// 输出: arg0=john&arg1=25
return userService.findUsers(name, age);
}
// 使用 JSON 格式化器
@PostMapping("/users")
@Log(
value = "创建用户",
logArgs = true,
logResult = true,
argumentFormatter = "json",
resultFormatter = "json"
)
public User createUser(@RequestBody User user) {
// 参数输出: [{"name":"john","age":25}]
// 返回值输出: {"id":1,"name":"john","age":25}
return userService.createUser(user);
}
// 混合使用格式化器
@PutMapping("/users/{id}")
@Log(
value = "更新用户",
logArgs = true,
logResult = true,
argumentFormatter = "key-value", // 参数用 key-value
resultFormatter = "json" // 返回值用 JSON
)
public User updateUser(@PathVariable Long id, @RequestBody User user) {
return userService.updateUser(id, user);
}
}
@Component
public class CustomArgumentFormatter implements ArgumentFormatter {
@Override
public String getName() {
return "custom";
}
@Override
public String formatArguments(Object[] args, FormatterContext context) {
return "[自定义格式] " + Arrays.toString(args);
}
@Override
public String formatResult(Object result, FormatterContext context) {
return "[返回值] " + result;
}
}
// 使用自定义格式化器
@Log(
value = "测试自定义格式化器",
argumentFormatter = "custom",
resultFormatter = "custom"
)
public String testCustomFormatter(String input) {
return "processed: " + input;
}
添加配置检查器来验证配置是否生效:
@Component
public class AtlasLogConfigChecker {
@Autowired
private LogConfigProperties properties;
@PostConstruct
public void checkConfiguration() {
System.out.println("=== Atlas Log 0.2.0 Configuration ===");
// 基础配置
System.out.println("Enabled: " + properties.isEnabled());
System.out.println("Default Level: " + properties.getDefaultLevel());
// HTTP 日志配置
LogConfigProperties.HttpLogConfig httpLog = properties.getHttpLog();
System.out.println("URL Format: " + httpLog.getUrlFormat());
System.out.println("Include Query String: " + httpLog.isIncludeQueryString());
System.out.println("Log Full Parameters: " + httpLog.isLogFullParameters());
// 链路追踪配置
LogConfigProperties.TraceIdConfig trace = properties.getTraceId();
System.out.println("Trace Enabled: " + trace.isEnabled());
System.out.println("Trace Header: " + trace.getHeaderName());
System.out.println("=====================================");
}
}
启用调试日志查看详细的配置解析过程:
logging:
level:
io.github.nemoob.atlas.log.config: DEBUG
io.github.nemoob.atlas.log.web.LoggingFilter: DEBUG
io.github.nemoob.atlas.log.aspect.AtlasLogAspect: DEBUG
问题: 配置了 @AtlasLogHttpLog(urlFormat = "{queryString}")
但仍显示默认格式
解决方案:
// 正确的配置方式
@EnableAtlasLog(
httpLog = @AtlasLogHttpLog(
urlFormat = "{queryString}"
)
)
// 错误的配置方式
@AtlasLogHttpLog(urlFormat = "{queryString}") // 直接在类上使用不会生效
问题: argumentFormatter = "key-value"
配置后仍输出 JSON 格式
解决方案:
json
, key-value
, custom
问题: YAML 配置覆盖了注解配置
解决方案:
application.yml
中是否有冲突的配置// 推荐:使用注解配置进行类型安全的配置
@EnableAtlasLog(
// 基础配置
enabled = true,
defaultLevel = "INFO",
// 生产环境建议的 HTTP 日志配置
httpLog = @AtlasLogHttpLog(
urlFormat = "{method} {uri}", // 生产环境不建议记录查询参数
includeQueryString = false,
logFullParameters = false,
includeHeaders = false
),
// 开发环境可以更详细
// httpLog = @AtlasLogHttpLog(
// urlFormat = "{remoteAddr} -> {method} {uri}{queryString}",
// includeQueryString = true,
// logFullParameters = true
// )
)
// 推荐:根据场景选择合适的格式化器
public class BestPracticeController {
// API 接口:使用 JSON 格式便于解析
@PostMapping("/api/users")
@Log(
value = "创建用户 API",
argumentFormatter = "json",
resultFormatter = "json"
)
public ResponseEntity<User> createUser(@RequestBody User user) {
return ResponseEntity.ok(userService.create(user));
}
// 内部方法:使用 key-value 格式便于阅读
@Log(
value = "内部用户查询",
argumentFormatter = "key-value"
)
public List<User> findUsers(String name, Integer age, String department) {
return userService.findUsers(name, age, department);
}
// 复杂对象:使用自定义格式化器
@Log(
value = "复杂业务处理",
argumentFormatter = "custom",
resultFormatter = "custom"
)
public BusinessResult processComplexBusiness(ComplexRequest request) {
return businessService.process(request);
}
}
// 推荐:合理配置性能监控
@EnableAtlasLog(
performance = @AtlasLogPerformance(
enabled = true,
slowThreshold = 1000L, // 1秒阈值
logSlowMethods = true
),
// 敏感数据处理已优化,可以安全启用
sensitive = @AtlasLogSensitive(
enabled = true,
customFields = {"password", "token", "secret"}
)
)
// 推荐:使用 Profile 进行环境区分
@Profile("dev")
@Configuration
public class DevLogConfig {
// 开发环境详细配置
}
@Profile("prod")
@Configuration
public class ProdLogConfig {
// 生产环境精简配置
}
Atlas Log 0.2.0 版本修复了重要的配置问题,现在您可以:
立即升级到 0.2.0 版本,体验更强大、更稳定的日志功能!
如有问题,请参考 故障排除文档 或提交 Issue。
5.95G · 2025-10-11
1.05G · 2025-10-11
333M · 2025-10-11