Log4Net中合并类与方法名通配符并设置固定填充宽度
嘿,这个需求很常见!先直接给结论:大多数主流日志框架(比如Logback、Log4j2)并不支持你说的%-50class.method这种直接合并通配符的写法,但我们可以用框架自带的格式化语法,把类名和方法名拼接后再统一设置固定宽度,效果完全符合你的预期。
核心思路
日志框架的转换符(比如%class/%c表示类名,%method/%M表示方法名)都是独立定义的,没有直接的合并语法,但我们可以把类名.方法名作为一个整体,套在括号里再设置宽度。
具体实现示例
1. Logback 配置
在你的logback.xml或logback-spring.xml里,日志格式可以这么写:
<pattern>%-50(%class.%method) - %msg%n</pattern>
这里的%-50(...)表示把括号内的内容(%class.%method拼接后的字符串)格式化为左对齐、固定50字符宽度的内容:
- 如果类名+方法名的总长度小于50,会自动补空格填充到50位
- 如果总长度超过50,会自动截断到50字符(保证格式统一)
2. Log4j2 配置
在log4j2.xml里,对应的写法是:
<PatternLayout pattern="%-50(%c.%M) - %msg%n"/>
Log4j2里用%c指代类名,%M指代方法名,逻辑和Logback完全一致,同样实现固定宽度的合并格式。
效果验证
用你给出的示例内容,最终日志输出会是这样的(为了直观展示空格,用·代替空格):
ClassA.MethodA································ - message
AnotherClass.AnotherMethod···················· - message
WhateeverClass.Meth··························· - message
SomeReallyLongClass.AndAreallyLongMet········· - message
完美匹配你想要的统一格式!
内容的提问来源于stack exchange,提问作者Lee Tickett

