我想从批处理文件启动我的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调用另一个批处理文件来修复它,但我希望能有更优雅的答案。
答案 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)
听起来您想要在不实际显示控制台的情况下记录控制台输出。我可以看到三种做类似事情的方法:
最小化启动控制台,这样就不那么烦人了。您可以通过创建批处理文件的快捷方式,然后设置快捷方式的属性来在最小化窗口中运行批处理文件,而不是使用默认设置“普通窗口”。
创建一个脚本以在隐藏窗口中运行bat文件,如下所示:http://gallery.technet.microsoft.com/ScriptCenter/en-us/8bbed56f-a7aa-491f-a296-687dd96098a3
使用第三方工具,例如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