System.out leads the output to the standard output stream (normally mapped to the console screen). System.err leads the output to the standard error stream (and, by default to the console). The idea behind having these two is that the standard output should be used for regular program output, and standard error should be used for error messages. Depend how to load a java program the error stream is not printed on console.
Both the streams can be redirected to different destinations. If it is desired to redirect the output to an output file and error messages to a different log file, than on UNIX it can be done as follows:
java MyClass > output.log 2>error.log
This causes the regular output (using System.out) to be stored in output.log and error messages (using System.err) to be stored in error.log.
Another option is in your code redirect the outputs:
PrintStream outStream = new PrintStream(new File("outFile.txt"));
System.setOut(outStream);
System.out.println("This is a baeldung article");
And in case of System.err:
PrintStream errStream = new PrintStream(new File("errFile.txt"));
System.setErr(errStream);
System.err.println("This is a baeldung article error");
The System.out and System.err is not a better solution to check this, I suggest to add a logger like SL4J to log this in appropriate file or output.