public boolean isImplicit() {
return configurationPID == null;
}
public Appender<ILoggingEvent> createAppender(final Context context, final Encoder<ILoggingEvent> encoder) {
SlingContextUtil ctxUtil = new SlingContextUtil(context, this);
OutputStreamAppender<ILoggingEvent> appender;
if (FILE_NAME_CONSOLE.equals(fileName)) {
appender = new ConsoleAppender<ILoggingEvent>();
appender.setName(FILE_NAME_CONSOLE);
} else {
ctxUtil.addInfo("Configuring appender "+getFileName());
SlingRollingFileAppender<ILoggingEvent> rollingAppender = new SlingRollingFileAppender<ILoggingEvent>();
rollingAppender.setAppend(true);
rollingAppender.setFile(getFileName());
Matcher sizeMatcher = SIZE_SPEC.matcher(getLogRotation());
if (sizeMatcher.matches()) {
// group 1 is the base size and is an integer number
final long baseSize = Long.parseLong(sizeMatcher.group(1));
// this will take the final size value
final long maxSize;
// group 2 is optional and is the size spec. If not null it is
// at least one character long and the first character is enough
// for use to know (the second is of no use here)
final String factorString = sizeMatcher.group(2);
if (factorString == null) {
// no factor define, hence no multiplication
maxSize = baseSize;
} else {
switch (factorString.charAt(0)) {
case 'k':
case 'K':
maxSize = baseSize * FACTOR_KB;
break;
case 'm':
case 'M':
maxSize = baseSize * FACTOR_MB;
break;
case 'g':
case 'G':
maxSize = baseSize * FACTOR_GB;
break;
default:
// we don't really expect this according to the
// pattern
maxSize = baseSize;
}
}
SizeBasedTriggeringPolicy<ILoggingEvent> triggeringPolicy = new SizeBasedTriggeringPolicy<ILoggingEvent>();
triggeringPolicy.setMaxFileSize(String.valueOf(maxSize));
triggeringPolicy.setContext(context);
triggeringPolicy.start();
rollingAppender.setTriggeringPolicy(triggeringPolicy);
FixedWindowRollingPolicy pol = new FixedWindowRollingPolicy();
pol.setMinIndex(1);
pol.setMaxIndex(getLogNumber());
pol.setFileNamePattern(getFileName() + "%i");
pol.setContext(context);
pol.setParent(rollingAppender);
pol.start();
rollingAppender.setRollingPolicy(pol);
} else {
TimeBasedRollingPolicy<ILoggingEvent> policy = new TimeBasedRollingPolicy<ILoggingEvent>();
String fileNamePattern = createFileNamePattern(getFileName(), getLogRotation());
policy.setFileNamePattern(fileNamePattern);
policy.setMaxHistory(getLogNumber());
policy.setContext(context);
policy.setParent(rollingAppender);
policy.start();
rollingAppender.setTriggeringPolicy(policy);
ctxUtil.addInfo("Configured TimeBasedRollingPolicy with pattern "+ fileNamePattern);
}
rollingAppender.setLogWriter(this);
rollingAppender.setName(getAppenderName());
appender = rollingAppender;
}
if(bufferedLogging && encoder instanceof LayoutWrappingEncoder){
((LayoutWrappingEncoder) encoder).setImmediateFlush(false);
ctxUtil.addInfo("Setting immediateFlush to false");
} else{
ctxUtil.addInfo("immediateFlush property not modified. Defaults to true");
}
appender.setContext(context);
appender.setEncoder(encoder);
appender.start();
ctxUtil.addInfo("Completed configuring appender with name "+getFileName());
return appender;
}