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

Reply via email to