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

Reply via email to