有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

每个堆栈跟踪行上的java Wildfly日志日期

我使用wildfly,但文件日志处理程序的输出有问题。它以完整格式打印堆栈跟踪的每一行错误。下面是一个切分的例子:

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日志处理程序,也有同样的问题。因此,它会针对堆栈跟踪的每一行发送一封电子邮件,而不是针对每个错误或异常发送一封电子邮件

提前谢谢


共 (1) 个答案

  1. # 1 楼答案

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

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

    如果这是在ApacheShiro代码中,我会非常惊讶

    一般来说,最好使用许多日志库中的一个,并像下面这样报告:

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

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