in src/main/java/org/apache/sling/commons/log/logback/internal/LogConfigManager.java [387:463]
public void updateLogWriter(String pid, Dictionary<?, ?> configuration, boolean performRefresh)
throws ConfigurationException {
if (configuration != null) {
LogWriter oldWriter = writerByPid.get(pid);
// get the log file parameter and normalize empty string to null
String logFileName = (String) configuration.get(LogConfigManager.LOG_FILE);
// Null logFileName is treated as Console Appender
if (logFileName != null && logFileName.trim().length() == 0) {
logFileName = LogWriter.FILE_NAME_CONSOLE;
}
// if we have a file name, make it absolute and correct for our
// environment and verify there is no other writer already existing
// for the same file
if (logFileName != null && !isConsole(logFileName)) {
// ensure absolute path
logFileName = getAbsoluteFilePath(logFileName);
// ensure unique configuration of the log writer
LogWriter existingWriterByFileName = writerByFileName.get(logFileName);
if (existingWriterByFileName != null
&& (oldWriter != null && !existingWriterByFileName.getConfigurationPID().equals(pid))) {
// this file is already configured by another LOG_PID
throw new ConfigurationException(LogConfigManager.LOG_FILE, "LogFile " + logFileName
+ " already configured by configuration " + existingWriterByFileName.getConfigurationPID());
}
}
// get number of files and ensure minimum and default
Object fileNumProp = configuration.get(LogConfigManager.LOG_FILE_NUMBER);
int fileNum = -1;
if (fileNumProp instanceof Number) {
fileNum = ((Number) fileNumProp).intValue();
} else if (fileNumProp != null) {
try {
fileNum = Integer.parseInt(fileNumProp.toString());
} catch (NumberFormatException nfe) {
// don't care
}
}
// get the log file size
Object fileSizeProp = configuration.get(LogConfigManager.LOG_FILE_SIZE);
String fileSize = null;
if (fileSizeProp != null) {
fileSize = fileSizeProp.toString();
}
boolean bufferedLogging = Util.toBoolean(configuration.get(LogConfigManager.LOG_FILE_BUFFERED), false);
LogWriter newWriter = new LogWriter(pid, getAppnderName(logFileName), fileNum,
fileSize, logFileName, bufferedLogging);
if (oldWriter != null) {
writerByFileName.remove(oldWriter.getFileName());
}
writerByFileName.put(newWriter.getFileName(), newWriter);
writerByPid.put(newWriter.getConfigurationPID(), newWriter);
} else {
final LogWriter logWriter = writerByPid.remove(pid);
if (logWriter != null) {
writerByFileName.remove(logWriter.getFileName());
}
}
if (performRefresh) {
logbackManager.configChanged();
}
}