显示多行文本的每行日志

时间:2011-01-12 13:58:48

标签: logging log4j log4net

说我有一个多行文字“a \ nb \ nc”;当我记录它时,例如使用“debug”方法,我只得到一个日志;

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

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 - ...

_

有没有办法自动进行此类处理,还是应该编写一个简单的包装来管理此设置?

_

提前致谢。

1 个答案:

答案 0 :(得分:10)

不可能,也不推荐。

在你的第一个例子中,很明显存在两个日志语句,而在你的第二个例子中,人们可能会一眼就认为其中有四个。

一个日志语句应该提供有关发生的事件和发生的时间的单一来源信息,并且该信息在某种程度上应该是有用的。

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

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

如果“左边太远”的事情让你感到非常悲痛,我建议对生成的日志文件进行一些后期处理,例如在不包含每行的开头添加8个空格左右[DEBUG],[INFO],......