use of ch.qos.logback.core.FileAppender in project OpenTripPlanner by opentripplanner.
the class Router method createLogger.
/**
* Programmatically (i.e. not in XML) create a Logback logger for requests happening on this router.
* http://stackoverflow.com/a/17215011/778449
*/
private static Logger createLogger(String file) {
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
PatternLayoutEncoder ple = new PatternLayoutEncoder();
ple.setPattern("%d{yyyy-MM-dd'T'HH:mm:ss.SSS} %msg%n");
ple.setContext(lc);
ple.start();
FileAppender<ILoggingEvent> fileAppender = new FileAppender<>();
fileAppender.setFile(file);
fileAppender.setEncoder(ple);
fileAppender.setContext(lc);
fileAppender.start();
Logger logger = (Logger) LoggerFactory.getLogger("REQ_LOG");
logger.addAppender(fileAppender);
logger.setLevel(Level.INFO);
logger.setAdditive(false);
return logger;
}
use of ch.qos.logback.core.FileAppender in project dropwizard by dropwizard.
the class FileAppenderFactoryTest method validSetTotalSizeCapNoMaxFileSize.
@Test
void validSetTotalSizeCapNoMaxFileSize() throws IOException, ConfigurationException, NoSuchFieldException {
final Field totalSizeCap = TimeBasedRollingPolicy.class.getDeclaredField("totalSizeCap");
totalSizeCap.setAccessible(true);
final YamlConfigurationFactory<FileAppenderFactory> factory = new YamlConfigurationFactory<>(FileAppenderFactory.class, validator, mapper, "dw");
final FileAppender appender = factory.build(new ResourceConfigurationSourceProvider(), "yaml/appender_file_cap2.yaml").buildAppender(new LoggerContext());
assertThat(appender).isInstanceOfSatisfying(RollingFileAppender.class, roller -> {
assertThat(roller.getRollingPolicy()).isInstanceOfSatisfying(TimeBasedRollingPolicy.class, policy -> {
try {
assertThat(totalSizeCap.get(policy)).isInstanceOfSatisfying(FileSize.class, x -> assertThat(x.getSize()).isEqualTo(DataSize.mebibytes(50).toBytes()));
assertThat(policy.getMaxHistory()).isEqualTo(5);
} catch (IllegalAccessException e) {
throw new RuntimeException("Unexpected illegal access", e);
}
});
});
}
use of ch.qos.logback.core.FileAppender in project dropwizard by dropwizard.
the class FileAppenderFactoryTest method isImmediateFlushed.
@Test
void isImmediateFlushed() throws Exception {
FileAppenderFactory<ILoggingEvent> fileAppenderFactory = new FileAppenderFactory<>();
fileAppenderFactory.setArchive(false);
Field isImmediateFlushField = OutputStreamAppender.class.getDeclaredField("immediateFlush");
isImmediateFlushField.setAccessible(true);
fileAppenderFactory.setImmediateFlush(false);
assertThat(fileAppenderFactory.build(new LoggerContext(), "test", new DropwizardLayoutFactory(), new NullLevelFilterFactory<>(), new AsyncLoggingEventAppenderFactory())).isInstanceOfSatisfying(AsyncAppender.class, asyncAppender -> assertThat(asyncAppender).extracting(appender -> appender.getAppender("file-appender")).satisfies(fileAppender -> assertThat(isImmediateFlushField.get(fileAppender)).isEqualTo(fileAppenderFactory.isImmediateFlush())));
fileAppenderFactory.setImmediateFlush(true);
assertThat(fileAppenderFactory.build(new LoggerContext(), "test", new DropwizardLayoutFactory(), new NullLevelFilterFactory<>(), new AsyncLoggingEventAppenderFactory())).isInstanceOfSatisfying(AsyncAppender.class, asyncAppender -> assertThat(asyncAppender).extracting(appender -> appender.getAppender("file-appender")).satisfies(fileAppender -> assertThat(isImmediateFlushField.get(fileAppender)).isEqualTo(fileAppenderFactory.isImmediateFlush())));
}
use of ch.qos.logback.core.FileAppender in project dropwizard by dropwizard.
the class FileAppenderFactoryTest method validSetTotalSizeCap.
@Test
void validSetTotalSizeCap() throws IOException, ConfigurationException, NoSuchFieldException {
final Field totalSizeCap = TimeBasedRollingPolicy.class.getDeclaredField("totalSizeCap");
totalSizeCap.setAccessible(true);
final Field maxFileSize = SizeAndTimeBasedRollingPolicy.class.getDeclaredField("maxFileSize");
maxFileSize.setAccessible(true);
final YamlConfigurationFactory<FileAppenderFactory> factory = new YamlConfigurationFactory<>(FileAppenderFactory.class, validator, mapper, "dw");
final FileAppender appender = factory.build(new ResourceConfigurationSourceProvider(), "yaml/appender_file_cap.yaml").buildAppender(new LoggerContext());
assertThat(appender).isInstanceOfSatisfying(RollingFileAppender.class, roller -> assertThat(roller.getRollingPolicy()).isInstanceOfSatisfying(SizeAndTimeBasedRollingPolicy.class, policy -> {
try {
assertThat(totalSizeCap.get(policy)).isInstanceOfSatisfying(FileSize.class, x -> assertThat(x.getSize()).isEqualTo(DataSize.mebibytes(50).toBytes()));
assertThat(maxFileSize.get(policy)).isInstanceOfSatisfying(FileSize.class, x -> assertThat(x.getSize()).isEqualTo(DataSize.mebibytes(10).toBytes()));
assertThat(policy.getMaxHistory()).isEqualTo(5);
} catch (IllegalAccessException e) {
throw new RuntimeException("Unexpected illegal access", e);
}
}));
}
use of ch.qos.logback.core.FileAppender in project helios by spotify.
the class LoggingTestWatcher method setupFileLogging.
/**
* Sets up a FileAppender under the path {@code $logDir/<timestamp>-<name>-<pid>.log}. If not set
* as a system property then {@code $logDir} falls back to {@code /tmp/helios-test/log}.
*/
private void setupFileLogging(final String name) {
final ch.qos.logback.classic.Logger rootLogger = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(ROOT_LOGGER_NAME);
final LoggerContext context = rootLogger.getLoggerContext();
context.reset();
final String ts = new SimpleDateFormat("yyyyMMdd'T'HHmmss.SSS").format(new Date());
final String pid = ManagementFactory.getRuntimeMXBean().getName().split("@", 2)[0];
final PatternLayoutEncoder ple = new PatternLayoutEncoder();
ple.setContext(context);
ple.setPattern("%d{HH:mm:ss.SSS} %-5level %logger{1} %F:%L - %msg%n");
ple.start();
final Path directory = Paths.get(System.getProperty("logDir", "/tmp/helios-test/log/"));
final String filename = String.format("%s-%s-%s.log", ts, name, pid);
final Path file = directory.resolve(filename);
final FileAppender<ILoggingEvent> fileAppender = new FileAppender<>();
fileAppender.setEncoder(ple);
fileAppender.setFile(file.toString());
fileAppender.setContext(context);
fileAppender.start();
rootLogger.setLevel(Level.DEBUG);
rootLogger.addAppender(fileAppender);
try {
Files.createDirectories(directory);
} catch (IOException e) {
throw new RuntimeException(e);
}
configureLogger("org.eclipse.jetty", Level.ERROR);
configureLogger("org.apache.curator", Level.ERROR);
configureLogger("org.apache.zookeeper", Level.ERROR);
configureLogger("com.spotify.helios", Level.DEBUG);
}
Aggregations