jjzjj

java - 登录和第三方写入标准输出。如何阻止他们交错

首先是一些背景。我有一个从DOS批处理脚本运行的批处理类型的java进程。所有java日志记录都转到stdout,批处理脚本将stdout重定向到一个文件。(这对我来说很好,因为我可以从脚本中ECHO,它进入日志文件,所以我可以看到所有的javaJVM命令行参数,这对调试非常有用。)我可能不会我使用slf4jAPI,对于后端,我以前使用log4j,但最近切换到logback-classic。虽然我所有的应用程序代码都使用slf4j,但我有一个第三方库,它自己进行日志记录(不使用标准API),它也被写入标准输出。问题是有时日志行会混淆并且不会清晰地出现在单独的行中。这是一些困惑输出的示例

java - Log4j 不打印到文件或标准输出

我刚刚下载了Log4j并正在尝试对其进行测试。我复制了一个示例属性文件以打印到stdout和一个来自here的文件但两者都没有。这是我的代码:publicclassClientTest{//staticCanvasFramecanvas=newCanvasFrame("WebCam");staticLoggerlogger=Logger.getLogger(ClientTest.class);publicstaticvoidmain(String[]args){BasicConfigurator.configure();logger.debug("HERPADERP");Clientb

java - 您如何使用 Log4j 将 stdout 和 stderr 写入/捕获到文件并使用 Windows 和 Tomcat 5.5 (Java)?

我正在使用Windows2008R2和ApacheTomcat5.5,供您引用。STDOUT和STDERR可以通过ApacheTomcat属性自动记录,通过Logging选项卡->RedirectStdout和RedirectStderror文本框。但是我想通过log4j来控制这个。我正在尝试利用ConsoleAppender和TimeAndSizeRollingAppenderclass翻转通常由ApacheTomcat的固有日志记录控制的内容。基本上,无论Tomcat将stdout和stderr重定向到一个文件,我想使用log4j和log4j.properties文件做同样的事情。

如何通过node.js上的子进程运行顶部命令,而不会从终端中获得“ stdout maxbuffer”

我试图创建一个RESTAPI,该API从VM中获取指标,但我似乎无法在没有“超越STDOUTMAXBUFFER”的情况下运行我的孩子流程。这是我的代码const{exec}=require('child_process');exec('top',(error,stdout,stderr)=>{if(error){console.error(`execerror:${error}`);return;}console.log(`stdout:${stdout}`);console.log(`stderr:${stderr}`);});看答案top(带有默认论点)将继续写作stdout-它不仅转储一

java - 测试从 stdin 读取并写入 stdout 的 java 程序

我正在为Java编程竞赛编写一些代码。程序的输入是使用stdin给出的,输出是在stdout上。你们如何测试在stdin/stdout上运行的程序?这就是我的想法:由于System.in是InputStream类型,而System.out是PrintStream类型,我用这个原型(prototype)在func中编写了我的代码:voidprintAverage(InputStreamin,PrintStreamout)现在,我想使用junit对此进行测试。我想使用字符串伪造System.in并接收字符串中的输出。@TestvoidtestPrintAverage(){Stringinp

java - 从 mvn exec :java 运行的类中捕获标准

我想使用Maven的exec命令运行一个main方法。我可以将其设置为运行良好,但我的类的输出被Maven的文本包围。[INFO]Errorstacktracesareturnedon.[INFO]Scanningforprojects...[WARNING]...(actualprogramoutput)...[INFO]BUILDSUCCESS[INFO]------------------------------------------------------------------------[INFO]Totaltime:11.351s[INFO]Finishedat:Fri

java - 如果父级不使用 Java 中的 stdout/stderr,为什么进程会挂起?

我知道,如果您在Java中使用ProcessBuilder.start启动外部进程,您必须使用它的stdout/stderr(例如,参见here)。否则外部进程会在启动时挂起。我的问题是为什么它以这种方式工作。我的猜测是JVM将执行进程的stdout/stderr重定向到管道,如果管道没有空间,则写入管道block。有道理吗?现在我想知道为什么Java这样做。这种设计背后的基本原理是什么? 最佳答案 Java在这方面没有做任何事情。它只是使用操作系统服务来创建管道。所有Unix类操作系统和Windows在这方面的行为都相同:在父子之

java - 如何在 Java 中将子进程 stdout/stderr 重定向到主进程 stdout/stderr?

在其他语言中(如bash和Python),当我们生成一个子进程时,这个新进程将从父进程继承stdout和stderr。这意味着子进程的任何输出都将打印到终端以及父进程的输出。我们如何在Java中实现相同的行为?我的第一次尝试是:proc=Runtime.getRuntime().exec(cmd);但它不会起作用。基于thisanswer和thisanswer,我已将代码替换为:ProcessBuilderpb=newProcessBuilder(cmd);pb.redirectOutput(System.out);pb.redirectError(System.err);但这甚至无法

Java:System.out.println() 这么慢的原因是什么?

对于可以在文本编辑器中完成的小型逻辑程序,为了跟踪,我使用经典的System.out.println()。我想你们都知道在大量迭代中使用它是多么令人沮丧。为什么这么慢?背后的原因是什么? 最佳答案 这与JVM无关。将文本打印到屏幕只涉及操作系统在绘制字母,尤其是滚动方面的大量工作。如果将System.out重定向到文件,速度会快得多。 关于Java:System.out.println()这么慢的原因是什么?,我们在StackOverflow上找到一个类似的问题:

java - Surefire Maven 插件 : "Corrupted STDOUT by directly writing to native stream in forked JVM"

我的JUnit测试在通过Maven和Surefire插件(下面的版本信息)运行时失败了。我看到错误消息:CorruptedSTDOUTbydirectlywritingtonativestreaminforkedJVM4.SeeFAQwebpageandthedumpfileC:\(...)\target\surefire-reports\2019-03-20T18-57-17_082-jvmRun4.dumpstreamFAQ页面指出了一些可能的原因,但我不知道如何使用这些信息来开始解决这个问题:CorruptedSTDOUTbydirectlywritingtonativestre