下面列出了怎么用org.apache.logging.log4j.core.config.LoggerConfig的API类实例代码及写法,或者点击链接到github查看源代码。
@Test
public void testPropertiesConfiguration() {
final Configuration config = context.getConfiguration();
assertNotNull("No configuration created", config);
assertEquals("Incorrect State: " + config.getState(), config.getState(), LifeCycle.State.STARTED);
final Map<String, Appender> appenders = config.getAppenders();
assertNotNull(appenders);
assertTrue("Incorrect number of Appenders: " + appenders.size(), appenders.size() == 1);
final Map<String, LoggerConfig> loggers = config.getLoggers();
assertNotNull(loggers);
assertTrue("Incorrect number of LoggerConfigs: " + loggers.size(), loggers.size() == 2);
final Filter filter = config.getFilter();
assertNotNull("No Filter", filter);
assertTrue("Not a Threshold Filter", filter instanceof ThresholdFilter);
final Logger logger = LogManager.getLogger(getClass());
logger.info("Welcome to Log4j!");
}
private static void setLogLevel() {
// SLF4J doesn't provide a hook into the logging implementation. We'll have to do this 'direct', bypassing slf4j.
final org.apache.logging.log4j.Level newLevel;
if (traceEnabled) {
newLevel = org.apache.logging.log4j.Level.TRACE;
} else if (debugEnabled) {
newLevel = org.apache.logging.log4j.Level.DEBUG;
} else {
newLevel = org.apache.logging.log4j.Level.INFO;
}
final LoggerContext ctx = (LoggerContext) LogManager.getContext( false );
final Configuration config = ctx.getConfiguration();
final LoggerConfig loggerConfig = config.getLoggerConfig( LogManager.ROOT_LOGGER_NAME );
loggerConfig.setLevel( newLevel );
ctx.updateLoggers(); // This causes all Loggers to refetch information from their LoggerConfig.
}
public static void configureLogging() {
final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
final Properties properties = PropertiesSupport.loadProperties();
properties.entrySet().stream()
.filter(entry -> entry.getKey() instanceof String)
.filter(entry -> entry.getValue() instanceof String)
.filter(entry -> ((String)entry.getKey()).startsWith(Constants.LOGGING_LEVEL_PREFIX))
.forEach(entry -> {
String key = (String)entry.getKey();
String val = (String)entry.getValue();
String logger = key.substring(Constants.LOGGING_LEVEL_PREFIX.length());
Level level = Level.getLevel(val);
LoggerConfig config = new LoggerConfig(logger, level, true);
ctx.getConfiguration().addLogger(logger, config);
}
);
}
/**
* Sets the.
*
* @param name
* the name
* @param level
* the level
* @return the response entity
*/
@RequestMapping(value = "set/{name}/{level}", produces = MediaType.APPLICATION_JSON_VALUE, method = RequestMethod.GET,
headers = "Accept=application/json")
@ResponseBody
public ResponseEntity<LogResponse> set(@PathVariable("name")
final String name, @PathVariable("level")
final Level level) {
final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
synchronized (ctx) {
final Configuration config = ctx.getConfiguration();
LoggerConfig loggerConfig = config.getLoggerConfig(name);
if (name.equalsIgnoreCase(loggerConfig.getName())) {
loggerConfig.setLevel(level);
} else {
LoggerConfig newloggerConfig = new LoggerConfig(name, level, true);
config.addLogger(name, newloggerConfig);
}
ctx.updateLoggers();
}
return new ResponseEntity<>(listLoggers(ctx), HttpStatus.OK);
}
/**
* Captures the given logger at the given level so it can be displayed directly by this controller.
*
* @param name the name
* @param level the level
* @param append the append
* @return the response entity
*/
@RequestMapping(value = "capture/{name}/{level}", produces = MediaType.APPLICATION_JSON_VALUE, method = RequestMethod.GET,
headers = "Accept=application/json")
@ResponseBody
public ResponseEntity<LogResponse> capture(@PathVariable("name")
final String name, @PathVariable("level")
final Level level, @RequestParam(value = "append", defaultValue = "false") boolean append) {
final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
synchronized (ctx) {
if (inMemoryAppenderImpl != null) {
final Configuration config = ctx.getConfiguration();
//
if (name.equalsIgnoreCase(config.getLoggerConfig(name).getName())) {
config.removeLogger(name);
}
//
AppenderRef ref = AppenderRef.createAppenderRef("InMemoryAppenderImplAppenderRef", level, null);
AppenderRef[] refs = new AppenderRef[] {ref};
LoggerConfig loggerConfig = LoggerConfig.createLogger(append, level, name, "true", refs, null, config, null);
loggerConfig.addAppender(inMemoryAppenderImpl, null, null);
config.addLogger(name, loggerConfig);
ctx.updateLoggers();
}
}
return new ResponseEntity<>(listLoggers(ctx), HttpStatus.OK);
}
@Test
public void testProgrammaticConfig() {
LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
Configuration config = ctx.getConfiguration();
PatternLayout layout = PatternLayout.newBuilder().withConfiguration(config).withPattern("%d{HH:mm:ss.SSS} %level %msg%n").build();
Appender appender = FileAppender.newBuilder().setConfiguration(config).withName("programmaticFileAppender").withLayout(layout).withFileName("java.log").build();
appender.start();
config.addAppender(appender);
AppenderRef ref = AppenderRef.createAppenderRef("programmaticFileAppender", null, null);
AppenderRef[] refs = new AppenderRef[] { ref };
LoggerConfig loggerConfig = LoggerConfig.createLogger(false, Level.INFO, "programmaticLogger", "true", refs, null, config, null);
loggerConfig.addAppender(appender, null, null);
config.addLogger("programmaticLogger", loggerConfig);
ctx.updateLoggers();
Logger pLogger = LogManager.getLogger("programmaticLogger");
pLogger.info("Programmatic Logger Message");
}
private void configureRoot(Properties props) {
String effectiveFrefix = ROOT_LOGGER_PREFIX;
String value = OptionConverter.findAndSubst(ROOT_LOGGER_PREFIX, props);
if (value == null) {
value = OptionConverter.findAndSubst(ROOT_CATEGORY_PREFIX, props);
effectiveFrefix = ROOT_CATEGORY_PREFIX;
}
if (value == null) {
LOGGER.debug("Could not find root logger information. Is this OK?");
} else {
LoggerConfig root = getRootLogger();
parseLogger(props, root, effectiveFrefix, INTERNAL_ROOT_NAME, value);
}
}
@Test
public void testPropertiesConfiguration() {
final Configuration config = context.getConfiguration();
assertNotNull("No configuration created", config);
assertEquals("Incorrect State: " + config.getState(), config.getState(), LifeCycle.State.STARTED);
final Map<String, Appender> appenders = config.getAppenders();
assertNotNull(appenders);
assertTrue("Incorrect number of Appenders: " + appenders.size(), appenders.size() == 3);
final Map<String, LoggerConfig> loggers = config.getLoggers();
assertNotNull(loggers);
assertTrue("Incorrect number of LoggerConfigs: " + loggers.size(), loggers.size() == 2);
final Filter filter = config.getFilter();
assertNotNull("No Filter", filter);
assertTrue("Not a Threshold Filter", filter instanceof ThresholdFilter);
final Logger logger = LogManager.getLogger(getClass());
logger.info("Welcome to Log4j!");
}
@Test
public void testPropertiesConfiguration() {
final Configuration config = context.getConfiguration();
assertNotNull("No configuration created", config);
assertEquals("Incorrect State: " + config.getState(), config.getState(), LifeCycle.State.STARTED);
final Map<String, Appender> appenders = config.getAppenders();
assertNotNull(appenders);
assertTrue("Incorrect number of Appenders: " + appenders.size(), appenders.size() == 1);
final Map<String, LoggerConfig> loggers = config.getLoggers();
assertNotNull(loggers);
assertTrue("Incorrect number of LoggerConfigs: " + loggers.size(), loggers.size() == 2);
final Filter filter = config.getFilter();
assertNotNull("No Filter", filter);
assertTrue("Not a Threshold Filter", filter instanceof ThresholdFilter);
final Logger logger = LogManager.getLogger(getClass());
assertEquals("Incorrect level " + logger.getLevel(), Level.DEBUG, logger.getLevel());
logger.debug("Welcome to Log4j!");
}
/**
* Configures the Log4j2 console appender(s), using the specified verbosity:
* <ul>
* <li>{@code -vvv} : enable TRACE level</li>
* <li>{@code -vv} : enable DEBUG level</li>
* <li>{@code -v} : enable INFO level</li>
* <li>(not specified) : enable WARN level</li>
* </ul>
*/
public void configureLoggers() {
Level level = getTopLevelCommandLoggingMixin(mixee).calcLogLevel();
LoggerContext loggerContext = LoggerContext.getContext(false);
LoggerConfig rootConfig = loggerContext.getConfiguration().getRootLogger();
for (Appender appender : rootConfig.getAppenders().values()) {
if (appender instanceof ConsoleAppender) {
rootConfig.removeAppender(appender.getName());
rootConfig.addAppender(appender, level, null);
}
}
if (rootConfig.getLevel().isMoreSpecificThan(level)) {
rootConfig.setLevel(level);
}
loggerContext.updateLoggers(); // apply the changes
}
@Test
void filterWhenLoggerAdditivityIsFalseShouldWork() {
Logger additivityDisabledLogger = LogManager.getLogger("additivityDisabledLogger");
Configurator.setLevel("additivityDisabledLogger", Level.INFO);
LoggerContext loggerContext = (LoggerContext) LogManager.getContext();
Configuration configuration = loggerContext.getConfiguration();
LoggerConfig loggerConfig = configuration.getLoggerConfig("additivityDisabledLogger");
loggerConfig.setAdditive(false);
new Log4j2Metrics().bindTo(registry);
assertThat(registry.get("log4j2.events").tags("level", "info").counter().count()).isEqualTo(0);
additivityDisabledLogger.info("Hello, world!");
assertThat(registry.get("log4j2.events").tags("level", "info").counter().count()).isEqualTo(1);
}
@Override
public Statement apply(final Statement base, final Description description) {
return new Statement() {
@Override
public void evaluate() throws Throwable {
System.setProperty(Constants.LOG4J_LOG_EVENT_FACTORY, TestLogEventFactory.class.getName());
resetLogEventFactory(new TestLogEventFactory());
try {
base.evaluate();
} finally {
System.clearProperty(Constants.LOG4J_LOG_EVENT_FACTORY);
resetLogEventFactory(new DefaultLogEventFactory());
}
}
private void resetLogEventFactory(final LogEventFactory logEventFactory) throws IllegalAccessException {
final Field field = FieldUtils.getField(LoggerConfig.class, "LOG_EVENT_FACTORY", true);
FieldUtils.removeFinalModifier(field, true);
FieldUtils.writeStaticField(field, logEventFactory, false);
}
};
}
@Test
public void resetLevel() {
final org.apache.logging.log4j.Logger logger = context.getLogger("com.apache.test");
logger.traceEntry();
List<LogEvent> events = app.getEvents();
assertEquals("Incorrect number of events. Expected 1, actual " + events.size(), 1, events.size());
app.clear();
final LoggerContext ctx = LoggerContext.getContext(false);
final Configuration config = ctx.getConfiguration();
final LoggerConfig loggerConfig = config.getLoggerConfig(LogManager.ROOT_LOGGER_NAME);
/* You could also specify the actual logger name as below and it will return the LoggerConfig used by the Logger.
LoggerConfig loggerConfig = getLoggerConfig("com.apache.test");
*/
loggerConfig.setLevel(Level.DEBUG);
ctx.updateLoggers(); // This causes all Loggers to refetch information from their LoggerConfig.
logger.traceEntry();
events = app.getEvents();
assertEquals("Incorrect number of events. Expected 0, actual " + events.size(), 0, events.size());
}
private static void addFileAppender(String logFilename) throws IOException {
File logFile = new File(logFilename);
Object ctx = LogManager.getContext(false);
if (ctx instanceof LoggerContext) {
try (LoggerContext context = (LoggerContext) ctx) {
Configuration configuration = context.getConfiguration();
LoggerConfig loggerConfig = configuration.getLoggerConfig(LogManager.ROOT_LOGGER_NAME);
FileAppender fileAppender =
FileAppender.newBuilder()
.setName("file")
.setLayout(
PatternLayout.newBuilder()
.withPattern("[%d][%-5.-5p][%-14.-14c{1}:%4L] %-22.-22M - %m%n")
.build())
.withFileName(logFile.getCanonicalPath())
.build();
configuration.addAppender(fileAppender);
loggerConfig.addAppender(fileAppender, Level.ERROR, null);
context.updateLoggers();
}
}
}
/**
* Constructor to create the default configuration.
*/
public CustomConfiguration(final LoggerContext loggerContext, final ConfigurationSource source) {
super(loggerContext, source);
setName(CONFIG_NAME);
final Layout<? extends Serializable> layout = PatternLayout.newBuilder()
.setPattern(DEFAULT_PATTERN)
.setConfiguration(this)
.build();
final Appender appender = ConsoleAppender.createDefaultAppenderForLayout(layout);
appender.start();
addAppender(appender);
final LoggerConfig root = getRootLogger();
root.addAppender(appender, null, null);
final String levelName = PropertiesUtil.getProperties().getStringProperty(DEFAULT_LEVEL);
final Level level = levelName != null && Level.valueOf(levelName) != null ?
Level.valueOf(levelName) : Level.ERROR;
root.setLevel(level);
}
private static void registerLoggerConfigs(final LoggerContext ctx, final MBeanServer mbs, final Executor executor)
throws InstanceAlreadyExistsException, MBeanRegistrationException, NotCompliantMBeanException {
final Map<String, LoggerConfig> map = ctx.getConfiguration().getLoggers();
for (final String name : map.keySet()) {
final LoggerConfig cfg = map.get(name);
final LoggerConfigAdmin mbean = new LoggerConfigAdmin(ctx, cfg);
register(mbs, mbean, mbean.getObjectName());
if (cfg instanceof AsyncLoggerConfig) {
final AsyncLoggerConfig async = (AsyncLoggerConfig) cfg;
final RingBufferAdmin rbmbean = async.createRingBufferAdmin(ctx.getName());
register(mbs, rbmbean, rbmbean.getObjectName());
}
}
}
/**
* Dynamically change log4j log level through property solr.log.level
* @param logLevel String with level, should be one of the supported, e.g. TRACE, DEBUG, INFO, WARN, ERROR...
* @return true if ok or else false if something happened, e.g. log4j classes were not in classpath
*/
@SuppressForbidden(reason = "Legitimate log4j2 access")
public static boolean changeLogLevel(String logLevel) {
try {
if (!isLog4jActive()) {
logNotSupported("Could not change log level.");
return false;
}
LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
Configuration config = ctx.getConfiguration();
LoggerConfig loggerConfig = config.getRootLogger();
loggerConfig.setLevel(Level.toLevel(logLevel, Level.INFO));
ctx.updateLoggers();
return true;
} catch (Exception e) {
logNotSupported("Could not change log level.");
return false;
}
}
/**
* Configures rolling file loggers.
*
* @param filename the filename to output logging to.
* @param loggers the logger names.
*/
private void configureLoggers( String filename, List<String> loggers )
{
String file = getLogFile( filename );
RollingFileAppender appender = getRollingFileAppender( file );
getLogConfiguration().addAppender( appender );
AppenderRef[] refs = createAppenderRef( "Ref_" + filename );
for ( String loggerName : loggers )
{
LoggerConfig loggerConfig = LoggerConfig.createLogger( true, Level.INFO, loggerName, "true", refs, null,
getLogConfiguration(), null );
loggerConfig.addAppender(appender, null, null);
getLogConfiguration().addLogger(loggerName, loggerConfig);
log.info( "Added logger: " + loggerName + " using file: " + file );
}
}
@Test
public void testPropertiesConfiguration() {
final Configuration config = context.getConfiguration();
assertNotNull("No configuration created", config);
assertEquals("Incorrect State: " + config.getState(), config.getState(), LifeCycle.State.STARTED);
final Map<String, Appender> appenders = config.getAppenders();
assertNotNull(appenders);
assertTrue("Incorrect number of Appenders: " + appenders.size(), appenders.size() == 1);
final Map<String, LoggerConfig> loggers = config.getLoggers();
assertNotNull(loggers);
assertTrue("Incorrect number of LoggerConfigs: " + loggers.size(), loggers.size() == 1);
final Filter filter = config.getFilter();
assertNotNull("No Filter", filter);
assertTrue("Not a Threshold Filter", filter instanceof ThresholdFilter);
final Logger logger = LogManager.getLogger(getClass());
logger.info("Welcome to Log4j!");
}
public static void main(String[] args) throws Exception{
LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
Configuration config = ctx.getConfiguration();
LoggerConfig loggerConfig = config.getLoggerConfig(LogManager.ROOT_LOGGER_NAME);
loggerConfig.setLevel(Level.DEBUG);
ctx.updateLoggers();
MultiLabelClfDataSet dataSet = TRECFormat.loadMultiLabelClfDataSet(new File(DATASETS, "scene/train"),
DataSetType.ML_CLF_DENSE, true);
MultiLabelClfDataSet testSet = TRECFormat.loadMultiLabelClfDataSet(new File(DATASETS, "scene/test"),
DataSetType.ML_CLF_DENSE, true);
AugmentedLR augmentedLR = new AugmentedLR(dataSet.getNumFeatures(), 1);
double[][] gammas = new double[dataSet.getNumDataPoints()][1];
for (int i=0;i<dataSet.getNumDataPoints();i++){
gammas[i][0]=1;
}
AugmentedLRLoss loss = new AugmentedLRLoss(dataSet, 0, gammas, augmentedLR, 1, 1);
LBFGS lbfgs = new LBFGS(loss);
for (int i=0;i<100;i++){
lbfgs.iterate();
System.out.println(loss.getValue());
}
}
String addAppender(final Writer writer) {
final String name = "openfire-s2s-test-appender-" + StringUtils.randomString( 10 );
final LoggerContext context = LoggerContext.getContext(false);
final Configuration config = context.getConfiguration();
final PatternLayout layout = PatternLayout.createDefaultLayout(config);
final Appender appender = WriterAppender.createAppender(layout, null, writer, name, false, true);
appender.start();
config.addAppender(appender);
final Level level = null;
final Filter filter = null;
for (final LoggerConfig loggerConfig : config.getLoggers().values()) {
loggerConfig.addAppender(appender, level, filter);
}
config.getRootLogger().addAppender(appender, level, filter);
return name;
}
@Test
public void testLevelInheritence() throws Exception {
final Configuration config = context.getConfiguration();
final LoggerConfig loggerConfig = config.getLoggerConfig("org.apache.logging.log4j.core.LoggerTest");
assertNotNull(loggerConfig);
assertEquals(loggerConfig.getName(), "org.apache.logging.log4j.core.LoggerTest");
assertEquals(loggerConfig.getLevel(), Level.DEBUG);
final Logger localLogger = context.getLogger("org.apache.logging.log4j.core.LoggerTest");
assertTrue("Incorrect level - expected DEBUG, actual " + localLogger.getLevel(), localLogger.getLevel() == Level.DEBUG);
}
private Layout<?> testFile(final String configResource) throws Exception {
final Configuration configuration = getConfiguration(configResource);
final FileAppender appender = configuration.getAppender("File");
assertNotNull(appender);
assertEquals("target/mylog.txt", appender.getFileName());
//
final LoggerConfig loggerConfig = configuration.getLoggerConfig("com.example.foo");
assertNotNull(loggerConfig);
assertEquals(Level.DEBUG, loggerConfig.getLevel());
configuration.start();
configuration.stop();
return appender.getLayout();
}
public void start(LogConfig abyLogConfig) {
//为false时,返回多个LoggerContext对象, true:返回唯一的单例LoggerContext
final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
final Configuration config = ctx.getConfiguration();
org.apache.logging.log4j.core.Logger cfgLogger = (org.apache.logging.log4j.core.Logger) LogManager.getLogger(abyLogConfig.getCfgLogName());
if (cfgLogger == null) {
LogManager.getLogger(LogFactory.class).error("not found {} logger (please define in log4j2.xml)", abyLogConfig.getCfgLogName());
return;
}
List<AppenderRef> appenderRefs = new ArrayList<>();
Map<String, Appender> appenderMap = cfgLogger.getAppenders();
List<Appender> appenders = new ArrayList<>();
appenderMap.forEach((key, appenderCfg) -> {
Appender appender;
if (appenderCfg instanceof ConsoleAppender) {
appender = appenderCfg;
} else {
appender = getAppender(abyLogConfig, config, appenderCfg);
}
if (appender != null) {
AppenderRef ref = AppenderRef.createAppenderRef(appender.getName(), Level.ALL, null);
appenderRefs.add(ref);
appenders.add(appender);
}
});
if (CollectionUtils.isEmpty(appenders)) {
return;
}
AppenderRef[] refs = new AppenderRef[appenderRefs.size()];
refs = appenderRefs.toArray(refs);
LoggerConfig loggerConfig = LoggerConfig.createLogger(false, cfgLogger.getLevel(), abyLogConfig.getName(),
"true", refs, null, config, null);
appenders.stream().forEach(e ->
loggerConfig.addAppender(e, Level.ALL, null)
);
config.addLogger(abyLogConfig.getName(), loggerConfig);
ctx.updateLoggers(config);
}
public void start(Logger cfgLogger, String clKey) {
//为false时,返回多个LoggerContext对象, true:返回唯一的单例LoggerContext
final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
final Configuration config = ctx.getConfiguration();
List<AppenderRef> appenderRefs = new ArrayList<>();
Map<String, Appender> appenderMap = ((org.apache.logging.log4j.core.Logger) cfgLogger).getAppenders();
List<Appender> appenders = new ArrayList<>();
appenderMap.forEach((key, appenderCfg) -> {
Appender appender;
if (appenderCfg instanceof ConsoleAppender) {
appender = appenderCfg;
} else {
appender = getAppender(clKey, config, appenderCfg);
}
if (appender != null && appender.isStopped()) {
appender.start();
}
if (appender != null) {
AppenderRef ref = AppenderRef.createAppenderRef(appender.getName(), Level.ALL, null);
appenderRefs.add(ref);
appenders.add(appender);
}
});
if (CollectionUtils.isEmpty(appenders)) {
return;
}
AppenderRef[] refs = new AppenderRef[appenderRefs.size()];
refs = appenderRefs.toArray(refs);
LoggerConfig loggerConfig = LoggerConfig.createLogger(false, cfgLogger.getLevel(), clKey, "true", refs, null, config, null);
appenders.stream().forEach(e ->
loggerConfig.addAppender(e, Level.ALL, null)
);
config.addLogger(clKey, loggerConfig);
ctx.updateLoggers(config);
}
private static Level setLogLevel(Level logLevel) {
LoggerContext loggerContext = (LoggerContext) LogManager.getContext(false);
Configuration configuration = loggerContext.getConfiguration();
LoggerConfig loggerConfig = configuration.getLoggerConfig(LOGGER_NAME);
Level previousLevel = loggerConfig.getLevel();
loggerConfig.setLevel(logLevel);
loggerContext.updateLoggers();
return previousLevel;
}
private static void removeWriterAppender(final LoggerContext context) {
final Configuration config = context.getConfiguration();
LoggerConfig rootConfig = config.getRootLogger();
// Stopping the logger is subject to race conditions where logging during cleanup on global executor
// may still try to log and raise an error.
WriterAppender writerAppender = (WriterAppender) rootConfig.getAppenders().get(APPENDER_NAME);
if (writerAppender != null) {
writerAppender.stop(0, NANOSECONDS);
}
// Don't remove directly from map, because the root logger also cleans up filters.
rootConfig.removeAppender(APPENDER_NAME);
}
/**
* Used internally to parse a level element.
*/
private void parseLevel(Element element, LoggerConfig logger, boolean isRoot) {
String catName = logger.getName();
if (isRoot) {
catName = "root";
}
String priStr = subst(element.getAttribute(VALUE_ATTR));
LOGGER.debug("Level value for {} is [{}}].", catName, priStr);
if (INHERITED.equalsIgnoreCase(priStr) || NULL.equalsIgnoreCase(priStr)) {
if (isRoot) {
LOGGER.error("Root level cannot be inherited. Ignoring directive.");
} else {
logger.setLevel(null);
}
} else {
String className = subst(element.getAttribute(CLASS_ATTR));
if (EMPTY_STR.equals(className)) {
logger.setLevel(OptionConverter.convertLevel(priStr, org.apache.logging.log4j.Level.DEBUG));
} else {
LOGGER.debug("Desired Level sub-class: [{}]", className);
try {
Class<?> clazz = LoaderUtil.loadClass(className);
Method toLevelMethod = clazz.getMethod("toLevel", ONE_STRING_PARAM);
Level pri = (Level) toLevelMethod.invoke(null, new Object[]{priStr});
logger.setLevel(OptionConverter.convertLevel(pri));
} catch (Exception oops) {
if (oops instanceof InterruptedException || oops instanceof InterruptedIOException) {
Thread.currentThread().interrupt();
}
LOGGER.error("Could not create level [" + priStr +
"]. Reported error follows.", oops);
return;
}
}
}
LOGGER.debug("{} level set to {}", catName, logger.getLevel());
}
/**
* This method is only used for 1.x compatibility. Returns the parent of this Logger. If it doesn't already exist
* return a temporary Logger.
*
* @return The parent Logger.
*/
public Logger getParent() {
final LoggerConfig lc = privateConfig.loggerConfig.getName().equals(getName()) ? privateConfig.loggerConfig
.getParent() : privateConfig.loggerConfig;
if (lc == null) {
return null;
}
final String lcName = lc.getName();
final MessageFactory messageFactory = getMessageFactory();
if (context.hasLogger(lcName, messageFactory)) {
return context.getLogger(lcName, messageFactory);
}
return new Logger(context, lcName, messageFactory);
}
private static LoggerConfig setUpValidatorLogger(final Appender appender) {
// Don't disable validator error logs unless the root log level disables error.
final Level validatorLogLevel =
INCLUDE_VALIDATOR_DUTIES || ROOT_LOG_LEVEL.isMoreSpecificThan(Level.ERROR)
? ROOT_LOG_LEVEL
: Level.ERROR;
final LoggerConfig logger = new LoggerConfig(VALIDATOR_LOGGER_NAME, validatorLogLevel, true);
logger.addAppender(appender, ROOT_LOG_LEVEL, null);
return logger;
}