package cc.blynk.utils;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configuration;
/**
* The Blynk Project.
* Created by Dmitriy Dumanskiy.
* Created on 28.09.15.
*/
public final class LoggerUtil {
/**
* - Sets async logger for all logs
* - Defines logging folder
* - Sets logging level based on properties
*/
public static void configureLogging(ServerProperties serverProperties) {
//required to make all loggers async with LMAX disruptor
System.setProperty("Log4jContextSelector", "org.apache.logging.log4j.core.async.AsyncLoggerContextSelector");
System.setProperty("AsyncLogger.RingBufferSize",
serverProperties.getProperty("async.logger.ring.buffer.size", String.valueOf(8 * 1024)));
//configurable folder for logs via property.
if (serverProperties.getProperty("logs.folder") == null) {
System.out.println("logs.folder property is empty.");
System.exit(1);
}
System.setProperty("logs.folder", serverProperties.getProperty("logs.folder"));
//changing log level based on properties file
changeLogLevel(serverProperties.getProperty("log.level"));
}
/**
* Sets desired log level from properties.
*
* @param level - desired log level. error|info|debug|trace, etc.
*/
private static void changeLogLevel(String level) {
Level newLevel = Level.valueOf(level);
LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
Configuration conf = ctx.getConfiguration();
conf.getLoggerConfig(LogManager.ROOT_LOGGER_NAME).setLevel(newLevel);
ctx.updateLoggers(conf);
}
}