package org.hive2hive.client.menu;
import java.text.SimpleDateFormat;
import org.hive2hive.client.console.ConsoleMenu;
import org.hive2hive.client.console.H2HConsoleMenuItem;
import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.FileAppender;
public class LoggerMenu extends ConsoleMenu {
@Override
protected void addMenuItems() {
add(new H2HConsoleMenuItem("Yes") {
protected void execute() throws Exception {
String logFileName = createRootLogger();
print(String.format("Log file '%s' has been created.", logFileName));
exit();
}
});
add(new H2HConsoleMenuItem("No") {
protected void execute() throws Exception {
// logback.xml defines nothing by default
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
loggerContext.reset();
exit();
}
});
}
@Override
protected String getInstruction() {
return "Do you want this session to be logged?";
}
@Override
protected String getExitItemText() {
return "Cancel";
}
private static String createRootLogger() {
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
PatternLayoutEncoder ple = new PatternLayoutEncoder();
ple.setPattern("%d{HH:mm:ss} %-12.-12([%thread])[%-5level] %logger{0} -%msg%n");
ple.setContext(loggerContext);
ple.start();
String fileName = String.format("logs/h2h-log %s.txt",
new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss").format(System.currentTimeMillis()));
FileAppender<ILoggingEvent> fileAppender = new FileAppender<ILoggingEvent>();
fileAppender.setFile(fileName);
fileAppender.setEncoder(ple);
fileAppender.setContext(loggerContext);
fileAppender.start();
Logger logbackLogger = loggerContext.getLogger(Logger.ROOT_LOGGER_NAME);
logbackLogger.addAppender(fileAppender);
logbackLogger.setLevel(Level.DEBUG);
logbackLogger.setAdditive(false);
return fileName;
}
}