5 import org.apache.logging.log4j.Level;
6 import org.apache.logging.log4j.LogManager;
7 import org.apache.logging.log4j.Logger;
8 import org.apache.logging.log4j.core.Appender;
9 import org.apache.logging.log4j.core.Filter;
10 import org.apache.logging.log4j.core.Layout;
11 import org.apache.logging.log4j.core.LoggerContext;
12 import org.apache.logging.log4j.core.appender.ConsoleAppender;
13 import org.apache.logging.log4j.core.config.Configuration;
14 import org.apache.logging.log4j.core.config.ConfigurationFactory;
15 import org.apache.logging.log4j.core.config.Configurator;
16 import org.apache.logging.log4j.core.config.LoggerConfig;
17 import org.apache.logging.log4j.core.config.builder.api.AppenderComponentBuilder;
18 import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilder;
19 import org.apache.logging.log4j.core.config.builder.api.FilterComponentBuilder;
20 import org.apache.logging.log4j.core.config.builder.api.LayoutComponentBuilder;
21 import org.apache.logging.log4j.core.config.builder.impl.BuiltConfiguration;
22 import org.apache.logging.log4j.core.filter.ThresholdFilter;
23 import org.apache.logging.log4j.core.layout.PatternLayout;
25 import jalview.log.JLogger;
26 import jalview.log.JalviewAppender;
31 public final static String SIMPLE_PATTERN = "%level - %m%n";
33 private static boolean init = false;
35 public static boolean isInit()
40 public static Level log4jLevel(JLogger.LogLevel loglevel)
42 return Level.toLevel(loglevel.toString());
45 public static void init(JLogger.LogLevel myLevel)
47 init(log4jLevel(myLevel));
50 public static void init(Level myLevel)
56 // configure the root logger to stderr
57 ConfigurationBuilder<BuiltConfiguration> configBuilder = Log4j
58 .getConfigurationBuilder();
60 configBuilder.setStatusLevel(Level.WARN);
62 String consoleLoggerName = "STDERR";
63 AppenderComponentBuilder appenderBuilder = configBuilder
64 .newAppender(consoleLoggerName, "Console");
65 appenderBuilder.addAttribute("target",
66 ConsoleAppender.Target.SYSTEM_ERR);
67 appenderBuilder.add(Log4j.getSimpleLayoutBuilder());
68 appenderBuilder.add(Log4j.getThresholdFilterBuilder());
69 configBuilder.add(appenderBuilder);
71 configBuilder.add(configBuilder.newRootLogger(myLevel)
72 .add(configBuilder.newAppenderRef(consoleLoggerName)));
74 Configurator.initialize(configBuilder.build());
79 System.err.println("Problems initializing the log4j system\n");
80 e.printStackTrace(System.err);
84 public static Logger getLogger(String name)
86 return getLogger(name, Level.INFO);
89 public static Logger getLogger(String name, JLogger.LogLevel loglevel)
91 return getLogger(name, log4jLevel(loglevel));
94 public static Logger getLogger(String name, Level level)
96 Logger logger = LogManager.getLogger(name);
97 Log4j.setLevel(logger, level);
101 public static ConfigurationBuilder<BuiltConfiguration> getConfigurationBuilder()
103 return ConfigurationFactory.newConfigurationBuilder();
106 public static Layout getSimpleLayout()
108 return PatternLayout.newBuilder().withPattern(SIMPLE_PATTERN).build();
111 public static LayoutComponentBuilder getSimpleLayoutBuilder()
113 return getConfigurationBuilder().newLayout("PatternLayout")
114 .addAttribute("pattern", Log4j.SIMPLE_PATTERN);
117 public static Filter getThresholdFilter(Level level)
119 return ThresholdFilter.createFilter(level, Filter.Result.ACCEPT,
120 Filter.Result.NEUTRAL);
123 public static FilterComponentBuilder getThresholdFilterBuilder()
125 return getConfigurationBuilder().newFilter("ThresholdFilter",
126 Filter.Result.ACCEPT, Filter.Result.NEUTRAL);
129 public static void setLevel(Logger logger, JLogger.LogLevel loglevel)
131 setLevel(logger, log4jLevel(loglevel));
134 public static void setLevel(Logger logger, Level level)
136 if (!Platform.isJS())
138 LoggerContext context = (LoggerContext) LogManager.getContext(false);
139 Configuration config = context.getConfiguration();
140 LoggerConfig loggerConfig = config.getLoggerConfig(logger.getName());
141 loggerConfig.setLevel(level);
143 Map<String, Appender> appenders = config.getAppenders();
145 Appender jappender = config.getAppender(JalviewAppender.NAME);
147 context.updateLoggers();
151 public static void setRootLevel(JLogger.LogLevel loglevel)
153 setRootLevel(log4jLevel(loglevel));
156 public static void setRootLevel(Level level)
158 setLevel(LogManager.getRootLogger(), level);
161 public static Appender getAppender(String name)
163 LoggerContext context = (LoggerContext) LogManager.getContext(false);
164 Configuration config = context.getConfiguration();
165 Map<String, Appender> appenders = config.getAppenders();
166 return appenders.get(name);
169 public static void addAppender(Logger logger, Logger logger2,
172 LoggerContext context = (LoggerContext) LogManager.getContext(false);
173 Configuration config = context.getConfiguration();
174 LoggerConfig logger2Config = config.getLoggerConfig(logger2.getName());
175 Map<String, Appender> logger2AppendersMap = logger2Config
177 Appender appender = logger2AppendersMap.get(name2);
178 addAppender(logger, appender);
179 context.updateLoggers();
182 public static void addAppender(Logger logger, Appender appender)
184 if (appender == null)
186 LoggerContext context = (LoggerContext) LogManager.getContext(false);
187 Configuration config = context.getConfiguration();
188 LoggerConfig loggerConfig = config.getLoggerConfig(logger.getName());
189 if (loggerConfig == null)
192 Level level = loggerConfig.getLevel();
194 config.addAppender(appender);
195 loggerConfig.addAppender(appender, null, null);
197 context.updateLoggers();
200 public static void addAppenderToRootLogger(Appender appender)
202 Log4j.addAppender(LogManager.getRootLogger(), appender);