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

Reply via email to