|
1 | 1 | package edu.rpi.legup.utility; |
2 | 2 |
|
3 | | -import java.io.File; |
| 3 | +import java.io.IOException; |
| 4 | +import java.nio.file.Files; |
| 5 | +import java.nio.file.Path; |
| 6 | +import java.nio.file.Paths; |
4 | 7 | import org.apache.logging.log4j.LogManager; |
5 | 8 | import org.apache.logging.log4j.core.LoggerContext; |
6 | 9 | import org.apache.logging.log4j.core.appender.ConsoleAppender; |
|
12 | 15 |
|
13 | 16 | public class Logger { |
14 | 17 |
|
15 | | - private static final String LEGUP_HOME = |
16 | | - System.getProperty("user.dir") + File.separator + ".legup" + File.separator; |
| 18 | + private static final String LOG_PATTERN = |
| 19 | + "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"; |
17 | 20 |
|
18 | 21 | public static void initLogger() { |
19 | 22 | LoggerContext context = (LoggerContext) LogManager.getContext(false); |
20 | 23 | Configuration config = context.getConfiguration(); |
| 24 | + if (config.getAppender("fileLogger") != null) { |
| 25 | + System.setProperty("sun.java2d.noddraw", Boolean.TRUE.toString()); |
| 26 | + return; |
| 27 | + } |
| 28 | + |
21 | 29 | ConsoleAppender consoleAppender = config.getAppender("console"); |
22 | | - PatternLayout consolePattern = (PatternLayout) consoleAppender.getLayout(); |
| 30 | + String logPattern = LOG_PATTERN; |
| 31 | + if (consoleAppender != null && consoleAppender.getLayout() instanceof PatternLayout) { |
| 32 | + logPattern = ((PatternLayout) consoleAppender.getLayout()).getConversionPattern(); |
| 33 | + } |
23 | 34 | TimeBasedTriggeringPolicy triggeringPolicy = |
24 | 35 | TimeBasedTriggeringPolicy.newBuilder().withInterval(1).withModulate(true).build(); |
25 | | - PatternLayout patternLayout = |
26 | | - PatternLayout.newBuilder() |
27 | | - .withPattern(consolePattern.getConversionPattern()) |
28 | | - .build(); |
29 | | - RollingFileAppender rollingFileAppender = |
30 | | - RollingFileAppender.newBuilder() |
31 | | - .setName("fileLogger") |
32 | | - .withFileName(LEGUP_HOME + "legup.log") |
33 | | - .withFilePattern(LEGUP_HOME + "legup-%d{yyyy-MM-dd}.log.gz") |
34 | | - .withPolicy(triggeringPolicy) |
35 | | - .setLayout(patternLayout) |
36 | | - .setConfiguration(config) |
37 | | - .build(); |
38 | | - rollingFileAppender.start(); |
39 | | - config.addAppender(rollingFileAppender); |
40 | | - LoggerConfig rootLogger = config.getRootLogger(); |
41 | | - rootLogger.addAppender(config.getAppender("fileLogger"), null, null); |
42 | | - context.updateLoggers(); |
| 36 | + PatternLayout patternLayout = PatternLayout.newBuilder().withPattern(logPattern).build(); |
| 37 | + |
| 38 | + try { |
| 39 | + Path legupHome = getLegupHome(); |
| 40 | + Files.createDirectories(legupHome); |
| 41 | + RollingFileAppender rollingFileAppender = |
| 42 | + RollingFileAppender.newBuilder() |
| 43 | + .setName("fileLogger") |
| 44 | + .withFileName(legupHome.resolve("legup.log").toString()) |
| 45 | + .withFilePattern( |
| 46 | + legupHome.resolve("legup-%d{yyyy-MM-dd}.log.gz").toString()) |
| 47 | + .withPolicy(triggeringPolicy) |
| 48 | + .setLayout(patternLayout) |
| 49 | + .setConfiguration(config) |
| 50 | + .build(); |
| 51 | + rollingFileAppender.start(); |
| 52 | + config.addAppender(rollingFileAppender); |
| 53 | + LoggerConfig rootLogger = config.getRootLogger(); |
| 54 | + rootLogger.addAppender(config.getAppender("fileLogger"), null, null); |
| 55 | + context.updateLoggers(); |
| 56 | + } catch (IOException | RuntimeException e) { |
| 57 | + System.err.println("Unable to initialize LEGUP file logging: " + e.getMessage()); |
| 58 | + } |
43 | 59 |
|
44 | 60 | System.setProperty("sun.java2d.noddraw", Boolean.TRUE.toString()); |
45 | 61 | } |
| 62 | + |
| 63 | + private static Path getLegupHome() { |
| 64 | + return Paths.get(System.getProperty("user.home"), ".legup"); |
| 65 | + } |
46 | 66 | } |
0 commit comments