Skip to content

Commit

Permalink
Show Logging parameters at top of GUI event window
Browse files Browse the repository at this point in the history
  • Loading branch information
hbitteur committed Jul 2, 2018
1 parent 602bbea commit e068093
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 41 deletions.
18 changes: 9 additions & 9 deletions src/main/org/audiveris/omr/Main.java
Expand Up @@ -114,6 +114,15 @@ public static int getSheetStepTimeOut ()
*/
public static void main (String[] args)
{
// Log files
LogUtil.addFileAppender();

// Locale to be used in the whole application?
checkLocale();

// Environment
showEnvironment();

// Process CLI parameters
processCli(args);

Expand All @@ -124,18 +133,9 @@ public static void main (String[] args)
return;
}

// Log files
LogUtil.addFileAppender();

// Initialize tool parameters
initialize();

// Locale to be used in the whole application?
checkLocale();

// Environment
showEnvironment();

// Engine
OMR.engine = BookManager.getInstance();

Expand Down
102 changes: 70 additions & 32 deletions src/main/org/audiveris/omr/log/LogUtil.java
Expand Up @@ -32,6 +32,7 @@

import org.apache.commons.io.FileUtils;

import org.audiveris.omr.WellKnowns;
import org.audiveris.omr.sheet.Book;
import org.audiveris.omr.sheet.SheetStub;
import org.audiveris.omr.util.UriUtil;
Expand All @@ -46,10 +47,11 @@
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.swing.SwingUtilities;
import org.audiveris.omr.WellKnowns;

/**
* Class {@code LogUtil} handles logging features based on underlying LogBack binding.
Expand All @@ -72,6 +74,9 @@ public abstract class LogUtil
/** File name for LogBack configuration. */
private static final String LOGBACK_FILE_NAME = "logback.xml";

/** Initial messages before logging is fully set. */
private static final List<String> initialMessages = new ArrayList<String>();

//~ Methods ------------------------------------------------------------------------------------
//-------------//
// addAppender //
Expand Down Expand Up @@ -105,6 +110,37 @@ public static void addAppender (String name,
root.addAppender(fileAppender);
}

//-----------------//
// addFileAppender //
//-----------------//
/**
* Add a specific appender meant for FILE.
*/
public static void addFileAppender ()
{
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
Logger root = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(
Logger.ROOT_LOGGER_NAME);
FileAppender fileAppender = new FileAppender();
PatternLayoutEncoder fileEncoder = new PatternLayoutEncoder();
fileAppender.setName("FILE");
fileAppender.setContext(loggerContext);
fileAppender.setAppend(false);

String now = new SimpleDateFormat("yyyyMMdd'T'HHmmss").format(new Date());
Path logPath = WellKnowns.LOG_FOLDER.resolve(now + ".log").toAbsolutePath();
fileAppender.setFile(logPath.toString());
fileEncoder.setContext(loggerContext);
fileEncoder.setPattern(
"%date %-5level [%X{BOOK}%X{SHEET}] %25replace(%file){'\\.java$',''} %-4line | %msg%n%ex");
fileEncoder.start();
fileAppender.setEncoder(fileEncoder);
fileAppender.start();
root.addAppender(fileAppender);

initMessage("LogUtil. Logging to " + logPath);
}

//----------------//
// addGuiAppender //
//----------------//
Expand All @@ -125,34 +161,23 @@ public static void addGuiAppender ()
root.addAppender(guiAppender);
}

