Java 在控制台上打印System.out.println语句,同时执行jar并将其输出重定向到文件

Java 在控制台上打印System.out.println语句,同时执行jar并将其输出重定向到文件,java,Java,我有一个小java程序,它要求用户输入两个日期。我想把整个程序打包成一个jar文件。当我试图通过命令行执行jar文件并将输出重定向到日志文件时(如:java-jar Sample.jar>>Sample.log),所有System.out.println语句和日志语句都打印到外部文件,而不是控制台上。我希望看到控制台上打印的System.out.println语句和外部文件中的log4j日志语句,即使用户将输出重定向到日志文件。请注意,我已将log4j appender设置为“Console”。

我有一个小java程序,它要求用户输入两个日期。我想把整个程序打包成一个jar文件。当我试图通过命令行执行jar文件并将输出重定向到日志文件时(如:
java-jar Sample.jar>>Sample.log
),所有
System.out.println
语句和日志语句都打印到外部文件,而不是控制台上。我希望看到控制台上打印的
System.out.println
语句和外部文件中的log4j日志语句,即使用户将输出重定向到日志文件。请注意,我已将log4j appender设置为“Console”。你知道怎么做吗

示例程序如下所示:

public class Sample {

public static void main(String[] arg) {
        logger.debug("start of the main method");
        Scanner in = new Scanner(System.in);
        System.out.println("Please enter start date in the format YYYY-MM-DD");
        String startDate = in.nextLine();
        logger.debug("The entered start date is " + startDate);
        System.out.println("Please enter end date in the format YYYY-MM-DD");
        logger.debug("The entered end date is " + endDate);

    }
}

您可以使用中描述的方法代替
>
。因此,不是:

java-jar Sample.jar>>Sample.log

。。。你可以做:

java-jar Sample.jar | tee-a Sample.log

对于Windows,您可以尝试使用以下内容: 或

tee
可以使用Windows PowerShell访问。这可以从“开始”菜单打开


即使用户将输出重定向到日志文件,如果用户在运行您的程序时决定重定向控制台输出,对您有什么影响?@Abra Yep,这对我来说很有意义,因为应该要求用户自己在控制台上输入日期。日期应该以任何方式输入到控制台上,而不是文件中。我相信重定向标准输出和重定向标准输入之间是有区别的。当我编写需要用户输入的java应用程序时,我通常会提供一个GUI。
tee
在默认情况下不可用。我已经链接了一些与Windows相关的其他答案。您的答案帮助我进一步研究了这个问题。我将用我的发现编辑你的答案。再加上一个答案。可以使用Windows PowerShell访问Thankstee。这可以从“开始”菜单打开。