Tenemos algo similar implementado en nuestro sistema. Almacenamos los registradores específicos en un HashMap e inicializamos los appenders para cada uno de ellos según sea necesario.
He aquí un ejemplo:
public class JobLogger {
private static Hashtable<String, Logger> m_loggers = new Hashtable<String, Logger>();
private static String m_filename = "..."; // Root log directory
public static synchronized void logMessage(String jobName, String message)
{
Logger l = getJobLogger(jobName);
l.info(message);
}
public static synchronized void logException(String jobName, Exception e)
{
Logger l = getJobLogger(partner);
l.info(e.getMessage(), e);
}
private static synchronized Logger getJobLogger(String jobName)
{
Logger logger = m_loggers.get(jobName);
if (logger == null) {
Layout layout = new PatternLayout("...");
logger = Logger.getLogger(jobName);
m_loggers.put(jobName, logger);
logger.setLevel(Level.INFO);
try {
File file = new File(m_filename);
file.mkdirs();
file = new File(m_filename + jobName + ".log");
FileAppender appender = new FileAppender(layout, file.getAbsolutePath(), false);
logger.removeAllAppenders();
logger.addAppender(appender);
}
catch (Exception e)
{ ... }
}
return logger;
}
}
Luego de utilizar esto en su trabajo sólo tiene que utilizar una entrada de una línea como la siguiente:
Esto creará un archivo de registro para cada trabajo nombre y colóquelo en su propio archivo con ese nombre de trabajo en el directorio que especifique.
Puede juguetear con otros tipos de apéndices y tal como está escrito continuará añadiéndose hasta que se reinicie la JVM, lo que puede no funcionar si ejecuta el mismo trabajo en un servidor que siempre está activo, pero esto da la idea general de cómo puede funcionar