in src/main/java/org/apache/sling/commons/log/logback/internal/LogConfigManager.java [804:884]
public void updateLogWriter(@NotNull String pid, @Nullable 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(LogConstants.LOG_FILE);
// Null logFileName is treated as Console Appender
if (logFileName == null || logFileName.trim().isEmpty()) {
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 (!LogWriter.FILE_NAME_CONSOLE.equals(logFileName)) {
// ensure absolute path
logFileName = getAbsoluteFilePath(logFileName);
// ensure unique configuration of the log writer
LogWriter existingWriterByFileName = writerByFileName.get(logFileName);
if (existingWriterByFileName != null
&& !existingWriterByFileName.getConfigurationPID().equals(pid)) {
// this file is already configured by another LOG_PID
throw new ConfigurationException(
LogConstants.LOG_FILE,
"LogFile " + logFileName + " already configured by configuration "
+ existingWriterByFileName.getConfigurationPID());
}
}
// get number of files and ensure minimum and default
Object fileNumProp = configuration.get(LogConstants.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(LogConstants.LOG_FILE_SIZE);
String fileSize = null;
if (fileSizeProp != null) {
fileSize = fileSizeProp.toString();
}
boolean bufferedLogging = converter
.convert(configuration.get(LogConstants.LOG_FILE_BUFFERED))
.defaultValue(false)
.to(Boolean.TYPE);
LogWriter newWriter =
new LogWriter(pid, getAppenderName(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) {
configChanged();
}
}