log4j2不登录子进程

问题描述:我有两个.jar程序,当它们分别运行时,它们都可以正确地写入日志文件。但是,当我运行一个程序并在该程序内部运行时,我使用命令行来运行第二个程序。第二个程序将不记录日志(它甚至不创建日志文件和目录)。然后,如果我使用bash脚本运行第一个程序,则两个程序都不会记录日志。


我想知道为什么会发生这种情况,以及在bash启动时如何使它们都记录日志。如果需要,请询问更多详细信息。提前谢谢你的帮助!


顺便说一句,如果您还有其他有关编码样式的建议,请这样做,因为我是初学者,并且喜欢学习更多。


系统环境:


Linux version 4.9.59-v7+ (dc4@dc4-XPS13-9333) (gcc version 4.9.3 (crosstool-NG crosstool-ng-1.22.0-88-g8460611) ) #1047 SMP Sun Oct 29 12:19:23 GMT 2017

我用来启动程序的bash脚本1:


cd {path_to_the_jar}

java -jar PROGRAM_PARENT.jar &

exit 0

我在程序1中用于启动程序2的代码段:


public static void startProgram(int index){


    //store the command line to start a new program.

    List<String> commandList = new ArrayList();

    commandList.add("java");

    commandList.add("-jar");

    commandList.add(CHILD_PROGRAM_NAME[index]); //the name of the child program


   

编辑:我想我已经解决了我的问题。这完全是因为我的日志文件的路径(以及我的粗心大意)。它包含${sys:user.home}所以当您用不同的用户执行jar文件时,它将存储到不同的文件夹中。不幸的是,当我分别执行它们时,我使用的是普通用户,但是当我一起运行它们时,我使用的是root用户。因此,我无法在该普通用户的文件夹中找到该日志。我想我应该关闭它,但是如果有人知道如何关闭它,我不确定该怎么做,请这样做或建议我。


互换的青春
浏览 251回答 1
1回答

紫衣仙女

问题已解决,我在问题末尾更新了结果。我将在这里再次引用。编辑:我想我已经解决了我的问题。这完全是因为我的日志文件的路径(以及我的粗心大意)。它包含$ {sys:user.home},因此当您以不同的用户执行jar文件时,它将存储到不同的文件夹中。不幸的是,当我分别执行它们时,我使用的是普通用户,但是当我一起运行它们时,我使用的是root用户。因此,我无法在该普通用户的文件夹中找到该日志。但是,关于我的代码,还需要添加一件事。如果需要监视多个子进程,则必须同时为ProcessBuilder和Process创建新实例。重复使用一个ProcessBuilder对象会引起一些问题。
打开App,查看更多内容
随时随地看视频慕课网APP