Why would you want Resin to log through slf4j? I actually think this would make a really big mess out of our apps, because now the slf4j jars would be provided for us and potentially cause conflicts.
Resin provides a concrete logging system (in this case, j.u.l). We write our code using slf4j and by using the slf4j-jdk14.jar adapter, everything just works. This seems pretty straightforward. I'd hate to have to configure the slf4j logging in the container. Jeff On Fri, Apr 2, 2010 at 1:13 PM, Chris Pratt <thechrispr...@gmail.com> wrote: > 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 <j...@infohazard.org> 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 <f...@caucho.com> 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 <f...@caucho.com >> >> <mailto:f...@caucho.com>> 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 >> >> > resin-interest@caucho.com <mailto:resin-interest@caucho.com> >> >> > http://maillist.caucho.com/mailman/listinfo/resin-interest >> >> > >> >> > >> >> >> >> >> >> >> >> _______________________________________________ >> >> resin-interest mailing list >> >> resin-interest@caucho.com <mailto:resin-interest@caucho.com> >> >> http://maillist.caucho.com/mailman/listinfo/resin-interest >> >> >> >> >> >> >> >> ------------------------------------------------------------------------ >> >> >> >> _______________________________________________ >> >> resin-interest mailing list >> >> resin-interest@caucho.com >> >> http://maillist.caucho.com/mailman/listinfo/resin-interest >> >> >> > >> > >> > >> > _______________________________________________ >> > resin-interest mailing list >> > resin-interest@caucho.com >> > http://maillist.caucho.com/mailman/listinfo/resin-interest >> > >> >> >> _______________________________________________ >> resin-interest mailing list >> resin-interest@caucho.com >> http://maillist.caucho.com/mailman/listinfo/resin-interest > > > _______________________________________________ > resin-interest mailing list > resin-interest@caucho.com > http://maillist.caucho.com/mailman/listinfo/resin-interest > > _______________________________________________ resin-interest mailing list resin-interest@caucho.com http://maillist.caucho.com/mailman/listinfo/resin-interest