Consider this another vote for a possible switch to using SLF4j as the Resin logging interface. It's a very thin API that is an extremely powerful aggregator of log information. (*Chris*)
On Fri, Apr 2, 2010 at 12:57 PM, Jeff Schnitzer <[email protected]> wrote: > I'm pretty sure that it's possible to configure any possible > combination of input loggers and output destinations by mixing and > matching the various components of SLF4J. > > To get log4j output to java.util.logging, you could use the > log4j->slf4j bridge, then use the slf4j output module that dumps to > java.util.logging. There's no configuration, you just pick which jar > files you include in your project. In this case it would be: > > slf4j-X.X.X.jar (the base jar) > log4j-over-slf4j-X.X.X.jar (the bridge) > slf4j-jdk14-X.X.X.jar (the output module) > > Just add these jars to your project (leave out the log4j jar) and I'm > pretty sure that you'll find all log4j output sent to the resin > logger. > > Jeff > > On Fri, Apr 2, 2010 at 12:43 PM, Scott Ferguson <[email protected]> wrote: > > Jon Stevens wrote: > >> I use this class to do JDK-> commons-logging (which could either be > >> modified to go directly to log4j or, just through CL and then to > log4j)... > > I think he needs the other way around, from log4j to java.util.logging > (?) > > > > By the way, in Resin 4.0.6 you'll be able to do the same thing with > > > > <resin xmlns="..."> > > > > <system> > > <logger name="" level=""> > > <mypkg:JDKLogHandler xmlns="urn:java:org.mycom.mypkg"> > > <level>all</level> > > </mypkg:JDKLogHandler> > > </logger> > > </system> > > > > I'm not sure setting the Logger level to "all" would be a good idea, > > though, because Logger.isLoggable() would always return true, which > > would harm performance somewhat. > > > > (The "<system>" is just to ensure it's configured in the system > > classloader context, since <resin> is a child of the system loader. And > > at some point I need to look into providing an adapter to log4j handlers > > so you can configure log4j handlers as a java.util.logging handler > > directly in Resin.) > > > > -- Scott > >> > >> import java.util.Map; > >> import java.util.concurrent.ConcurrentHashMap; > >> import java.util.logging.Handler; > >> import java.util.logging.Level; > >> import java.util.logging.LogManager; > >> import java.util.logging.LogRecord; > >> import java.util.logging.Logger; > >> > >> import org.apache.commons.logging.Log; > >> import org.apache.commons.logging.LogFactory; > >> > >> /** > >> * Writes JDK log messages to commons logging. > >> * > >> * @see "http://wiki.apache.org/myfaces/Trinidad_and_Common_Logging" > >> */ > >> public class JavaLoggingToCommonLoggingRedirector > >> { > >> static JDKLogHandler activeHandler; > >> > >> /** > >> * Activates this feature. > >> */ > >> public static void activate() > >> { > >> try > >> { > >> Logger rootLogger = LogManager.getLogManager().getLogger(""); > >> // remove old handlers > >> for (Handler handler : rootLogger.getHandlers()) > >> { > >> rootLogger.removeHandler(handler); > >> } > >> // add our own > >> activeHandler = new JDKLogHandler(); > >> activeHandler.setLevel(Level.ALL); > >> rootLogger.addHandler(activeHandler); > >> rootLogger.setLevel(Level.ALL); > >> // done, let's check it right away!!! > >> > >> > Logger.getLogger(JavaLoggingToCommonLoggingRedirector.class.getName()).info( > >> "activated: sending JDK log messages to Commons Logging"); > >> } > >> catch (Exception exc) > >> { > >> > LogFactory.getLog(JavaLoggingToCommonLoggingRedirector.class).error("activation > >> failed", exc); > >> } > >> } > >> > >> public static void deactivate() > >> { > >> Logger rootLogger = LogManager.getLogManager().getLogger(""); > >> rootLogger.removeHandler(activeHandler); > >> > >> > Logger.getLogger(JavaLoggingToCommonLoggingRedirector.class.getName()).info("dactivated"); > >> } > >> > >> protected static class JDKLogHandler extends Handler > >> { > >> private Map<String, Log> cachedLogs = new ConcurrentHashMap<String, > >> Log>(); > >> > >> private Log getLog(String logName) > >> { > >> Log log = this.cachedLogs.get(logName); > >> if (log == null) > >> { > >> log = LogFactory.getLog(logName); > >> this.cachedLogs.put(logName, log); > >> } > >> return log; > >> } > >> > >> @Override > >> public void publish(LogRecord record) > >> { > >> Log log = this.getLog(record.getLoggerName()); > >> String message = record.getMessage(); > >> Throwable exception = record.getThrown(); > >> Level level = record.getLevel(); > >> if (level == Level.SEVERE) > >> { > >> log.error(message, exception); > >> } > >> else if (level == Level.WARNING) > >> { > >> log.warn(message, exception); > >> } > >> else if (level == Level.INFO) > >> { > >> log.info <http://log.info>(message, exception); > >> } > >> else if (level == Level.CONFIG) > >> { > >> log.debug(message, exception); > >> } > >> else > >> { > >> log.trace(message, exception); > >> } > >> } > >> > >> @Override > >> public void flush() > >> { > >> // nothing to do > >> } > >> > >> @Override > >> public void close() > >> { > >> // nothing to do > >> } > >> } > >> } > >> > >> On Fri, Apr 2, 2010 at 12:14 PM, Scott Ferguson <[email protected] > >> <mailto:[email protected]>> wrote: > >> > >> Stargazer wrote: > >> > If I have an entry in log4j.properties like this > >> > > >> > log4j.rootCategory=DEBUG, Console, R > >> > log4j.appender.R=org.apache.log4j.RollingFileAppender > >> > log4j.appender.R.File=log/mywebapp.log > >> > ... > >> > > >> > the logs from the webapp appear in $RESIN_HOME/log. Is there an > >> entry I > >> > can use to get them to appear in the webapps WEB-INF/log without > >> having > >> > to hard code the path please? > >> > > >> I'm not as familiar with log4j as I should be. Is there a > >> configuration > >> to send the results to java.util.logging? All of Resin's logging is > >> built around the JDK's logging system. > >> > >> -- Scott > >> > > >> > > >> > _______________________________________________ > >> > resin-interest mailing list > >> > [email protected] <mailto:[email protected]> > >> > http://maillist.caucho.com/mailman/listinfo/resin-interest > >> > > >> > > >> > >> > >> > >> _______________________________________________ > >> resin-interest mailing list > >> [email protected] <mailto:[email protected]> > >> http://maillist.caucho.com/mailman/listinfo/resin-interest > >> > >> > >> ------------------------------------------------------------------------ > >> > >> _______________________________________________ > >> resin-interest mailing list > >> [email protected] > >> http://maillist.caucho.com/mailman/listinfo/resin-interest > >> > > > > > > > > _______________________________________________ > > resin-interest mailing list > > [email protected] > > http://maillist.caucho.com/mailman/listinfo/resin-interest > > > > > _______________________________________________ > resin-interest mailing list > [email protected] > http://maillist.caucho.com/mailman/listinfo/resin-interest >
_______________________________________________ resin-interest mailing list [email protected] http://maillist.caucho.com/mailman/listinfo/resin-interest
