使用Slf4j
,可以用单行代码在记录器行之前打印新行。
原始代码:
System.out.println();
logger.info("tmp file deleted, file path: {}", tmpFile.getAbsolutePath());
问题:
\n
添加新行很容易,但是在日志行之前添加新行就没有了。如果尚不存在这样的功能,那么您认为它可以轻松实现,并且至少在某些情况下有用吗?
例如这样的方法:
Logger.info(int prefixNewLineCount, String format, Object... arguments)
第一个参数指定前缀空行的数量。
答案 0 :(得分:1)
这实际上取决于您使用的SLF4j的日志记录实现(logback,Log4j,JUL等)。 对于这种要求,我在下面使用MDC(映射的诊断上下文)进行了类似的操作。如果这样有帮助。
public class Test
{
private static final Logger LOGGER = LoggerFactory.getLogger( "TEST" );
public static void main( String[] args ) throws InterruptedException
{
MDC.put( "newLine", "\n" );
//your logic here
LOGGER.log( Level.INFO, "log message one " );
LOGGER.log( Level.INFO, "log message tow" );
LOGGER.log( Level.INFO, "log message three" );
LOGGER.log( Level.INFO, "log message four" );
}
}
然后在log42配置文件中使用%X{newLine}
为每个日志消息附加'\n'
。
<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorInterval="10">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%X{newLine} %d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<File name="test" fileName=".\src\test\resources\test.log" />
</Appenders>
<Loggers>
<Logger name="TEST" level="ALL">
<AppenderRef ref="test"/>
</Logger>
<Root level="ALL">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
放出
12:10:36.412 [main] INFO tbx.TEST - log message one
12:10:36.418 [main] INFO tbx.TEST - log message tow
12:10:36.418 [main] INFO tbx.TEST - log message three
12:10:36.418 [main] INFO tbx.TEST - log message four