Hi, messages from the click are being diverted to Log4j but I'm getting these messages in the console:
[Velocity] [info ] WebappLoader : initialization starting. [Velocity] [info ] WebappLoader : initialization complete. [Velocity] [info ] Velocimacro : autoload on : VM system will automatically reload global library macros I think another ClickLogger is being initialized for Velocity. I looked at the code but it seems a bit more complicated. Any ideas how to override that also? Muzaffer > -----Original Message----- > From: Ozakca, Muzaffer [mailto:[email protected]] > Sent: Thursday, December 11, 2008 11:30 AM > To: [email protected] > Subject: RE: Logging in 1.4.2 > > Thanks Bob, this is of great help! > > Muzaffer > > > -----Original Message----- > > From: Bob Schellink [mailto:[email protected]] > > Sent: Thursday, December 11, 2008 10:32 AM > > To: [email protected] > > Subject: Re: Logging in 1.4.2 > > > > 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); > > } > > } > > }
