【问题标题】:Displaying a log per line for a multiline text为多行文本每行显示一个日志
【发布时间】:2011-06-07 20:41:57
【问题描述】:

假设我有一个多行文本“a\nb\nc”;当我记录它时,例如使用“调试”方法,我只得到一个日志;

这是预期的行为,但不包括第一行的行也显示在输出的左侧:

1234 [1] [DEBUG] Test - a
b
c
1235 [1] [DEBUG] Test - ...

一个简单的解决方法是每行生成一个日志来获取:

1234 [1] [DEBUG] Test - a
1235 [1] [DEBUG] Test - b
1236 [1] [DEBUG] Test - c
1237 [1] [DEBUG] Test - ...

_

有没有办法自动进行这种处理,或者我应该编写一个简单的包装器来管理这个设置?

_

提前致谢。

【问题讨论】:

  • 我认为这不可能。如果您编写一个包装器 - 包装器将在 \n 上拆分并调用 logger.log 的次数与行数一样多。我会说不好。
  • @Nishant:感谢您考虑这个问题。包装器可以是从我当前的附加器类型继承的自定义附加器,或者更好的是可以包装任何附加器的通用装饰器。然后我想知道如何在 XML 配置文件中表达这种结构。

标签: logging log4j log4net


【解决方案1】:

不可能,也不推荐。

在您的第一个示例中,很明显存在两个日志语句,而在您的第二个示例中,乍一看可能假设有四个。

一个日志语句应该提供有关发生的事情和发生时间的单一来源信息,并且该信息应该在某些方面有用。

想象一下,如果你有一个错误语句,比如一个异常,由于它的堆栈跟踪,它将跨越 30 行左右。在您的情况下,这看起来像是 30 个错误,而自动化工具也可能将其报告为 30 个错误。这是错误信息,应该避免。

当您处理更复杂的日志记录情况时,更不用说“一个日志语句!= 一个写入日志”可能会导致同步破坏,多个线程同时写入同一个文件,或者更糟糕的是,多个 JVM 正在执行所以。

如果“左边太远”的事情让你很伤心,我建议对生成的日志文件进行一些后期处理,例如在每行的开头添加 8 个左右的空格而不包含[调试]、[信息]、...

【讨论】:

  • 感谢您的回答;事实上,我同意你关于使用工具的论点。认为这不是我的用例,这似乎不是一个好习惯。
猜你喜欢
  • 1970-01-01
  • 2020-12-20
  • 1970-01-01
  • 1970-01-01
  • 2013-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-22
相关资源
最近更新 更多