Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>We solved this problem by redirecting System.err before loading the configuration and checking if errors were logged to the stream:</p> <pre><code>class ConfigurationLoader { class Log4jConfigStderrStream extends ByteArrayOutputStream { private int lineCount; private StringBuilder output; private PrintStream underlying; public Log4jConfigStderrStream(PrintStream underlying) { this.lineCount = 0; this.output = new StringBuilder(""); this.underlying = underlying; } @Override public void flush() throws IOException { String[] buffer; synchronized (this) { buffer = this.toString().split("\n"); super.flush(); super.reset(); for (int i = 0; i &lt; buffer.length; i++) { String line = buffer[i].replace("\n", "").replace("\r", ""); if (line.length() &gt; 0) { this.lineCount++; this.output.append(line); this.output.append("\n"); } } } } public String getOutput() { return this.output.toString(); } public PrintStream getUnderlying() { return this.underlying; } public boolean hasErrors() { return this.lineCount == 0 ? false : true; } } private String output; public void flushOutput() { if (!"".equals(this.output)) System.err.print(this.output); } public boolean loadConfiguration(String filename) { Log4jConfigStderrStream confErr; confErr = new Log4jConfigStderrStream(System.err); System.setErr(new PrintStream(confErr, true)); LogManager.resetConfiguration(); DOMConfigurator.configure(filename); System.setErr(confErr.getUnderlying()); this.output = confErr.getOutput(); return !confErr.hasErrors(); } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload