content: package com.genersoft.iot.vmp.gb28181.conf;
  
  import gov.nist.core.StackLogger;
  import org.slf4j.LoggerFactory;
  import org.slf4j.spi.LocationAwareLogger;
  import org.springframework.stereotype.Component;
  
  import java.util.Properties;
  
  @Component
  public class StackLoggerImpl implements StackLogger {
  
  	/**
  	 * 完全限定类名(Fully Qualified Class Name)，用于定位日志位置
  	 */
  	private static final String FQCN = StackLoggerImpl.class.getName();
  
  	/**
  	 * 获取栈中类信息(以便底层日志记录系统能够提取正确的位置信息(方法名、行号))
  	 * @return LocationAwareLogger
  	 */
  	private static LocationAwareLogger getLocationAwareLogger() {
  		return (LocationAwareLogger) LoggerFactory.getLogger(new Throwable().getStackTrace()[4].getClassName());
  	}
  
  
  	/**
  	 * 封装打印日志的位置信息
  	 * @param level   日志级别
  	 * @param message 日志事件的消息
  	 */
  	private static void log(int level, String message) {
  		LocationAwareLogger locationAwareLogger = getLocationAwareLogger();
  		locationAwareLogger.log(null, FQCN, level, message, null, null);
  	}
  
  	/**
  	 * 封装打印日志的位置信息
  	 * @param level   日志级别
  	 * @param message 日志事件的消息
  	 */
  	private static void log(int level, String message, Throwable throwable) {
  		LocationAwareLogger locationAwareLogger = getLocationAwareLogger();
  		locationAwareLogger.log(null, FQCN, level, message, null, throwable);
  	}
  
  	@Override
  	public void logStackTrace() {
  
  	}
  
  	@Override
  	public void logStackTrace(int traceLevel) {
  		System.out.println("traceLevel: " + traceLevel);
  	}
  
  	@Override
  	public int getLineCount() {
  		return 0;
  	}
  
  	@Override
  	public void logException(Throwable ex) {
  
  	}
  
  	@Override
  	public void logDebug(String message) {
  		log(LocationAwareLogger.INFO_INT, message);
  	}
  
  	@Override
  	public void logDebug(String message, Exception ex) {
  		log(LocationAwareLogger.INFO_INT, message, ex);
  	}
  
  	@Override
  	public void logTrace(String message) {
  		log(LocationAwareLogger.INFO_INT, message);
  	}
  
  	@Override
  	public void logFatalError(String message) {
  		log(LocationAwareLogger.INFO_INT, message);
  	}
  
  	@Override
  	public void logError(String message) {
  		log(LocationAwareLogger.INFO_INT, message);
  	}
  
  	@Override
  	public boolean isLoggingEnabled() {
  		return true;
  	}
  
  	@Override
  	public boolean isLoggingEnabled(int logLevel) {
  		return true;
  	}
  
  	@Override
  	public void logError(String message, Exception ex) {
  		log(LocationAwareLogger.INFO_INT, message, ex);
  	}
  
  	@Override
  	public void logWarning(String message) {
  		log(LocationAwareLogger.INFO_INT, message);
  	}
  
  	@Override
  	public void logInfo(String message) {
  		log(LocationAwareLogger.INFO_INT, message);
  	}
  
  	@Override
  	public void disableLogging() {
  
  	}
  
  	@Override
  	public void enableLogging() {
  
  	}
  
  	@Override
  	public void setBuildTimeStamp(String buildTimeStamp) {
  
  	}
  
  	@Override
  	public void setStackProperties(Properties stackProperties) {
  
  	}
  
  	@Override
  	public String getLoggerName() {
  		return null;
  	}
  }
  