Search This Blog

Showing posts with label logging. Show all posts
Showing posts with label logging. Show all posts

Java util logging: configure root logger

    Logger rootLogger = Logger.getLogger("");
    Handler[] handlers = rootLogger.getHandlers();
    for (Handler h : handlers) {
        h.setLevel(level);
    }
    rootLogger.setLevel(level);

log4j2: conditional appender using routes

<?xml version="1.0"?>
<Configuration status="INFO">
  <Appenders>
    <Console name="SYS_OUT" target="SYSTEM_OUT" />
    <Console name="SYS_ERR" target="SYSTEM_ERR" />

    <Routing name="Router">
      <Routes pattern="$${env:STREAM_TO:-OUT}">
        <Route ref="SYS_OUT" key="OUT" />
        <Route ref="SYS_ERR" key="ERR" />
      </Routes>
    </Routing>
  </Appenders>

  <Loggers>
    <Root level="INFO">
      <AppenderRef ref="Router" />
    </Root>
  </Loggers>
</Configuration>

see also

Java: Stream Handler for Logger

        Logger logger = Logger.getLogger("daris-download");
        logger.setLevel(Level.ALL);
        logger.setUseParentHandlers(false);
        /*
         * file handler
         */
        FileHandler fileHandler = new FileHandler(
                "%h/.daris/daris-download.%g.log", 5000000, 2);
        fileHandler.setLevel(Level.ALL);
        fileHandler.setFormatter(new Formatter() {

            @Override
            public String format(LogRecord record) {
                StringBuilder sb = new StringBuilder();
                sb.append(new Date(record.getMillis())).append(" ");
                sb.append("[thread: ").append(record.getThreadID())
                        .append("] ");
                sb.append(record.getLevel().getName()).append(" ");
                sb.append(record.getMessage());
                sb.append("\n");
                return sb.toString();
            }
        });
        logger.addHandler(fileHandler);
        /*
         * console handler
         */
        StreamHandler consoleHandler = new StreamHandler(System.out,
                new Formatter() {
                    @Override
                    public String format(LogRecord record) {
                        return record.getMessage() + "\n";
                    }
                }) {
            @Override
            public synchronized void publish(LogRecord record) {
                super.publish(record);
                super.flush();
            }
        };
        consoleHandler.setLevel(Level.INFO);
        logger.addHandler(consoleHandler);

Java: low level logging messages not showing

FINE level logging message is not shown even if the handler.setLevel(Level.FINE).

Reason

java.util.logging has a root logger that defaults to Level.INFO, and a ConsoleHandler attached to it that also defaults to Level.INFO. Level.FINE is lower than Level.INFO, so fine messages are not displayed by default.

Solution

    Logger logger = Logger.getLogger("my-logger");
    logger.setLevel(Level.ALL);
    logger.setUseParentHandlers(false);
    /*
     * file handler
     */
    FileHandler fileHandler = new FileHandler(
                "%h/.my-app.%g.log", 5000000, 2);
    fileHandler.setLevel(Level.ALL);
    logger.addHandler(fileHandler);
    /*
     * console handler
     */
    ConsoleHandler consoleHandler = new ConsoleHandler();
    consoleHandler.setLevel(Level.INFO);
    logger.addHandler(consoleHandler);