
Author: seb Date: Wed Dec 13 14:27:05 2006 New Revision: 1078 Added: logback/trunk/log4j-bridge/ (props changed) logback/trunk/log4j-bridge/pom.xml logback/trunk/log4j-bridge/src/ logback/trunk/log4j-bridge/src/main/ logback/trunk/log4j-bridge/src/main/java/ logback/trunk/log4j-bridge/src/main/java/org/ logback/trunk/log4j-bridge/src/main/java/org/apache/ logback/trunk/log4j-bridge/src/main/java/org/apache/log4j/ logback/trunk/log4j-bridge/src/main/java/org/apache/log4j/Category.java logback/trunk/log4j-bridge/src/main/java/org/apache/log4j/Level.java logback/trunk/log4j-bridge/src/main/java/org/apache/log4j/Log4jLoggerFactory.java logback/trunk/log4j-bridge/src/main/java/org/apache/log4j/Logger.java logback/trunk/log4j-bridge/src/main/java/org/apache/log4j/Priority.java logback/trunk/log4j-bridge/src/main/java/org/apache/log4j/package.html logback/trunk/log4j-bridge/src/test/ logback/trunk/log4j-bridge/src/test/java/ logback/trunk/log4j-bridge/src/test/java/org/ logback/trunk/log4j-bridge/src/test/java/org/apache/ logback/trunk/log4j-bridge/src/test/java/org/apache/log4j/ logback/trunk/log4j-bridge/src/test/java/org/apache/log4j/InvokeLog4jTest.java Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/Logger.java logback/trunk/pom.xml Log: Added a log4j bridge module Added: logback/trunk/log4j-bridge/pom.xml ============================================================================== --- (empty file) +++ logback/trunk/log4j-bridge/pom.xml Wed Dec 13 14:27:05 2006 @@ -0,0 +1,40 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <parent> + <groupId>ch.qos.logback</groupId> + <artifactId>logback-parent</artifactId> + <version>0.7-SNAPSHOT</version> + </parent> + + <modelVersion>4.0.0</modelVersion> + + <groupId>ch.qos.logback</groupId> + <artifactId>log4j-bridge</artifactId> + <version>0.7-SNAPSHOT</version> + <packaging>jar</packaging> + <name>Log4j Bridge Module</name> + + <url>http://logback.qos.ch</url> + <description> + <!-- + Never _never_ let Eclipse's auto format function add + a line return in the description. + The generated jar will contain a corrupt MANIFEST file. + --> + Logback: the generic, reliable, fast and flexible logging library for Java. + </description> + <licenses> + <license> + <name>Apache Software Licenses</name> + <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url> + </license> + </licenses> + + <dependencies> + <dependency> + <groupId>ch.qos.logback</groupId> + <artifactId>logback-classic</artifactId> + </dependency> + </dependencies> + +</project> \ No newline at end of file Added: logback/trunk/log4j-bridge/src/main/java/org/apache/log4j/Category.java ============================================================================== --- (empty file) +++ logback/trunk/log4j-bridge/src/main/java/org/apache/log4j/Category.java Wed Dec 13 14:27:05 2006 @@ -0,0 +1,242 @@ +/* + * Copyright 2001-2004 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.log4j; + +import org.slf4j.LoggerFactory; +import org.slf4j.Marker; +import org.slf4j.MarkerFactory; + +/** + * <p> + * This class is a minimal implementation of the origianl + * org.apache.log4j.Logger class delegating all calls to a + * {@link org.slf4j.Logger} instance, which in turn will delegate to a final + * logging system chosen by the user.. + * </p> + * + * <p> + * Log4j's <code>debug()</code>, <code>info()</code>, <code>warn()</code>, + * <code>error()</code> printing methods are directly mapped to their SLF4J + * equivalents. Log4j's <code>trace()</code> printing method is mapped to + * SLF4J's <code>debug()</code> method with a TRACE marker. Log4j's + * <code>fatal()</code> printing method is mapped to SLF4J's + * <code>error()</code> method with a FATAL marker. + * + * @author Sébastien Pennec + * @author Ceki Gülcü + */ + +public class Category { + + private String name; + + private ch.qos.logback.classic.Logger lbLogger; + + private static Marker TRACE_MARKER = MarkerFactory.getMarker("TRACE"); + private static Marker FATAL_MARKER = MarkerFactory.getMarker("FATAL"); + + Category(String name) { + this.name = name; + lbLogger = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(name); + } + + public static Logger getLogger(String name) { + return Log4jLoggerFactory.getLogger(name); + } + + public static Logger getLogger(Class clazz) { + return getLogger(clazz.getName()); + } + + /** + * Does the obvious. + * + * @return + */ + public static Logger getRootLogger() { + return getLogger("root"); + } + + /** + * Returns the obvious. + * + * @return + */ + public String getName() { + return name; + } + + /** + * Delegates to {@link org.slf4j.Logger#isDebugEnabled} method of the SLF4J + * API, in addition, the call is marked with a marker named "TRACE". + */ + public boolean isTraceEnabled() { + return lbLogger.isDebugEnabled(TRACE_MARKER); + } + + /** + * Delegates to {@link org.slf4j.Logger#isDebugEnabled} method of the SLF4J + * API. + */ + public boolean isDebugEnabled() { + return lbLogger.isDebugEnabled(); + } + + /** + * Delegates to {@link org.slf4j.Logger#isInfoEnabled} method of the SLF4J + * API. + */ + public boolean isInfoEnabled() { + return lbLogger.isInfoEnabled(); + } + + /** + * Delegates to {@link org.slf4j.Logger#isWarnEnabled} method of the SLF4J + * API. + */ + public boolean isWarnEnabled() { + return lbLogger.isWarnEnabled(); + } + + /** + * Delegates to {@link org.slf4j.Logger#isErrorEnabled} method of the SLF4J + * API. + */ + public boolean isErrorEnabled() { + return lbLogger.isErrorEnabled(); + } + + /** + * Delegates to {@link org.slf4j.Logger#debug(String)} method of the SLF4J + * API, in addition, the call is marked with a marker named "TRACE". + */ + public void trace(Object message) { + lbLogger.debug(TRACE_MARKER, (String) message); + } + + /** + * Delegates to {@link org.slf4j.Logger#debug(String,Throwable)} method of the + * SLF4J API, in addition, the call is marked with a marker named "TRACE". + */ + public void trace(Object message, Throwable t) { + lbLogger.debug(TRACE_MARKER, (String) message, t); + } + + /** + * Delegates to {@link org.slf4j.Logger#debug(String)} method of the SLF4J + * API. + */ + public void debug(Object message) { + // casting to String as SLF4J only accepts String instances, not Object + // instances. + lbLogger.debug((String) message); + } + + /** + * Delegates to {@link org.slf4j.Logger#debug(String,Throwable)} method of the + * SLF4J API. + */ + public void debug(Object message, Throwable t) { + lbLogger.debug((String) message, t); + } + + /** + * Delegates to {@link org.slf4j.Logger#info(String)} method of the SLF4J API. + */ + public void info(Object message) { + lbLogger.info((String) message); + } + + /** + * Delegates to {@link org.slf4j.Logger#info(String, Throwable)} method of the + * SLF4J API. + */ + public void info(Object message, Throwable t) { + lbLogger.info((String) message, t); + } + + /** + * Delegates to {@link org.slf4j.Logger#warn(String)} method of the SLF4J API. + */ + public void warn(Object message) { + lbLogger.warn((String) message); + } + + /** + * Delegates to {@link org.slf4j.Logger#warn(String,Throwable)} method of the + * SLF4J API. + */ + public void warn(Object message, Throwable t) { + lbLogger.warn((String) message, t); + } + + /** + * Delegates to {@link org.slf4j.Logger#error(String)} method of the SLF4J + * API. + */ + public void error(Object message) { + lbLogger.error((String) message); + } + + /** + * Delegates to {@link org.slf4j.Logger#error(String,Throwable)} method of the + * SLF4J API. + */ + public void error(Object message, Throwable t) { + lbLogger.error((String) message, t); + } + + /** + * Delegates to {@link org.slf4j.Logger#error(String)} method of the SLF4J + * API, in addition, the call is marked with a marker named "FATAL". + */ + public void fatal(Object message) { + lbLogger.error(FATAL_MARKER, (String) message); + } + + /** + * Delegates to {@link org.slf4j.Logger#error(String,Throwable)} method of the + * SLF4J API, in addition, the call is marked with a marker named "FATAL". + */ + public void fatal(Object message, Throwable t) { + lbLogger.error(FATAL_MARKER, (String) message, t); + } + + public void log(String FQCN, Priority p, Object msg, Throwable t) { + ch.qos.logback.classic.Level level; + switch (p.level) { + case Priority.DEBUG_INT: + level = ch.qos.logback.classic.Level.DEBUG; + break; + case Priority.INFO_INT: + level = ch.qos.logback.classic.Level.INFO; + break; + case Priority.WARN_INT: + level = ch.qos.logback.classic.Level.WARN; + break; + case Priority.ERROR_INT: + level = ch.qos.logback.classic.Level.ERROR; + break; + case Priority.FATAL_INT: + level = ch.qos.logback.classic.Level.ERROR; + break; + default: + throw new IllegalStateException("Unknown Priority " + p); + } + lbLogger.filterAndLog(FQCN, null, level, msg.toString(), null, t); + } + +} Added: logback/trunk/log4j-bridge/src/main/java/org/apache/log4j/Level.java ============================================================================== --- (empty file) +++ logback/trunk/log4j-bridge/src/main/java/org/apache/log4j/Level.java Wed Dec 13 14:27:05 2006 @@ -0,0 +1,218 @@ +/* + * Copyright 1999-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Contributors: Kitching Simon <Simon.Kitching@orange.ch> +// Nicholas Wolff + +package org.apache.log4j; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.ObjectStreamException; +import java.io.Serializable; + +/** + Defines the minimum set of levels recognized by the system, that is + <code>OFF</code>, <code>FATAL</code>, <code>ERROR</code>, + <code>WARN</code>, <code>INFO</code, <code>DEBUG</code> and + <code>ALL</code>. + + <p>The <code>Level</code> class may be subclassed to define a larger + level set. + + @author Ceki Gülcü + + */ +public class Level extends Priority implements Serializable { + + /** + * TRACE level integer value. + * @since 1.2.12 + */ + public static final int TRACE_INT = 5000; + + /** + The <code>OFF</code> has the highest possible rank and is + intended to turn off logging. */ + final static public Level OFF = new Level(OFF_INT, "OFF", 0); + + /** + The <code>FATAL</code> level designates very severe error + events that will presumably lead the application to abort. + */ + final static public Level FATAL = new Level(FATAL_INT, "FATAL", 0); + + /** + The <code>ERROR</code> level designates error events that + might still allow the application to continue running. */ + final static public Level ERROR = new Level(ERROR_INT, "ERROR", 3); + + /** + The <code>WARN</code> level designates potentially harmful situations. + */ + final static public Level WARN = new Level(WARN_INT, "WARN", 4); + + /** + The <code>INFO</code> level designates informational messages + that highlight the progress of the application at coarse-grained + level. */ + final static public Level INFO = new Level(INFO_INT, "INFO", 6); + + /** + The <code>DEBUG</code> Level designates fine-grained + informational events that are most useful to debug an + application. */ + final static public Level DEBUG = new Level(DEBUG_INT, "DEBUG", 7); + + /** + * The <code>TRACE</code> Level designates finer-grained + * informational events than the <code>DEBUG</code level. + * @since 1.2.12 + */ + public static final Level TRACE = new Level(TRACE_INT, "TRACE", 7); + + + /** + The <code>ALL</code> has the lowest possible rank and is intended to + turn on all logging. */ + final static public Level ALL = new Level(ALL_INT, "ALL", 7); + + /** + * Serialization version id. + */ + static final long serialVersionUID = 3491141966387921974L; + + /** + Instantiate a Level object. + */ + protected + Level(int level, String levelStr, int syslogEquivalent) { + super(level, levelStr, syslogEquivalent); + } + + + /** + Convert the string passed as argument to a level. If the + conversion fails, then this method returns {@link #DEBUG}. + */ + public + static + Level toLevel(String sArg) { + return (Level) toLevel(sArg, Level.DEBUG); + } + + /** + Convert an integer passed as argument to a level. If the + conversion fails, then this method returns {@link #DEBUG}. + + */ + public + static + Level toLevel(int val) { + return (Level) toLevel(val, Level.DEBUG); + } + + /** + Convert an integer passed as argument to a level. If the + conversion fails, then this method returns the specified default. + */ + public + static + Level toLevel(int val, Level defaultLevel) { + switch(val) { + case ALL_INT: return ALL; + case DEBUG_INT: return Level.DEBUG; + case INFO_INT: return Level.INFO; + case WARN_INT: return Level.WARN; + case ERROR_INT: return Level.ERROR; + case FATAL_INT: return Level.FATAL; + case OFF_INT: return OFF; + case TRACE_INT: return Level.TRACE; + default: return defaultLevel; + } + } + + /** + Convert the string passed as argument to a level. If the + conversion fails, then this method returns the value of + <code>defaultLevel</code>. + */ + public + static + Level toLevel(String sArg, Level defaultLevel) { + if(sArg == null) + return defaultLevel; + + String s = sArg.toUpperCase(); + + if(s.equals("ALL")) return Level.ALL; + if(s.equals("DEBUG")) return Level.DEBUG; + if(s.equals("INFO")) return Level.INFO; + if(s.equals("WARN")) return Level.WARN; + if(s.equals("ERROR")) return Level.ERROR; + if(s.equals("FATAL")) return Level.FATAL; + if(s.equals("OFF")) return Level.OFF; + if(s.equals("TRACE")) return Level.TRACE; + return defaultLevel; + } + + /** + * Custom deserialization of Level. + * @param s serialization stream. + * @throws IOException if IO exception. + * @throws ClassNotFoundException if class not found. + */ + private void readObject(final ObjectInputStream s) throws IOException, ClassNotFoundException { + s.defaultReadObject(); + level = s.readInt(); + syslogEquivalent = s.readInt(); + levelStr = s.readUTF(); + if (levelStr == null) { + levelStr = ""; + } + } + + /** + * Serialize level. + * @param s serialization stream. + * @throws IOException if exception during serialization. + */ + private void writeObject(final ObjectOutputStream s) throws IOException { + s.defaultWriteObject(); + s.writeInt(level); + s.writeInt(syslogEquivalent); + s.writeUTF(levelStr); + } + + /** + * Resolved deserialized level to one of the stock instances. + * May be overriden in classes derived from Level. + * @return resolved object. + * @throws ObjectStreamException if exception during resolution. + */ + private Object readResolve() throws ObjectStreamException { + // + // if the deserizalized object is exactly an instance of Level + // + if (getClass() == Level.class) { + return toLevel(level); + } + // + // extension of Level can't substitute stock item + // + return this; + } +} \ No newline at end of file Added: logback/trunk/log4j-bridge/src/main/java/org/apache/log4j/Log4jLoggerFactory.java ============================================================================== --- (empty file) +++ logback/trunk/log4j-bridge/src/main/java/org/apache/log4j/Log4jLoggerFactory.java Wed Dec 13 14:27:05 2006 @@ -0,0 +1,45 @@ +/* + * Copyright 2001-2004 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.log4j; + +import java.util.Hashtable; + +/** + * This class is a factory that creates and maintains org.apache.log4j.Loggers + * warpping org.slf4j.Loggers. + * + * It keeps a hashtable of all created org.apache.log4j.Logger instances so that + * all newly created instances are not dulpicates of existing loggers. + * + * @author Sébastien Pennec + */ +class Log4jLoggerFactory { + + private static Hashtable log4jLoggers = new Hashtable(); + + public static synchronized Logger getLogger(String name) { + if (log4jLoggers.containsKey(name)) { + return (org.apache.log4j.Logger) log4jLoggers.get(name); + } else { + Logger log4jLogger = new Logger(name); + + log4jLoggers.put(name, log4jLogger); + return log4jLogger; + } + } + +} Added: logback/trunk/log4j-bridge/src/main/java/org/apache/log4j/Logger.java ============================================================================== --- (empty file) +++ logback/trunk/log4j-bridge/src/main/java/org/apache/log4j/Logger.java Wed Dec 13 14:27:05 2006 @@ -0,0 +1,25 @@ +/* + * Copyright 2001-2004 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.log4j; + +public class Logger extends Category { + + Logger(String name) { + super(name); + } + +} Added: logback/trunk/log4j-bridge/src/main/java/org/apache/log4j/Priority.java ============================================================================== --- (empty file) +++ logback/trunk/log4j-bridge/src/main/java/org/apache/log4j/Priority.java Wed Dec 13 14:27:05 2006 @@ -0,0 +1,192 @@ +/* + * Copyright 1999-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Contributors: Kitching Simon <Simon.Kitching@orange.ch> + +package org.apache.log4j; + +/** + <font color="#AA4444">Refrain from using this class directly, use + the {@link Level} class instead</font>. + + @author Ceki Gülcü */ +public class Priority { + + transient int level; + transient String levelStr; + transient int syslogEquivalent; + + public final static int OFF_INT = Integer.MAX_VALUE; + public final static int FATAL_INT = 50000; + public final static int ERROR_INT = 40000; + public final static int WARN_INT = 30000; + public final static int INFO_INT = 20000; + public final static int DEBUG_INT = 10000; + //public final static int FINE_INT = DEBUG_INT; + public final static int ALL_INT = Integer.MIN_VALUE; + + /** + * @deprecated Use {@link Level#FATAL} instead. + */ + final static public Priority FATAL = new Level(FATAL_INT, "FATAL", 0); + + /** + * @deprecated Use {@link Level#ERROR} instead. + */ + final static public Priority ERROR = new Level(ERROR_INT, "ERROR", 3); + + /** + * @deprecated Use {@link Level#WARN} instead. + */ + final static public Priority WARN = new Level(WARN_INT, "WARN", 4); + + /** + * @deprecated Use {@link Level#INFO} instead. + */ + final static public Priority INFO = new Level(INFO_INT, "INFO", 6); + + /** + * @deprecated Use {@link Level#DEBUG} instead. + */ + final static public Priority DEBUG = new Level(DEBUG_INT, "DEBUG", 7); + + + /** + * Default constructor for deserialization. + */ + protected Priority() { + level = DEBUG_INT; + levelStr = "DEBUG"; + syslogEquivalent = 7; + } + + /** + Instantiate a level object. + */ + protected + Priority(int level, String levelStr, int syslogEquivalent) { + this.level = level; + this.levelStr = levelStr; + this.syslogEquivalent = syslogEquivalent; + } + + /** + Two priorities are equal if their level fields are equal. + @since 1.2 + */ + public + boolean equals(Object o) { + if(o instanceof Priority) { + Priority r = (Priority) o; + return (this.level == r.level); + } else { + return false; + } + } + + /** + Return the syslog equivalent of this priority as an integer. + */ + public + final + int getSyslogEquivalent() { + return syslogEquivalent; + } + + + + /** + Returns <code>true</code> if this level has a higher or equal + level than the level passed as argument, <code>false</code> + otherwise. + + <p>You should think twice before overriding the default + implementation of <code>isGreaterOrEqual</code> method. + + */ + public + boolean isGreaterOrEqual(Priority r) { + return level >= r.level; + } + + /** + Return all possible priorities as an array of Level objects in + descending order. + + @deprecated This method will be removed with no replacement. + */ + public + static + Priority[] getAllPossiblePriorities() { + return new Priority[] {Priority.FATAL, Priority.ERROR, Level.WARN, + Priority.INFO, Priority.DEBUG}; + } + + + /** + Returns the string representation of this priority. + */ + final + public + String toString() { + return levelStr; + } + + /** + Returns the integer representation of this level. + */ + public + final + int toInt() { + return level; + } + + /** + * @deprecated Please use the {@link Level#toLevel(String)} method instead. + */ + public + static + Priority toPriority(String sArg) { + return Level.toLevel(sArg); + } + + /** + * @deprecated Please use the {@link Level#toLevel(int)} method instead. + */ + public + static + Priority toPriority(int val) { + return toPriority(val, Priority.DEBUG); + } + + /** + * @deprecated Please use the {@link Level#toLevel(int, Level)} method instead. + */ + public + static + Priority toPriority(int val, Priority defaultPriority) { + return Level.toLevel(val, (Level) defaultPriority); + } + + /** + * @deprecated Please use the {@link Level#toLevel(String, Level)} method instead. + */ + public + static + Priority toPriority(String sArg, Priority defaultPriority) { + return Level.toLevel(sArg, (Level) defaultPriority); + } +} \ No newline at end of file Added: logback/trunk/log4j-bridge/src/main/java/org/apache/log4j/package.html ============================================================================== --- (empty file) +++ logback/trunk/log4j-bridge/src/main/java/org/apache/log4j/package.html Wed Dec 13 14:27:05 2006 @@ -0,0 +1,18 @@ +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> + + +<html> + <head> + <title></title> + </head> + + + <body> + + <p>An rather minimal but sufficient implementation redirecting all + calls to a log4j logger to a logback logger.</p> + + </body> +</html> + + Added: logback/trunk/log4j-bridge/src/test/java/org/apache/log4j/InvokeLog4jTest.java ============================================================================== --- (empty file) +++ logback/trunk/log4j-bridge/src/test/java/org/apache/log4j/InvokeLog4jTest.java Wed Dec 13 14:27:05 2006 @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2004-2006 SLF4J.ORG + * Copyright (c) 2004-2006 QOS.ch + * + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY + * SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER + * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF + * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. + * + */ + + +package org.apache.log4j; + +import junit.framework.TestCase; + +/** + * A class that tests the invocation of the org.apache.log4j.Logger class + * that belongs to the log4j-bridge package + * + * @author Sébastien Pennec + * @author Ceki Gülcü + */ +public class InvokeLog4jTest extends TestCase { + + public void testIsEnabledAPI() { + // assume that we are running over slf4j-simple + Logger log = Logger.getLogger(InvokeLog4jTest.class.getName()); + + assertTrue(log.isTraceEnabled()); + assertTrue(log.isDebugEnabled()); + assertTrue(log.isInfoEnabled()); + assertTrue(log.isWarnEnabled()); + assertTrue(log.isErrorEnabled()); + } + + public void testPrintAPI() { + Logger log = Logger.getLogger(InvokeLog4jTest.class.getName()); + Exception e = new Exception("just testing"); + + log.debug(null); + log.debug("debug message"); + + log.info(null); + log.info("info message"); + + log.warn(null); + log.warn("warn message"); + + log.error(null); + log.error("error message"); + + log.debug(null, e); + log.debug("debug message", e); + + log.info(null, e); + log.info("info message", e); + + log.warn(null, e); + log.warn("warn message", e); + + log.error(null, e); + log.error("error message", e); + } +} Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/Logger.java ============================================================================== --- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/Logger.java (original) +++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/Logger.java Wed Dec 13 14:27:05 2006 @@ -404,7 +404,8 @@ filterAndLog(marker, Level.DEBUG, msg, null, null); } - final void filterAndLog(final Marker marker, final Level level, final String msg, final Object[] params, + + public final void filterAndLog(final String localFQCN, final Marker marker, final Level level, final String msg, final Object[] params, final Throwable t) { final FilterReply decision = loggerContext.getTurboFilterChainDecision(marker, this, Level.DEBUG, msg, params, t); @@ -417,9 +418,16 @@ return; } - LoggingEvent le = new LoggingEvent(FQCN, this, level, msg, t, params); + LoggingEvent le = new LoggingEvent(localFQCN, this, level, msg, t, params); le.setMarker(marker); callAppenders(le); + + } + + + final void filterAndLog(final Marker marker, final Level level, final String msg, final Object[] params, + final Throwable t) { + filterAndLog(FQCN, marker, level, msg, params, t); } public void debug(Marker marker, String format, Object arg) { Modified: logback/trunk/pom.xml ============================================================================== --- logback/trunk/pom.xml (original) +++ logback/trunk/pom.xml Wed Dec 13 14:27:05 2006 @@ -24,6 +24,7 @@ <module>logback-site</module> <module>logback-skin</module> <module>logback-examples</module> + <module>log4j-bridge</module> </modules> <dependencies> @@ -129,6 +130,14 @@ </extension> </extensions> <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <configuration> + <source>1.5</source> + <target>1.5</target> + </configuration> + </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId>