如何将javaw.exe控制台输出重定向到日志文件?

时间:2010-12-16 18:50:57

标签: java console log4j

我想从批处理文件启动我的Java程序。这是我想用来启动应用程序的脚本,但问题是我无法将控制台输出重定向到日志文件。任何人都可以提供任何提示,而无需编辑任何代码,并使用Java命令行选项或什么?

@echo off
set TASK=MyApp
TITLE %TASK%
start javaw.exe -cp .;Server.jar;Util.jar com.manage.Program %1 > log.log 2>&1
taskkill /T /FI "WINDOWTITLE eq %TASK%"

所以,上面的工作,实际上杀死了生成我的Swing应用程序的cmd窗口,但它没有记录任何日志文件,大概是因为“start”将进程从“>日志中分离出来。 log 2>& 1“arg?

我可以通过使用start调用另一个批处理文件来修复它,但我希望能有更优雅的答案。

11 个答案:

答案 0 :(得分:6)

据我所知,使用javaw将所有System.out.println(...)压缩到控制台。

因此,您的应用程序需要在内部实现日志记录。您可以使用包装类使用System.setOut(...)重定向输出以写入文件。然后你的包装类会调用你的其他类。

答案 1 :(得分:5)

有时您的webstart应用程序崩溃,您无法查看原因,因为控制台因崩溃而关闭。 使用JDK 1.6在Java webstart中启用控制台日志记录:

开始 - >运行...-> javaws -viewer 关闭Java Cache Viewer 高级标签 - >调试 选中“启用跟踪”和“启用日志记录”

现在可以在以下位置找到您的日志文件:

C:\ Documents and Settings \ USER \ Application Data \ Sun \ Java \ Deployment \ log

答案 2 :(得分:4)

听起来您想要在不实际显示控制台的情况下记录控制台输出。我可以看到三种做类似事情的方法:

  1. 最小化启动控制台,这样就不那么烦人了。您可以通过创建批处理文件的快捷方式,然后设置快捷方式的属性来在最小化窗口中运行批处理文件,而不是使用默认设置“普通窗口”。

  2. 创建一个脚本以在隐藏窗口中运行bat文件,如下所示:http://gallery.technet.microsoft.com/ScriptCenter/en-us/8bbed56f-a7aa-491f-a296-687dd96098a3

  3. 使用第三方工具,例如hstart。 (注意:根据djangofan,hstart不是为Java程序编写的,并没有真正起作用)

答案 3 :(得分:4)

它比你想象的更简单。

您只需要更改System.out

System.setOut(new PrintStream(new FileOutputStream("log.txt",true)));

就是这样!

祝你好运。

答案 4 :(得分:2)

我不明白你为什么要对Eugene Kuleshov发表评论,即使java.exe也不会这样做。

您必须小心重定向out和err输出流。 通常,在使用Java将数据发送到控制台输出时,“正常”控制台日志将发送到System.out,但错误将发送到System.err。 DOS cmd使用两个不同的流来处理它。 在这种情况下,您必须将错误流重定向到不同的文件,如

java.exe -cp .;Server.jar;Util.jar com.manage.Program %1 > log.log 2> err.log

或者您可以通过执行

将其合并到同一个文件中
java.exe -cp .;Server.jar;Util.jar com.manage.Program %1 > log.log 2>&1

使用start javaw命令时遇到同样的问题。 我们只在生产中使用它,并在测试台上使用上面的java.exe。

当然,最好的方法是不输出到控制台,这是最好的做法,但是谁在做这个? ;)

答案 5 :(得分:2)

这就是批处理文件中所需的全部内容

start / b javaw.exe -cp .; Server.jar; Util.jar com.manage.Program%1> log.log 2>& 1

不要在那里放置任何其他信息。退出程序后,请检查日志文件。

答案 6 :(得分:1)

您应该使用java.exe而不是javaw.exe

答案 7 :(得分:0)

cmd.exe something.bat > console_output.txt

我认为这会奏效。

答案 8 :(得分:0)

尝试这样的事情 JRE\bin\java -cp .;Server.jar;Util.jar com.manage.Program >>log.log 要么 JRE\bin\javaw -cp .;Server.jar;Util.jar com.manage.Program >>log.log

将上述内容保存为批处理文件并运行。

答案 9 :(得分:0)

以下代码对我来说非常合适,而不会在我的java应用程序中更改单行代码。

javaw -jar <jar_file>.jar >> <log_file>.log

对不起,我不允许对Vanchinathan的帖子发表评论,所以在这里发布答案。

答案 10 :(得分:0)

您可以在cmd上使用此命令行

C:\Program Files\Java\jdk1.8.0_151\bin>javaw -jar D:\ccr_notification\ccr-api-0. 0.1-SNAPSHOT.jar 2>&1 >D:\ccr_notification\output.log

参考  https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_redirection?view=powershell-6