Package org.springframework.boot.logging.log4j2

Source Code of org.springframework.boot.logging.log4j2.Log4J2LoggingSystem

/*
* Copyright 2012-2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.springframework.boot.logging.log4j2;

import java.net.URL;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.ConfigurationFactory;
import org.apache.logging.log4j.core.config.ConfigurationSource;
import org.springframework.boot.logging.LogLevel;
import org.springframework.boot.logging.LoggingSystem;
import org.springframework.boot.logging.Slf4JLoggingSystem;
import org.springframework.util.Assert;
import org.springframework.util.ResourceUtils;
import org.springframework.util.StringUtils;

/**
* {@link LoggingSystem} for <a href="http://logging.apache.org/log4j/2.x/">Log4j 2</a>.
*
* @author Daniel Fullarton
* @author Andy Wilkinson
* @since 1.2.0
*/
public class Log4J2LoggingSystem extends Slf4JLoggingSystem {

  private static final Map<LogLevel, Level> LEVELS;
  static {
    Map<LogLevel, Level> levels = new HashMap<LogLevel, Level>();
    levels.put(LogLevel.TRACE, Level.TRACE);
    levels.put(LogLevel.DEBUG, Level.DEBUG);
    levels.put(LogLevel.INFO, Level.INFO);
    levels.put(LogLevel.WARN, Level.WARN);
    levels.put(LogLevel.ERROR, Level.ERROR);
    levels.put(LogLevel.FATAL, Level.ERROR);
    levels.put(LogLevel.OFF, Level.OFF);
    LEVELS = Collections.unmodifiableMap(levels);
  }

  public Log4J2LoggingSystem(ClassLoader classLoader) {
    super(classLoader);
  }

  @Override
  protected String[] getStandardConfigLocations() {
    return new String[] { "log4j2.json", "log4j2.jsn", "log4j2.xml" };
  }

  @Override
  public void beforeInitialize() {
    super.beforeInitialize();
    setLogLevel("", LogLevel.FATAL);
  }

  @Override
  protected void loadDefaults(String logFile) {
    if (StringUtils.hasLength(logFile)) {
      loadConfiguration(getPackagedConfigFile("log4j2-file.xml"), logFile);
    }
    else {
      loadConfiguration(getPackagedConfigFile("log4j2.xml"), logFile);
    }
  }

  @Override
  protected void loadConfiguration(String location, String logFile) {
    Assert.notNull(location, "Location must not be null");
    if (StringUtils.hasLength(logFile)) {
      System.setProperty("LOG_FILE", logFile);
    }
    try {
      LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
      URL url = ResourceUtils.getURL(location);
      ConfigurationSource source = new ConfigurationSource(url.openStream(), url);
      ctx.start(ConfigurationFactory.getInstance().getConfiguration(source));
    }
    catch (Exception ex) {
      throw new IllegalStateException("Could not initialize Log4J2 logging from "
          + location, ex);
    }
  }

  @Override
  public void setLogLevel(String loggerName, LogLevel level) {
    LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
    ctx.getConfiguration().getLoggerConfig(loggerName == null ? "" : loggerName)
        .setLevel(LEVELS.get(level));
    ctx.updateLoggers();
  }

}
TOP

Related Classes of org.springframework.boot.logging.log4j2.Log4J2LoggingSystem

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.