Java Log4j-有时只需要换行

Java Log4j-有时只需要换行,java,logging,log4j,newline,log4j2,Java,Logging,Log4j,Newline,Log4j2,使用System.out,您可以: System.out.print System.out.println 有时我不想要换行符(比如当我打印“即将提交事务…完成”)时)。有了System.out,我会这样做: System.out.print("About to commit transaction..."); System.out.println("done."); 我不知道如何在log4j中实现这一点。我的log4j属性文件包含以下内容: log4j.rootLogger=DEBUG,

使用System.out,您可以:

System.out.print
System.out.println
有时我不想要换行符(比如当我打印“即将提交事务…完成”)时)。有了System.out,我会这样做:

System.out.print("About to commit transaction...");
System.out.println("done.");
我不知道如何在log4j中实现这一点。我的log4j属性文件包含以下内容:

log4j.rootLogger=DEBUG, CA
log4j.appender.CA=org.apache.log4j.ConsoleAppender
log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern=%-30c{1} %x %-30M - %m%n 
我不想简单地删除“%n”,而必须在每个日志记录语句中指定它


在Log4j中这可能吗?

您可以尝试一些创造性的方法,比如声明三个记录器,每个记录器使用不同的appender(和不同的转换模式)

第一个是您现在拥有的(相当于System.println)

第二个将具有模式%-30c{1}%x%-30M-%m(相当于System.print)

第三个将具有模式%m%n(相当于没有日志消息头的System.println)

这可能行得通,但代码中有三个记录器似乎不值得这么麻烦


您可以尝试在log4j2中请求此功能…

谢谢Remko。很高兴知道它不受支持,所以我不想一直想知道如何做。这只有在单线程应用程序的情况下才能很好地工作。如果有多个线程进行日志记录,则可能会出现类似“[Thread1]即将提交事务…[Thread2]即将提交事务…[Thread1]完成\n[Thread2]完成”这样的情况,如果经常使用“无换行符”追加器,则日志将难以读取。在您的示例中,我建议使用调试级别记录tx的开始(使用换行符),并使用INFO记录txGood点的结束,是的。任何解决方案都会受到这个问题的影响。因此,提问者没有考虑这个问题,也不想让它成为一个线程化的用例。