使用System.out.printf()输出日志重定向到文件后显示混乱问题

写了一个小工具,使用System.out.printf()输出日志,以方便使用者查看,在终端显示没有问题,但重定向到文件就有问题了,会出现一些很奇怪的乱序现象。

上网查询资料,判断应该是跟重定向和Linux缓冲区有关,标准输出为行缓冲,文件为全缓冲,可以使用 stdbuf -oL [command] 来实现重定义缓冲区类型,于是将原先的启动脚本中的 nohup java ... & 改为 nohup stdbuf -oL ... & , 这样改完后用vim命令查看文件内容是正常的,但使用tail -f 命令就不行了,还是一样会乱序,原来 tail -f 的输出也是全缓冲, 于是查看时改成 stdbuf -oL tail -f stdout.log, 乱序问题解决。

原文地址:https://www.cnblogs.com/chenggang816/p/10337955.html

时间: 2024-10-29 17:03:33

使用System.out.printf()输出日志重定向到文件后显示混乱问题的相关文章

SecurityCRT输出日志重定向

使用CRT进行抓取log,因为工具本省缓冲区有限,导致,刷屏特别快,可能会错过一些log,可以对CRT的log进行增加输出源,或者说将输出到控制台的log再输出到本地文件中: 文件->点击(勾选)日志文件:这个选项代表打出到控制台的日志将会输出到日志文件中: 选项->会话选项->终端->日志文件:指定输出文件路径以及名称: 如此配置,就可以将log输出到指定的文件中了. SecurityCRT输出日志重定向,布布扣,bubuko.com

Log4J日志配置详解和自定义log4j日志级别及输出日志到不同文件实现方法

Log4J日志配置详解 一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders(输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使用这三个组件可以轻松地记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置. 1.Loggers Loggers组件在此系统中被分为五个级别:DEBUG.INFO.WARN.ERROR和FATAL.这五个级别是有顺序的,DEBUG < INFO < WARN <

错误信息输出,重定向到文件

将错误重定向到文件remove-item none 2> d:\ee.txt 将错误追加到已有文件remove-item none 2>> d:\ee.txt 将错误发送到成功输出流.如果报错后,代码依然继续执行,则Exception不会被捕获到$myerror = Remove-Item "NoSuchDirectory" 2>&1$myError.Exception为空 $error会保存所有错误信息,以倒序排列,即最新的错误信息就是$error[0

Log4j按级别输出日志到不同文件配置

1.自定义LogFileAppender类,继承DailyRollingFileAppender,实现Log4j按级别输出日志到不同文件. package com.liying.mango.common.interceptor; import org.apache.log4j.DailyRollingFileAppender; import org.apache.log4j.Priority; public class LogFileAppender extends DailyRollingFi

【转】Log4j按级别输出日志到不同文件配置分析

关于LOG4J 按照级别输出日志,并按照级别输出到不同文件中的说法有很多, 网上贴的最多的log4j.properties的设置是这样的 log4j.rootLogger=info,stdout,info,debug,error log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdou

[Linux应用]Linux应用程序输出数据重定向到文件中

转自:http://blog.chinaunix.net/uid-20680966-id-4698387.html 目的是要让程序的printf的打印能重定向到某个文本中,ctrl+c强制退出后查看文本,方便调试.运行方式:a. out程序正常运行是会打印一些字符的 a.out > 1.txt 2>&1 把stdout与stderr都重定向到1.txt文件中去,结果发现运行过程中1.txt一直为空,调试发现如果a.out正常结束退出1.txt数据就正常,ctrl+c强制退出程序则1.t

log4j输出日志到不同文件

1.先看log4j的配置文件:log4j.rootLogger=INFO,R,Clientlog4j.appender.R=org.apache.log4j.RollingFileAppenderlog4j.appender.R.File=./log/server.loglog4j.appender.R.MaxFileSize=5MBlog4j.appender.R.MaxBackupIndex=10log4j.appender.R.layout=org.apache.log4j.Pattern

java system.out.printf()的使用方法

1 package test; 2 3 4 public class Main 5 { 6 public static void main(String[] args) 7 { 8 // 定义一些变量,用来格式化输出. 9 double d = 345.678; 10 String s = "你好!"; 11 int i = 1234; 12 // "%"表示进行格式化输出,"%"之后的内容为格式的定义. 13 System.out.printf

Java中,如何让System.out.printf(&quot;%d&quot;, 2 + 2);输出5

代码如下: import java.lang.reflect.Field; public class TwoPlusTwo { public static void main(String[] args) throws Exception { Class cache = Integer.class.getDeclaredClasses()[0]; System.out.println(cache.getName()); Field c = cache.getDeclaredField("cach