Skip to content

Instantly share code, notes, and snippets.

@kazimsarikaya
Created January 27, 2014 09:42
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save kazimsarikaya/8645769 to your computer and use it in GitHub Desktop.
Save kazimsarikaya/8645769 to your computer and use it in GitHub Desktop.
logback configuration with programmatically
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
StatusManager statusManager = lc.getStatusManager();
if (statusManager != null) {
statusManager.add(new InfoStatus("Configuring logger", lc));
}
SiftingAppender sa = new SiftingAppender();
sa.setName("SIFT");
sa.setContext(lc);
MDCBasedDiscriminator discriminator = new MDCBasedDiscriminator();
discriminator.setKey("vhost");
discriminator.setDefaultValue("administration");
discriminator.start();
sa.setDiscriminator(discriminator);
sa.setAppenderFactory(new AppenderFactory<ILoggingEvent>() {
@Override
public Appender<ILoggingEvent> buildAppender(Context context, String discriminatingValue) throws JoranException {
RollingFileAppender<ILoggingEvent> appender = new RollingFileAppender<>();
appender.setName("ROLLINGFILE-" + discriminatingValue);
appender.setContext(context);
appender.setFile(discriminatingValue + ".log");
TimeBasedRollingPolicy<ILoggingEvent> policy = new TimeBasedRollingPolicy<>();
policy.setContext(context);
policy.setMaxHistory(5);
policy.setFileNamePattern(discriminatingValue + "-%d{yyyy-MM-dd-HH-mm}-%i.log.gz");
policy.setParent(appender);
policy.start();
SizeAndTimeBasedFNATP<ILoggingEvent> innerpolicy = new SizeAndTimeBasedFNATP<>();
innerpolicy.setContext(context);
innerpolicy.setMaxFileSize("512KB");
innerpolicy.setTimeBasedRollingPolicy(policy);
innerpolicy.start();
policy.setTimeBasedFileNamingAndTriggeringPolicy(innerpolicy);
policy.start();
appender.setRollingPolicy(policy);
PatternLayoutEncoder pl = new PatternLayoutEncoder();
pl.setContext(context);
pl.setPattern("%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n");
pl.start();
appender.setEncoder(pl);
appender.start();
return appender;
}
});
sa.start();
ch.qos.logback.classic.Logger rootLogger = lc.getLogger(ch.qos.logback.classic.Logger.ROOT_LOGGER_NAME);
rootLogger.detachAppender("console");
rootLogger.addAppender(sa);
String vhosts[] = {"test.com", "test2.com", "abc.test.com"};
Logger logger = LoggerFactory.getLogger(App.class);
for (long i = 0; i < 10000000; i++) {
try {
Thread.sleep(1);
} catch (InterruptedException ex) {
logger.error("interrupt error", ex);
}
MDC.put("vhost", vhosts[(int)i%3]);
logger.info("hello my dear " + i);
}
System.out.println("Hello World!");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment