Hello, I'm an happy user of Log4J. I didn't understand if in new 1.6b version is avaible a "Priority Appender". I mean: an appender able to dispatch received messages to several destinations, one per each priority level. I already have developed classes to do that (one generic and one child, specific for files), which you find attached to this message, but still I have to develop the XML configuration part, which is very important for the context where I use them. If someone already has something alike, would be welcome ;-) Please, answer me privately too, not only in the mailing list, otherwise I could forget it... ;-) Greetings ================================================================= Marco Brandizi <[EMAIL PROTECTED]> WARNING: My email address is in "NO SPAM" form. To decode it, remove _NOSPAM_ . DO NOT REPLY TO THIS MESSAGE, unless you want back a "recipient not found" feedback :-)) ----------------------------------------------------------- PriorityAppender.java ------------------------------ import org.log4j.*; import org.log4j.spi.*; import java.util.HashMap; import java.util.Iterator; /** * (2000) Marco Brandizi * * This code is free and to be intended as covered by the principles stated in * GNU LGPL * * An appender used for associate an appender to each priority type, in the same * logging category, i.e.: You may send messages of cat C to C-errors.log * C-warn.logs, etc * */ public class PriorityAppender implements Appender { private HashMap appenders = new HashMap(); private String name = "PriorityAppender"; /** Adds an appender, associated to a priority, if p already had one, throws it away */ public void addAppender ( Priority p, Appender a ) { Appender old = (Appender) appenders.get ( p ); if ( old == a ) // Hey, it's the same! return; else if (old != null ) // Release the old one old.close(); else // Append new appenders.put (p, a); } /** null if p isn't correct */ public Appender getAppender ( Priority p ) { return (Appender) appenders.get (p); } /** Appenders are removed at end */ protected void removeAppenders () { Iterator iA = appenders.values().iterator(); Appender a; while ( iA.hasNext() ) ((Appender)iA.next()).close(); appenders = null; } /** Does nothing, I don't need them here... */ public void addFilter(Filter newFilter) { } /** Does nothing, I don't need them here... */ public void clearFilters() { } public void close() { removeAppenders(); } /** Switch the priority and forward to the proper appender */ public void doAppend(LoggingEvent event) { Appender a = getAppender ( event.priority ); a.doAppend(event); } /** Default is "PriorityAppender" */ public String getName() { return name; } /** Does nothing, I don't need them here... */ public void setErrorHandler(ErrorHandler errorHandler) { } /** Does nothing, I don't need them here... */ public void setLayout(Layout layout) { } public void setName(String name) { this.name = name; } /** FALSE! */ public boolean requiresLayout() { return false; } } ----------------------------------------------------------- PriorityFileAppender.java ------------------------------ import org.log4j.*; import org.log4j.spi.*; import java.util.HashMap; import java.util.Iterator; import java.io.IOException; /** * (2000) Marco Brandizi * * This code is free and to be intended as covered by the principles stated in * GNU LGPL * * It's like PriorityAppender, but specific for file appenders. * <P>Note: to assign different kind of appenders, start by this class, copyng its * code and redefining another one * (ex: public class PriorityRollingFileAppender extends PriorityAppender ...) */ public class PriorityFileAppender extends PriorityAppender { /** Adds a FileAppender for standard priorities ( err, warn, nfo, debug ), setting prefix + priority.getString().toLowerCase() + postfix as file name */ public PriorityFileAppender (Layout l, String prefix, String postfix, boolean append ) throws IOException { Priority[] prs = new Priority [] { Priority.ERROR, Priority.WARN, Priority.INFO, Priority.DEBUG }; for ( int i = 0; i < prs.length; i++ ) { Appender a = new FileAppender ( l, prefix + prs[i].toString().toLowerCase() + postfix, append); addAppender ( prs[i], a ); } } /** Create the appender, without appenders, to be set manually */ public PriorityFileAppender () throws IOException { } /** Adds a FileAppender for all priorities returned by Priority.getAllPossiblePriorities(), setting prefix + priority.getString().toLowerCase + postfix as file name */ public void addAllAppenders (Layout l, String prefix, String postfix, boolean append) throws IOException { Priority[] prs = Priority.getAllPossiblePriorities(); for ( int i = 0; i < prs.length; i++ ) { Appender a = new FileAppender ( l, prefix + prs[i].toString().toLowerCase() + postfix, append ); addAppender ( prs[i], a ); } } } ----------------------------------------------------------- testPriorityFileAppender.java ------------------------------ import org.log4j.*; import java.io.*; /** * (2000) Marco Brandizi * * This code is free and to be intended as covered by the principles stated in * GNU LGPL * * A test with PriorityFileAppender */ public class testPriorityFileAppender { public static void main(String[] args) { Category cat = Category.getRoot(); try { cat.addAppender( new PriorityFileAppender ( new PatternLayout( "%-5p [%t]: %m%n" ) , "/temp/testPri-", ".log", false ) ); cat.info ("Hello!"); for ( int i = 0; i < 10; i++ ) cat.warn("Doing the " + i + " iteration of my stupid loop..."); cat.info ( "Done, bye-bye" ); } catch ( IOException ex ) { ex.printStackTrace(); } } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]