21 package org.matsim.core.controler;
23 import java.io.IOException;
24 import java.nio.file.FileSystems;
26 import org.apache.logging.log4j.Logger;
27 import org.apache.logging.log4j.Level;
28 import org.apache.logging.log4j.LogManager;
29 import org.apache.logging.log4j.core.Appender;
30 import org.apache.logging.log4j.core.LogEvent;
31 import org.apache.logging.log4j.core.LoggerContext;
32 import org.apache.logging.log4j.core.appender.FileAppender;
33 import org.apache.logging.log4j.core.config.Configuration;
53 public static final String
LOGFILE =
"logfile.log";
55 public static final String
WARNLOGFILE =
"logfileWarningsErrors.log";
66 if ( collectLogMessagesAppender != null ) {
76 collectLogMessagesAppender.start();
78 final LoggerContext ctx = (LoggerContext) LogManager.getContext(
false);
79 ctx.getConfiguration().getRootLogger().addAppender(collectLogMessagesAppender, Level.ALL, null);
89 if (collectLogMessagesAppender != null) {
90 final LoggerContext ctx = (LoggerContext) LogManager.getContext(
false);
91 ctx.getConfiguration().getRootLogger().removeAppender(collectLogMessagesAppender.getName());
98 }
catch (IOException e) {
99 log.error(
"Cannot create logfiles: " + e.getMessage());
116 if (collectLogMessagesAppender != null) {
117 final LoggerContext ctx = (LoggerContext) LogManager.getContext(
false);
118 ctx.getConfiguration().getRootLogger().removeAppender(collectLogMessagesAppender.getName());
121 String logfilename = outputDirectory + FileSystems.getDefault().getSeparator() +
LOGFILE;
122 String warnlogfilename = outputDirectory + FileSystems.getDefault().getSeparator() +
WARNLOGFILE;
126 private static void initLogging(String outputFilename, String warnLogfileName)
throws IOException {
129 final LoggerContext ctx = (LoggerContext) LogManager.getContext(
false);
130 final Configuration config = ctx.getConfiguration();
131 final boolean appendToExistingFile =
false;
133 FileAppender appender;
135 appender = FileAppender.newBuilder().setName(LOGFILE).setLayout(
Controler.
DEFAULTLOG4JLAYOUT).withFileName(outputFilename).withAppend(appendToExistingFile).build();
137 config.getRootLogger().addAppender(appender, Level.ALL, null);
140 FileAppender warnErrorAppender;
142 warnErrorAppender = FileAppender.newBuilder().setName(WARNLOGFILE).setLayout(
Controler.
DEFAULTLOG4JLAYOUT).withFileName(warnLogfileName).withAppend(appendToExistingFile).build();
143 warnErrorAppender.start();
144 config.getRootLogger().addAppender(warnErrorAppender, Level.WARN, null);
149 if (collectLogMessagesAppender != null) {
151 while ((e = collectLogMessagesAppender.
getLogEvents().poll()) != null) {
153 if (e.getLevel().isMoreSpecificThan(Level.WARN)) {
154 warnErrorAppender.append(e);
157 collectLogMessagesAppender.stop();
158 collectLogMessagesAppender = null;
172 String endLoggingInfo =
"closing the logfile, i.e. messages sent to the logger after this message are not written to the logfile.";
173 log.info(endLoggingInfo);
174 LoggerContext ctx = (LoggerContext) LogManager.getContext(
false);
175 org.apache.logging.log4j.core.Logger root = LoggerContext.getContext(
false).getRootLogger();
176 Appender app = root.getAppenders().get(LOGFILE);
178 root.removeAppender(app);
181 app = root.getAppenders().get(WARNLOGFILE);
183 root.removeAppender(app);
static final PatternLayout DEFAULTLOG4JLAYOUT
static final void printRunCommand()
static final String WARNLOGFILE
static CollectLogMessagesAppender collectLogMessagesAppender
Queue< LogEvent > getLogEvents()
static void initLogging(String outputFilename, String warnLogfileName)
static final String LOGFILE
static void closeOutputDirLogging()
static void catchLogEntries()
static void initLoggingWithOutputDirectory(final String outputDirectory)
static final void printBuildInfo()
static final void printSystemInfo()
final String getOutputFilename(final String filename)
static final void initLogging(OutputDirectoryHierarchy outputDirectoryHierarchy)