/*
* Copyright 2014-2016 CyberVision, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.kaaproject.kaa.server.appenders.file.appender;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
import ch.qos.logback.core.rolling.RollingFileAppender;
import ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy;
import ch.qos.logback.core.rolling.TimeBasedRollingPolicy;
import org.kaaproject.kaa.common.dto.logs.LogAppenderDto;
import org.kaaproject.kaa.server.appenders.file.config.gen.FileConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.nio.file.Path;
public class LogbackFileSystemLogger implements FileSystemLogger {
private static final Logger LOG = LoggerFactory.getLogger(LogbackFileSystemLogger.class);
private ch.qos.logback.classic.Logger logger;
private RollingFileAppender rfAppender;
@Override
public void close() throws IOException {
if (rfAppender != null) {
rfAppender.stop();
}
}
@Override
public void init(LogAppenderDto appenderDto, FileConfig config, Path filePath) {
LOG.info(
"[{}][{}] Initializing with rollingFileNamePatern: {}, rollingMaxHistory: {},"
+ " triggerMaxFileSize: {}, encoderPattern: {}",
appenderDto.getTenantId(), appenderDto.getApplicationId(),
config.getRollingFileNamePatern(), config.getRollingMaxHistory(),
config.getTriggerMaxFileSize(), config.getEncoderPattern());
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
rfAppender = new RollingFileAppender();
rfAppender.setContext(loggerContext);
rfAppender.setFile(filePath.toAbsolutePath().toString());
TimeBasedRollingPolicy rollingPolicy = new TimeBasedRollingPolicy<>();
rollingPolicy.setFileNamePattern(config.getRollingFileNamePatern());
rollingPolicy.setMaxHistory(config.getRollingMaxHistory());
rollingPolicy.setContext(loggerContext);
rollingPolicy.setParent(rfAppender);
rollingPolicy.start();
SizeBasedTriggeringPolicy triggeringPolicy =
new ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy();
triggeringPolicy.setMaxFileSize(config.getTriggerMaxFileSize());
triggeringPolicy.start();
PatternLayoutEncoder encoder = new PatternLayoutEncoder();
encoder.setContext(loggerContext);
encoder.setPattern(config.getEncoderPattern());
encoder.start();
rfAppender.setEncoder(encoder);
rfAppender.setRollingPolicy(rollingPolicy);
rfAppender.setTriggeringPolicy(triggeringPolicy);
rfAppender.start();
logger = loggerContext.getLogger(appenderDto.getTenantId() + "."
+ appenderDto.getApplicationToken());
logger.setLevel(Level.ALL);
logger.addAppender(rfAppender);
LOG.debug("[{}][{}] Initialized with context {}", appenderDto.getTenantId(),
appenderDto.getApplicationId(), loggerContext);
}
@Override
public void append(String event) {
logger.info(event);
}
}