Hi Muzaffer,

Ozakca, Muzaffer wrote:
I’m still using 1.4.2 at the moment and wondering if there is a simple way to change logging that is currently going to console. I guess, setting the mode to “production” would remove most all logging messages but I’m curious if there is a way to send log messages to a file. Would I need to override ClickLogger?


Yes you'll need to extend it and create a custom ClickServlet which overrides #createClickLogger to return the new logger.

Below is an example of how you could adapt to Java Logging (or Log4J).
Please make a note that if you upgrade to 1.5 you'll need to remove this custom logger and switch to either the new JdkLogService or Log4JLogService.



MyClickServlet.java

public class MyClickServlet extends ClickServlet {

  protected ClickLogger createClickLogger() {
    return new JdkClickLogger();
  }
}


JdkClickLogger.java

public class JdkClickLogger extends ClickLogger {

private Logger logger = Logger.getLogger(JdkClickLogger.class.getName());

    private Level level = Level.INFO;

    /** The level names. */
    private static final String[] LEVELS =
    { " [trace] ", " [debug] ", " [info ] ", " [warn ] ", " [error] " };

    public JdkClickLogger() {
    }

    public void log(int levelInt, String message, Throwable error) {

        Level newLevel = Level.INFO;

        switch(levelInt) {
            case 0:
                newLevel = Level.FINE;
                break;
            case 1:
                newLevel = Level.INFO;
                break;
            case 2:
                newLevel = Level.INFO;
                break;
            case 3:
                newLevel = Level.WARNING;
            case 4:
                newLevel = Level.SEVERE;
        }
        initLogLevels(newLevel);
        logger.log(level, message, error);
    }

    // Tricky bit with Java Logger. Need to init the new Log level
    private void initLogLevels(Level newLevel) {
        if(level.equals(newLevel)) {
            return;
        }
        level = newLevel;

        Logger rootLogger = Logger.getLogger("");
        rootLogger.setLevel(level);

        Handler[] handlers = rootLogger.getHandlers( );

        for (int i = 0; i < handlers.length; i++) {
            handlers[i].setLevel(level);
            //handlers[i].setLevel(Level.OFF);
        }
    }
}

Reply via email to