В нашей системе реализовано нечто подобное. Мы храним определенные регистраторы в HashMap и при необходимости инициализируем приложения для каждого из них.
Вот пример:
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;
}
}
Тогда, чтобы использовать это в своей работе, вам просто нужно использовать однострочную запись, подобную этой:
JobLogger.logMessage(jobName, logMessage);
Это создаст один файл журнала для каждого имени задания и поместит его в свой собственный файл с тем же именем задания в любом каталоге, который вы укажете.
Вы можете поиграть с другими типами дополнений и т. Д., Как написано, он будет продолжать добавляться до перезапуска JVM, что может не сработать, если вы выполняете одно и то же задание на работающем сервере, но это дает общее представление как это может работать.