我使用wildfly并且FILE日志处理程序的输出有问题。它使用完整格式化的表单打印堆栈跟踪错误的每一行。这是一个切割的例子:
12:13:11,238 ERROR [stderr] (default task-48) org.apache.shiro.authc.UnknownAccountException: Realm [XXX.account.library.security.shiro.ClientApplicationRealm@14896aa1] was unable to find account data for the submitted AuthenticationToken [org.apache.shiro.authc.UsernamePasswordToken - XXX, rememberMe=false].
12:13:11,238 ERROR [stderr] (default task-48) at org.apache.shiro.authc.pam.ModularRealmAuthenticator.doSingleRealmAuthentication(ModularRealmAuthenticator.java:184)
12:13:11,238 ERROR [stderr] (default task-48) at org.apache.shiro.authc.pam.ModularRealmAuthenticator.doAuthenticate(ModularRealmAuthenticator.java:267)
12:13:11,238 ERROR [stderr] (default task-48) at org.apache.shiro.authc.AbstractAuthenticator.authenticate(AbstractAuthenticator.java:198)
12:13:11,238 ERROR [stderr] (default task-48) at org.apache.shiro.mgt.AuthenticatingSecurityManager.authenticate(AuthenticatingSecurityManager.java:106)
...
我只想在开头有一行"12:13:11,238 ERROR [stderr] (default task-48)"
,并且堆栈跟踪的每一方都以" at"开头。而不是将新的日志行解释为新的日志行。
我有一个额外的SMTP日志处理程序,存在同样的问题。因此,它会为堆栈跟踪的每一行发送一封电子邮件,而不是每个错误或异常发送一封电子邮件。
提前致谢。
答案 0 :(得分:2)
这看起来很像有人在代码中留下了类似的内容:
try {
// do something that throws an exception
} catch (SomeException e) {
e.printStackTrace();
}
如果这是Apache Shiro代码,我会感到非常惊讶。
一般来说,最好使用众多日志记录库中的一个并报告如下:
} catch (SomeException e) {
logger.error("Something failed", e);
}
在某些情况下,如果您使用部署中的日志记录配置中定义的控制台appender或处理程序,这也可能导致此问题。原因是WildFly将System.out
和System.err
包装在记录器中。这将导致您看到的格式。