//----------------//
// addFileAppender //
//----------------//
//--------------------//
// allInitialMessages //
//--------------------//
/**
* Add a specific appender meant for FILE.
* Report messages recorded before logging was fully set.
*
* @return initial messages concatenated into one string
*/
public static void addFileAppender ()
public static String allInitialMessages ()
{
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
Logger root = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(
Logger.ROOT_LOGGER_NAME);
FileAppender fileAppender = new FileAppender();
PatternLayoutEncoder fileEncoder = new PatternLayoutEncoder();
fileAppender.setName("FILE");
fileAppender.setContext(loggerContext);
fileAppender.setAppend(false);
StringBuilder sb = new StringBuilder();

String now = new SimpleDateFormat("yyyyMMdd'T'HHmmss").format(new Date());
Path logPath = WellKnowns.LOG_FOLDER.resolve(now + ".log").toAbsolutePath();
fileAppender.setFile(logPath.toString());
fileEncoder.setContext(loggerContext);
fileEncoder.setPattern("%date %-5level [%X{BOOK}%X{SHEET}] %25replace(%file){'\\.java$',''} %-4line | %msg%n%ex");
fileEncoder.start();
fileAppender.setEncoder(fileEncoder);
fileAppender.start();
root.addAppender(fileAppender);
for (String str : initialMessages) {
sb.append(str).append("\n");
}

System.out.println("LogUtil. Logging to " + logPath);
return sb.toString();
}

//------------//
Expand All @@ -178,26 +203,26 @@ public static void initialize (Path CONFIG_FOLDER,

if (Files.exists(configPath)) {
// Everything seems OK, let LogBack use the config file
System.out.println("LogUtil. Config " + configPath);
initMessage("LogUtil. Configuration found " + configPath);

return;
} else {
System.out.println("LogUtil. File " + configPath + " does not exist.");
initMessage("LogUtil. File " + configPath + " does not exist.");
}
} else {
System.out.println("LogUtil. Property " + LOGBACK_LOGGING_KEY + " not defined.");
initMessage("LogUtil. Property " + LOGBACK_LOGGING_KEY + " not defined, skipped.");
}

// 2/ Look for well-known location (user Audiveris config folder)
Path configPath = CONFIG_FOLDER.resolve(LOGBACK_FILE_NAME).toAbsolutePath();

if (Files.exists(configPath)) {
System.out.println("LogUtil. Config " + configPath);
initMessage("LogUtil. Configuration found " + configPath);
System.setProperty(LOGBACK_LOGGING_KEY, configPath.toString());

return;
} else {
System.out.println("LogUtil. No " + configPath);
initMessage("LogUtil. No " + configPath + ", skipped.");
}

// 3/ Look for suitable file within 'res' folder or resource
Expand All @@ -219,19 +244,19 @@ public static void initialize (Path CONFIG_FOLDER,
}

if (Files.exists(localPath)) {
System.out.println("LogUtil. Config " + configUri);
initMessage("LogUtil. Configuration found " + configUri);
System.setProperty(LOGBACK_LOGGING_KEY, localPath.toString());

return;
} else {
System.out.println("LogUtil. No " + localPath);
initMessage("LogUtil. No " + localPath + ", skipped.");
}
} catch (Exception ex) {
ex.printStackTrace();
}

// 4/ We need a default configuration
System.out.println("LogUtil. Building a minimal Logging configuration");
initMessage("LogUtil. Building a minimal Logging configuration");

LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
Logger root = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(
Expand Down Expand Up @@ -366,4 +391,17 @@ public static Level toLevel (final String str)
return Level.OFF;
}
}

//-------------//
// initMessage //
//-------------//
/**
* Record a message before logging is fully set.
*
* @param str the message to record
*/
private static void initMessage (String str)
{
initialMessages.add(str);
}
}
2 changes: 2 additions & 0 deletions src/main/org/audiveris/omr/ui/MainGui.java
Expand Up @@ -30,6 +30,7 @@
import org.audiveris.omr.constant.ConstantSet;
import org.audiveris.omr.image.jai.JaiLoader;
import org.audiveris.omr.log.LogPane;
import org.audiveris.omr.log.LogUtil;
import org.audiveris.omr.plugin.PluginsManager;
import org.audiveris.omr.score.PartwiseBuilder;
import org.audiveris.omr.sheet.Book;
Expand Down Expand Up @@ -501,6 +502,7 @@ protected void startup ()
{
logger.debug("MainGui. 2/startup");
logger.info("{} version {}", WellKnowns.TOOL_NAME, WellKnowns.TOOL_REF);
logger.info("\n{}", LogUtil.allInitialMessages());

// Make the OmrGui instance available for the other classes
OMR.gui = this;
Expand Down

0 comments on commit e068093

Please sign in to comment.