我使用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日志处理程序,并且存在相同的问题。因此,它为堆栈跟踪的每一行发送一封电子邮件,而不为每个错误或异常发送一封电子邮件。

提前致谢。

最佳答案

这看起来很像有人在其代码中留下了以下内容:

  try {
      // do something that throws an exception
  } catch (SomeException e) {
      e.printStackTrace();
  }


如果这是用Apache Shiro代码编写的,我会感到非常惊讶。

通常,最好使用周围的许多日志记录库之一并按以下方式报告:

  } catch (SomeException e) {
      logger.error("Something failed", e);
  }


在某些情况下,如果您使用的是部署中的日志记录配置中定义的控制台附加程序或处理程序,则也可能导致此情况。原因是WildFly将System.outSystem.err都包装在记录器中。这将导致您看到的格式。

09-11 19:17
查看更多