8

Probably this thread is a duplicate but can someone guide? I want to write the java program output to console and file at the same time. I know that i can send output to console with this piece of code

    PrintStream orgStdout = null;
    PrintStream fileStdout = null;

    orgStdout = System.out;
    try {
        fileStdout = new PrintStream(new FileOutputStream("C:\\testlogger.txt"));
        System.setOut(fileStdout);
        System.out.println("==============");
        for (int i = 0; i < 10; i++){
            System.out.println("" + i);
        }
        System.out.println("==============");
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

but how to keep output on console and on file as well??

P.S: not looking for an option where i output in file and display it console in different thread.

Community
  • 1
  • 1
x.509
  • 2,205
  • 10
  • 44
  • 58

3 Answers3

7

Look for TeeOutputStream from Apache Commons IO.

kervin
  • 11,672
  • 5
  • 42
  • 59
Rom1
  • 3,167
  • 2
  • 22
  • 39
2

Don't call System.setOut(), and just make two calls to print. It's not very elegant, but you could make a method that outputs to both.

PrintStream orgStdout = null;
PrintStream fileStdout = null;

orgStdout = System.out;
try {
    fileStdout = new PrintStream(new FileOutputStream("C:\\testlogger.txt"));
    System.out.println("==============");
    for (int i = 0; i < 10; i++){
        System.out.println("" + i);
        fileStdout.println("" + i);
    }
    System.out.println("==============");
    fileStdout.println("" + i);
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

If you're running on a unix box, you could also use the tee command as long as everything is printed to stdout. You'd run your program like this:

java MyClass | tee testlogger.txt

Then everything printed to stdout goes to both the file and console.

lazycs
  • 1,586
  • 1
  • 13
  • 11
0

when you run your program

java {flags to the JVM} ClassName {parameters to your class} > output.txt 2> error.txt