Logback是否支持读取日志参数并写入指定日志文件?
问题解答:Logback日志中包含调用参数
当然可以实现把传递的参数写入日志文件中,问题出在你当前的日志调用方式和格式配置的匹配上,下面给你具体的解决方案:
核心原因
你现在调用logger.error("A new error occured with a param", 1);时,第二个参数1并没有被自动追加到日志消息里——因为Logback的logger.error(String, Object)重载方法中,第二个参数是占位符填充参数,只有当消息字符串里包含{}占位符时,Logback才会把参数替换进去;如果没有占位符,这个参数会被忽略(除非是Throwable类型,会被当作异常栈处理)。
解决方案
1. 规范日志调用方式(推荐)
修改你的日志调用代码,使用{}作为占位符来容纳参数:
logger.error("A new error occured with a param - {}", 1);
这样不需要修改任何Logback配置,你的现有%msg格式就会自动把参数1填充到占位符位置,生成你期望的日志内容:
11:22:17.678 [main] ERROR c.j.example.logbackmavenexample.App - A new error occured with a param - 1
2. 额外说明(针对特殊场景)
如果你的参数是Throwable类型(比如异常对象),Logback会自动识别并通过%ex{full}输出完整异常栈,比如:
logger.error("An error occurred", new RuntimeException("test"));
这时候你的现有配置会同时输出消息和完整异常栈,符合预期。
验证你的现有配置
你的logback.xml配置本身是没问题的:
- 两个FileAppender分别通过LevelFilter过滤DEBUG和ERROR级别日志,路径正确
- 编码器的格式包含了必要的时间、线程、级别、类名和消息字段
只需要调整日志调用的写法,就能实现参数写入日志的需求。
内容的提问来源于stack exchange,提问作者Henrique Ferreira
相关产品推荐
相关产品推荐

