You should be able to specify a custom Velocity logger through
velocity.properties.
Copy a velocity.properties file to your WEB-INF folder with the
following content:
runtime.log.logsystem.class = package.of.logger.JdkClickLogger
That should override the logger Click setup by default.
Does that work for you?
kind regards
bob
Ozakca, Muzaffer wrote:
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);
}
}
}