使用Java中的日志记录框架,在日志记录行之前打印新行

时间:2018-12-10 07:36:31

标签: java logging slf4j

使用Slf4j,可以用单行代码在记录器行之前打印新行。

原始代码:

System.out.println();
logger.info("tmp file deleted, file path: {}", tmpFile.getAbsolutePath());

问题:

  • 是否可以在上面的代码中将第一行合并到第二行,同时仍然获得相同的输出?
    我知道在日志行之后使用\n添加新行很容易,但是在日志行之前添加新行就没有了。
  • 如果尚不存在这样的功能,那么您认为它可以轻松实现,并且至少在某些情况下有用吗?
    例如这样的方法:

    Logger.info(int prefixNewLineCount, String format, Object... arguments)

    第一个参数指定前缀空行的数量。

1 个答案:

答案 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