最近用到,spring boot的日志组件logback,将通用的一些配置和操作分享一下
日志级别动态调整,主要是项目运行期间做日志降级,排查问题调整日志级别等
核心思想:
ch.qos.logback.classic.LoggerContext
logback可以通过LoggerContext获取所有的logger;
logback可以通过ch.qos.logback.classic.Logger.setLevel(ch.qos.logback.classic.Level);控制打印的日志级别
这里不废话了,直接贴源码:
Controller层源码
import ch.qos.logback.classic.Level;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
/**
* 日志级别controller
*/
@RestController
@RequestMapping(value = "/log/level")
@Slf4j
public class LogLevelController {
/**
* 日志级别服务
*/
@Autowired
private LogLevelService logLevelService;
/**
* 获取日志级别列表
*
* @return 日志级别信息
*/
@RequestMapping(method = RequestMethod.GET, produces = "application/json")
@ResponseBody
public ResponseEntity> getLogLevelList() {
List logLevelDtoList = new ArrayList<>();
logLevelService.getLogLevel().stream().forEach(item -> {
logLevelDtoList.add(new LogLevelDto(item.getName(), null == item.getLevel() ? "" : item.getLevel().levelStr));
});
ResponseEntity> response = new ResponseEntity>(logLevelDtoList, HttpStatus.OK);
log.info("res:{}", response);
return response;
}
/**
* 设置日志级别
*
* @param logLevelDto 日志级别
* @return 设置结果
*/
@RequestMapping(method = RequestMethod.POST, produces = "application/json", consumes = "application/json")
@ResponseBody
public ResponseEntity setLogLevel(@RequestBody LogLevelDto logLevelDto) {
LogLevelPojo logLevelPojo = new LogLevelPojo(logLevelDto.getName(), Level.toLevel(logLevelDto.getLevel()));
logLevelService.setLogLevel(logLevelPojo);
return new ResponseEntity<>(null, HttpStatus.OK);
}
}
Service层源码
接口定义
import java.util.List;
/**
* 日志级别服务
*/
public interface LogLevelService {
/**
* 获取日志级别列表
*
* @return 日志级别列表
*/
List getLogLevel();
/**
* 设置日志级别
*
* @param logLevelPojo 设置日志级别请求
*/
void setLogLevel(LogLevelPojo logLevelPojo);
}
接口实现
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* 日志级别服务
*/
@Service
public class LogLevelServiceImpl implements LogLevelService {
@Override
public List getLogLevel() {
List logLevelList = new ArrayList<>();
if (LoggerFactory.getILoggerFactory() instanceof LoggerContext) {
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
loggerContext.getLoggerList().stream().forEach(item -> {
logLevelList.add(new LogLevelPojo(item.getName(), item.getLevel()));
});
}
return logLevelList;
}
@Override
public void setLogLevel(LogLevelPojo logLevelPojo) {
if (LoggerFactory.getILoggerFactory() instanceof LoggerContext) {
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
Logger logger = loggerContext.getLogger(logLevelPojo.getName());
int oldLevelInteger = null == logger.getLevel() ? -1 : logger.getLevel().levelInt;
int newLevelInteger = logLevelPojo.getLevel().levelInt;
if (oldLevelInteger != newLevelInteger) {
logger.setLevel(logLevelPojo.getLevel());
}
}
}
}
pojo对象
import ch.qos.logback.classic.Level;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
/**
* 日志级别
*/
@Getter
@Setter
@AllArgsConstructor
public class LogLevelPojo implements Serializable {
/**
* logger name
*/
private String name;
/**
* logger level
*/
private Level level;
}
dto对象
import lombok.*;
import java.io.Serializable;
/**
* 日志级别
*/
@Getter
@Setter
@AllArgsConstructor
@ToString
@EqualsAndHashCode(callSuper = false)
public class LogLevelDto implements Serializable {
/**
* logger名称
*/
private String name;
/**
* logger级别
*/
private String level;
}
实验下效果:
获取当前logback的所有logger:
GET: http://localhost:8080/log/level
其中"level":"" 说明默认的,没有配置日志级别,未配置则与ROOT 相同,都是INFO级别日志
[{"name":"ROOT","level":"INFO"},{"name":"_org","level":""},{"name":"_org.springframework","level":""},{"name":"_org.springframework.web","level":""},{"name":"_org.springframework.web.servlet","level":""},{"name":"_org.springframework.web.servlet.HandlerMapping","level":""},{"name":"_org.springframework.web.servlet.HandlerMapping.Mappings","level":""},{"name":"com","level":""},{"name":"com.zaxxer","level":""},{"name":"com.zaxxer.hikari","level":""},{"name":"com.zaxxer.hikari.HikariConfig","level":""},{"name":"com.zaxxer.hikari.HikariDataSource","level":""},{"name":"com.zaxxer.hikari.pool","level":""},{"name":"com.zaxxer.hikari.pool.HikariPool","level":""},{"name":"com.zaxxer.hikari.pool.PoolBase","level":""},{"name":"com.zaxxer.hikari.pool.PoolEntry","level":""},{"name":"com.zaxxer.hikari.pool.ProxyConnection","level":""},{"name":"com.zaxxer.hikari.pool.ProxyLeakTask","level":""},{"name":"com.zaxxer.hikari.util","level":""},{"name":"com.zaxxer.hikari.util.ConcurrentBag","level":""},{"name":"com.zaxxer.hikari.util.DriverDataSource","level":""},{"name":"org","level":""},{"name":"org.apache","level":""},{"name":"org.apache.catalina","level":""},{"name":"org.apache.catalina.core","level":""},{"name":"org.apache.catalina.core.ContainerBase","level":""},{"name":"org.apache.catalina.core.ContainerBase.[Tomcat]","level":""},{"name":"org.apache.catalina.core.ContainerBase.[Tomcat].[localhost]","level":""},{"name":"org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]","level":""},{"name":"org.apache.catalina.core.StandardEngine","level":""},{"name":"org.apache.catalina.core.StandardService","level":""},{"name":"org.apache.coyote","level":""},{"name":"org.apache.coyote.http11","level":""},{"name":"org.apache.coyote.http11.Http11NioProtocol","level":""},{"name":"org.hibernate","level":""},{"name":"org.hibernate.MultiTenancyStrategy","level":""},{"name":"org.hibernate.SQL","level":""},{"name":"org.hibernate.SQL_SLOW","level":""},{"name":"org.hibernate.Version","level":""},{"name":"org.hibernate.annotations","level":""},{"name":"org.hibernate.annotations.common","level":""},{"name":"org.hibernate.annotations.common.Version","level":""},{"name":"org.hibernate.annotations.common.util","level":""},{"name":"org.hibernate.annotations.common.util.StandardClassLoaderDelegateImpl","level":""},{"name":"org.hibernate.boot","level":""},{"name":"org.hibernate.boot.MetadataSources","level":""},{"name":"org.hibernate.boot.cfgxml","level":""},{"name":"org.hibernate.boot.cfgxml.internal","level":""},{"name":"org.hibernate.boot.cfgxml.internal.ConfigLoader","level":""},{"name":"org.hibernate.boot.cfgxml.spi","level":""},{"name":"org.hibernate.boot.cfgxml.spi.LoadedConfig","level":""},{"name":"org.hibernate.boot.internal","level":""},{"name":"org.hibernate.boot.internal.BootstrapContextImpl","level":""},{"name":"org.hibernate.boot.internal.ClassLoaderAccessImpl","level":""},{"name":"org.hibernate.boot.internal.IdGeneratorInterpreterImpl","level":""},{"name":"org.hibernate.boot.internal.InFlightMetadataCollectorImpl","level":""},{"name":"org.hibernate.boot.internal.MetadataBuilderImpl","level":""},{"name":"org.hibernate.boot.internal.SessionFactoryOptionsBuilder","level":""},{"name":"org.hibernate.boot.jaxb","level":""},{"name":"org.hibernate.boot.jaxb.internal","level":""},{"name":"org.hibernate.boot.jaxb.internal.AbstractBinder","level":""},{"name":"org.hibernate.boot.jaxb.internal.MappingBinder","level":""},{"name":"org.hibernate.boot.jaxb.internal.stax","level":""},{"name":"org.hibernate.boot.jaxb.internal.stax.LocalSchemaLocator","level":""},{"name":"org.hibernate.boot.jaxb.internal.stax.LocalXmlResourceResolver","level":""},{"name":"org.hibernate.boot.model","level":""},{"name":"org.hibernate.boot.model.convert","level":""},{"name":"org.hibernate.boot.model.convert.internal","level":""},{"name":"org.hibernate.boot.model.convert.internal.AttributeConverterManager","level":""},{"name":"org.hibernate.boot.model.process","level":""},{"name":"org.hibernate.boot.model.process.internal","level":""},{"name":"org.hibernate.boot.model.process.internal.ScanningCoordinator","level":""},{"name":"org.hibernate.boot.model.process.spi","level":""},{"name":"org.hibernate.boot.model.process.spi.MetadataBuildingProcess","level":""},{"name":"org.hibernate.boot.model.relational","level":""},{"name":"org.hibernate.boot.model.relational.Namespace","level":""},{"name":"org.hibernate.boot.model.relational.internal","level":""},{"name":"org.hibernate.boot.model.relational.internal.SqlStringGenerationContextImpl","level":""},{"name":"org.hibernate.boot.model.source","level":""},{"name":"org.hibernate.boot.model.source.internal","level":""},{"name":"org.hibernate.boot.model.source.internal.annotations","level":""},{"name":"org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl","level":""},{"name":"org.hibernate.boot.model.source.internal.hbm","level":""},{"name":"org.hibernate.boot.model.source.internal.hbm.EntityHierarchyBuilder","level":""},{"name":"org.hibernate.boot.model.source.internal.hbm.HbmMetadataSourceProcessorImpl","level":""},{"name":"org.hibernate.boot.model.source.internal.hbm.ModelBinder","level":""},{"name":"org.hibernate.boot.registry","level":""},{"name":"org.hibernate.boot.registry.classloading","level":""},{"name":"org.hibernate.boot.registry.classloading.internal","level":""},{"name":"org.hibernate.boot.registry.classloading.internal.AggregatedServiceLoader","level":""},{"name":"org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl","level":""},{"name":"org.hibernate.boot.registry.internal","level":""},{"name":"org.hibernate.boot.registry.internal.BootstrapServiceRegistryImpl","level":""},{"name":"org.hibernate.boot.registry.selector","level":""},{"name":"org.hibernate.boot.registry.selector.internal","level":""},{"name":"org.hibernate.boot.registry.selector.internal.StrategySelectorBuilder","level":""},{"name":"org.hibernate.boot.registry.selector.internal.StrategySelectorImpl","level":""},{"name":"org.hibernate.boot.spi","level":""},{"name":"org.hibernate.boot.spi.XmlMappingBinderAccess","level":""},{"name":"org.hibernate.bytecode","level":""},{"name":"org.hibernate.bytecode.internal","level":""},{"name":"org.hibernate.bytecode.internal.bytebuddy","level":""},{"name":"org.hibernate.bytecode.internal.bytebuddy.ByteBuddyState","level":""},{"name":"org.hibernate.bytecode.spi","level":""},{"name":"org.hibernate.bytecode.spi.ClassLoadingStrategyHelper","level":""},{"name":"org.hibernate.cache","level":""},{"name":"org.hibernate.cache.internal","level":""},{"name":"org.hibernate.cache.internal.CollectionCacheInvalidator","level":""},{"name":"org.hibernate.cache.internal.RegionFactoryInitiator","level":""},{"name":"org.hibernate.cache.internal.StrategyCreatorRegionFactoryImpl","level":""},{"name":"org.hibernate.cfg","level":""},{"name":"org.hibernate.cfg.AbstractPropertyHolder","level":""},{"name":"org.hibernate.cfg.AnnotationBinder","level":""},{"name":"org.hibernate.cfg.BinderHelper","level":""},{"name":"org.hibernate.cfg.Ejb3Column","level":""},{"name":"org.hibernate.cfg.Environment","level":""},{"name":"org.hibernate.cfg.PropertyContainer","level":""},{"name":"org.hibernate.cfg.Settings","level":""},{"name":"org.hibernate.cfg.annotations","level":""},{"name":"org.hibernate.cfg.annotations.EntityBinder","level":""},{"name":"org.hibernate.cfg.annotations.PropertyBinder","level":""},{"name":"org.hibernate.cfg.annotations.QueryBinder","level":""},{"name":"org.hibernate.cfg.annotations.ResultsetMappingSecondPass","level":""},{"name":"org.hibernate.cfg.annotations.SimpleValueBinder","level":""},{"name":"org.hibernate.cfg.annotations.TableBinder","level":""},{"name":"org.hibernate.cfg.annotations.reflection","level":""},{"name":"org.hibernate.cfg.annotations.reflection.internal","level":""},{"name":"org.hibernate.cfg.annotations.reflection.internal.XMLContext","level":""},{"name":"org.hibernate.cfg.beanvalidation","level":""},{"name":"org.hibernate.cfg.beanvalidation.BeanValidationIntegrator","level":""},{"name":"org.hibernate.dialect","level":""},{"name":"org.hibernate.dialect.Dialect","level":""},{"name":"org.hibernate.dialect.function","level":""},{"name":"org.hibernate.dialect.function.TemplateRenderer","level":""},{"name":"org.hibernate.engine","level":""},{"name":"org.hibernate.engine.config","level":""},{"name":"org.hibernate.engine.config.internal","level":""},{"name":"org.hibernate.engine.config.internal.ConfigurationServiceImpl","level":""},{"name":"org.hibernate.engine.internal","level":""},{"name":"org.hibernate.engine.internal.EntityEntryContext","level":""},{"name":"org.hibernate.engine.internal.StatefulPersistenceContext","level":""},{"name":"org.hibernate.engine.jdbc","level":""},{"name":"org.hibernate.engine.jdbc.connections","level":""},{"name":"org.hibernate.engine.jdbc.connections.internal","level":""},{"name":"org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator","level":""},{"name":"org.hibernate.engine.jdbc.connections.internal.MultiTenantConnectionProviderInitiator","level":""},{"name":"org.hibernate.engine.jdbc.cursor","level":""},{"name":"org.hibernate.engine.jdbc.cursor.internal","level":""},{"name":"org.hibernate.engine.jdbc.cursor.internal.StandardRefCursorSupport","level":""},{"name":"org.hibernate.engine.jdbc.dialect","level":""},{"name":"org.hibernate.engine.jdbc.dialect.internal","level":""},{"name":"org.hibernate.engine.jdbc.dialect.internal.DialectResolverSet","level":""},{"name":"org.hibernate.engine.jdbc.env","level":""},{"name":"org.hibernate.engine.jdbc.env.internal","level":""},{"name":"org.hibernate.engine.jdbc.env.internal.DefaultSchemaNameResolver","level":""},{"name":"org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentImpl","level":""},{"name":"org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator","level":""},{"name":"org.hibernate.engine.jdbc.env.internal.LobCreatorBuilderImpl","level":""},{"name":"org.hibernate.engine.jdbc.env.internal.NormalizingIdentifierHelperImpl","level":""},{"name":"org.hibernate.engine.jdbc.env.spi","level":""},{"name":"org.hibernate.engine.jdbc.env.spi.IdentifierHelperBuilder","level":""},{"name":"org.hibernate.engine.jdbc.internal","level":""},{"name":"org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl","level":""},{"name":"org.hibernate.engine.jdbc.spi","level":""},{"name":"org.hibernate.engine.jdbc.spi.SqlExceptionHelper","level":""},{"name":"org.hibernate.engine.jndi","level":""},{"name":"org.hibernate.engine.jndi.internal","level":""},{"name":"org.hibernate.engine.jndi.internal.JndiServiceImpl","level":""},{"name":"org.hibernate.engine.query","level":""},{"name":"org.hibernate.engine.query.spi","level":""},{"name":"org.hibernate.engine.query.spi.QueryPlanCache","level":""},{"name":"org.hibernate.engine.spi","level":""},{"name":"org.hibernate.engine.spi.ActionQueue","level":""},{"name":"org.hibernate.engine.spi.CascadeStyles","level":""},{"name":"org.hibernate.engine.spi.EffectiveEntityGraph","level":""},{"name":"org.hibernate.engine.spi.IdentifierValue","level":""},{"name":"org.hibernate.engine.spi.VersionValue","level":""},{"name":"org.hibernate.engine.transaction","level":""},{"name":"org.hibernate.engine.transaction.jta","level":""},{"name":"org.hibernate.engine.transaction.jta.platform","level":""},{"name":"org.hibernate.engine.transaction.jta.platform.internal","level":""},{"name":"org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator","level":""},{"name":"org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformResolverInitiator","level":""},{"name":"org.hibernate.event","level":""},{"name":"org.hibernate.event.internal","level":""},{"name":"org.hibernate.event.internal.AbstractFlushingEventListener","level":""},{"name":"org.hibernate.event.internal.AbstractLockUpgradeEventListener","level":""},{"name":"org.hibernate.event.internal.AbstractReassociateEventListener","level":""},{"name":"org.hibernate.event.internal.AbstractSaveEventListener","level":""},{"name":"org.hibernate.event.internal.DefaultAutoFlushEventListener","level":""},{"name":"org.hibernate.event.internal.DefaultDeleteEventListener","level":""},{"name":"org.hibernate.event.internal.DefaultDirtyCheckEventListener","level":""},{"name":"org.hibernate.event.internal.DefaultEvictEventListener","level":""},{"name":"org.hibernate.event.internal.DefaultFlushEntityEventListener","level":""},{"name":"org.hibernate.event.internal.DefaultInitializeCollectionEventListener","level":""},{"name":"org.hibernate.event.internal.DefaultLoadEventListener","level":""},{"name":"org.hibernate.event.internal.DefaultLockEventListener","level":""},{"name":"org.hibernate.event.internal.DefaultMergeEventListener","level":""},{"name":"org.hibernate.event.internal.DefaultPersistEventListener","level":""},{"name":"org.hibernate.event.internal.DefaultRefreshEventListener","level":""},{"name":"org.hibernate.event.internal.DefaultReplicateEventListener","level":""},{"name":"org.hibernate.event.internal.DefaultResolveNaturalIdEventListener","level":""},{"name":"org.hibernate.event.internal.DefaultSaveOrUpdateEventListener","level":""},{"name":"org.hibernate.event.internal.EntityCopyObserverFactoryInitiator","level":""},{"name":"org.hibernate.event.service","level":""},{"name":"org.hibernate.event.service.internal","level":""},{"name":"org.hibernate.event.service.internal.EventListenerGroupImpl","level":""},{"name":"org.hibernate.event.service.internal.PostCommitEventListenerGroupImpl","level":""},{"name":"org.hibernate.hql","level":""},{"name":"org.hibernate.hql.internal","level":""},{"name":"org.hibernate.hql.internal.QueryTranslatorFactoryInitiator","level":""},{"name":"org.hibernate.hql.spi","level":""},{"name":"org.hibernate.hql.spi.id","level":""},{"name":"org.hibernate.hql.spi.id.IdTableHelper","level":""},{"name":"org.hibernate.id","level":""},{"name":"org.hibernate.id.UUIDHexGenerator","level":""},{"name":"org.hibernate.id.factory","level":""},{"name":"org.hibernate.id.factory.internal","level":""},{"name":"org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory","level":""},{"name":"org.hibernate.integrator","level":""},{"name":"org.hibernate.integrator.internal","level":""},{"name":"org.hibernate.integrator.internal.IntegratorServiceImpl","level":""},{"name":"org.hibernate.internal","level":""},{"name":"org.hibernate.internal.SessionFactoryImpl","level":""},{"name":"org.hibernate.internal.SessionFactoryImpl$SessionBuilderImpl","level":""},{"name":"org.hibernate.internal.SessionFactoryRegistry","level":""},{"name":"org.hibernate.internal.SessionImpl","level":""},{"name":"org.hibernate.internal.util","level":""},{"name":"org.hibernate.internal.util.ConfigHelper","level":""},{"name":"org.hibernate.jpa","level":""},{"name":"org.hibernate.jpa.HibernatePersistenceProvider","level":""},{"name":"org.hibernate.jpa.boot","level":""},{"name":"org.hibernate.jpa.boot.internal","level":""},{"name":"org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl","level":""},{"name":"org.hibernate.jpa.event","level":""},{"name":"org.hibernate.jpa.event.internal","level":""},{"name":"org.hibernate.jpa.event.internal.CallbackDefinitionResolverLegacyImpl","level":""},{"name":"org.hibernate.jpa.event.internal.CallbacksFactory","level":""},{"name":"org.hibernate.jpa.internal","level":""},{"name":"org.hibernate.jpa.internal.PersistenceUnitUtilImpl","level":""},{"name":"org.hibernate.jpa.internal.util","level":""},{"name":"org.hibernate.jpa.internal.util.LogHelper","level":""},{"name":"org.hibernate.loader","level":""},{"name":"org.hibernate.loader.BatchFetchStyle","level":""},{"name":"org.hibernate.loader.entity","level":""},{"name":"org.hibernate.loader.entity.plan","level":""},{"name":"org.hibernate.loader.entity.plan.AbstractLoadPlanBasedEntityLoader","level":""},{"name":"org.hibernate.loader.entity.plan.EntityLoader","level":""},{"name":"org.hibernate.loader.plan","level":""},{"name":"org.hibernate.loader.plan.build","level":""},{"name":"org.hibernate.loader.plan.build.internal","level":""},{"name":"org.hibernate.loader.plan.build.internal.AbstractLoadPlanBuildingAssociationVisitationStrategy","level":""},{"name":"org.hibernate.loader.plan.build.internal.FetchStyleLoadPlanBuildingAssociationVisitationStrategy","level":""},{"name":"org.hibernate.loader.plan.build.internal.spaces","level":""},{"name":"org.hibernate.loader.plan.build.internal.spaces.QuerySpacesImpl","level":""},{"name":"org.hibernate.loader.plan.build.spi","level":""},{"name":"org.hibernate.loader.plan.build.spi.LoadPlanTreePrinter","level":""},{"name":"org.hibernate.loader.plan.exec","level":""},{"name":"org.hibernate.loader.plan.exec.internal","level":""},{"name":"org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader","level":""},{"name":"org.hibernate.loader.plan.exec.internal.AliasResolutionContextImpl","level":""},{"name":"org.hibernate.loader.plan.exec.internal.LoadQueryJoinAndFetchProcessor","level":""},{"name":"org.hibernate.loader.plan.exec.process","level":""},{"name":"org.hibernate.loader.plan.exec.process.internal","level":""},{"name":"org.hibernate.loader.plan.exec.process.internal.AbstractRowReader","level":""},{"name":"org.hibernate.loader.plan.exec.process.internal.EntityReferenceInitializerImpl","level":""},{"name":"org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl","level":""},{"name":"org.hibernate.mapping","level":""},{"name":"org.hibernate.mapping.PrimaryKey","level":""},{"name":"org.hibernate.mapping.RootClass","level":""},{"name":"org.hibernate.mapping.SimpleValue","level":""},{"name":"org.hibernate.mapping.Table","level":""},{"name":"org.hibernate.metamodel","level":""},{"name":"org.hibernate.metamodel.internal","level":""},{"name":"org.hibernate.metamodel.internal.AttributeFactory","level":""},{"name":"org.hibernate.metamodel.internal.MetadataContext","level":""},{"name":"org.hibernate.metamodel.internal.MetamodelImpl","level":""},{"name":"org.hibernate.persister","level":""},{"name":"org.hibernate.persister.entity","level":""},{"name":"org.hibernate.persister.entity.AbstractEntityPersister","level":""},{"name":"org.hibernate.persister.entity.AbstractPropertyMapping","level":""},{"name":"org.hibernate.persister.walking","level":""},{"name":"org.hibernate.persister.walking.spi","level":""},{"name":"org.hibernate.persister.walking.spi.MetamodelGraphWalker","level":""},{"name":"org.hibernate.proxy","level":""},{"name":"org.hibernate.proxy.pojo","level":""},{"name":"org.hibernate.proxy.pojo.ProxyFactoryHelper","level":""},{"name":"org.hibernate.proxy.pojo.bytebuddy","level":""},{"name":"org.hibernate.proxy.pojo.bytebuddy.ByteBuddyProxyFactory","level":""},{"name":"org.hibernate.proxy.pojo.bytebuddy.ByteBuddyProxyHelper","level":""},{"name":"org.hibernate.query","level":""},{"name":"org.hibernate.query.spi","level":""},{"name":"org.hibernate.query.spi.NamedQueryRepository","level":""},{"name":"org.hibernate.resource","level":""},{"name":"org.hibernate.resource.jdbc","level":""},{"name":"org.hibernate.resource.jdbc.internal","level":""},{"name":"org.hibernate.resource.jdbc.internal.AbstractLogicalConnectionImplementor","level":""},{"name":"org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl","level":""},{"name":"org.hibernate.resource.jdbc.internal.ResourceRegistryStandardImpl","level":""},{"name":"org.hibernate.resource.transaction","level":""},{"name":"org.hibernate.resource.transaction.backend","level":""},{"name":"org.hibernate.resource.transaction.backend.jdbc","level":""},{"name":"org.hibernate.resource.transaction.backend.jdbc.internal","level":""},{"name":"org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl","level":""},{"name":"org.hibernate.resource.transaction.internal","level":""},{"name":"org.hibernate.resource.transaction.internal.SynchronizationRegistryStandardImpl","level":""},{"name":"org.hibernate.secure","level":""},{"name":"org.hibernate.secure.internal","level":""},{"name":"org.hibernate.secure.internal.DisabledJaccServiceImpl","level":""},{"name":"org.hibernate.secure.spi","level":""},{"name":"org.hibernate.secure.spi.JaccIntegrator","level":""},{"name":"org.hibernate.service","level":""},{"name":"org.hibernate.service.internal","level":""},{"name":"org.hibernate.service.internal.AbstractServiceRegistryImpl","level":""},{"name":"org.hibernate.service.internal.SessionFactoryServiceRegistryImpl","level":""},{"name":"org.hibernate.service.spi","level":""},{"name":"org.hibernate.service.spi.ServiceBinding","level":""},{"name":"org.hibernate.stat","level":""},{"name":"org.hibernate.stat.internal","level":""},{"name":"org.hibernate.stat.internal.StatisticsImpl","level":""},{"name":"org.hibernate.stat.internal.StatisticsInitiator","level":""},{"name":"org.hibernate.tool","level":""},{"name":"org.hibernate.tool.hbm2ddl","level":""},{"name":"org.hibernate.tool.hbm2ddl.UniqueConstraintSchemaUpdateStrategy","level":""},{"name":"org.hibernate.tool.schema","level":""},{"name":"org.hibernate.tool.schema.extract","level":""},{"name":"org.hibernate.tool.schema.extract.internal","level":""},{"name":"org.hibernate.tool.schema.extract.internal.AbstractInformationExtractorImpl","level":""},{"name":"org.hibernate.tool.schema.internal","level":""},{"name":"org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl","level":""},{"name":"org.hibernate.tool.schema.internal.Helper","level":""},{"name":"org.hibernate.tool.schema.internal.HibernateSchemaManagementTool","level":""},{"name":"org.hibernate.tool.schema.internal.IndividuallySchemaMigratorImpl","level":""},{"name":"org.hibernate.tool.schema.internal.exec","level":""},{"name":"org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase","level":""},{"name":"org.hibernate.tool.schema.spi","level":""},{"name":"org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator","level":""},{"name":"org.hibernate.tuple","level":""},{"name":"org.hibernate.tuple.PojoInstantiator","level":""},{"name":"org.hibernate.tuple.entity","level":""},{"name":"org.hibernate.tuple.entity.EntityMetamodel","level":""},{"name":"org.hibernate.tuple.entity.PojoEntityTuplizer","level":""},{"name":"org.hibernate.type","level":""},{"name":"org.hibernate.type.BasicTypeRegistry","level":""},{"name":"org.hibernate.type.DbTimestampType","level":""},{"name":"org.hibernate.type.descriptor","level":""},{"name":"org.hibernate.type.descriptor.java","level":""},{"name":"org.hibernate.type.descriptor.java.spi","level":""},{"name":"org.hibernate.type.descriptor.java.spi.JavaTypeDescriptorRegistry","level":""},{"name":"org.hibernate.type.descriptor.sql","level":""},{"name":"org.hibernate.type.descriptor.sql.SqlTypeDescriptorRegistry","level":""},{"name":"org.hibernate.type.spi","level":""},{"name":"org.hibernate.type.spi.TypeConfiguration","level":""},{"name":"org.hibernate.type.spi.TypeConfiguration$Scope","level":""},{"name":"org.jboss","level":""},{"name":"org.jboss.logging","level":""},{"name":"org.sauceggplant","level":""},{"name":"org.sauceggplant.manage","level":""},{"name":"org.sauceggplant.manage.ManageApplication","level":""},{"name":"org.sauceggplant.manage.crypto","level":""},{"name":"org.sauceggplant.manage.crypto.service","level":""},{"name":"org.sauceggplant.manage.crypto.service.impl","level":""},{"name":"org.sauceggplant.manage.crypto.service.impl.DESCryptoServiceImpl","level":""},{"name":"org.sauceggplant.manage.crypto.service.impl.RSACryptoServiceImpl","level":""},{"name":"org.sauceggplant.manage.crypto.service.impl.RSAReverseCryptoServiceImpl","level":""},{"name":"org.sauceggplant.manage.crypto.service.impl.SHA256CryptoServiceImpl","level":""},{"name":"org.sauceggplant.manage.log.controller.LogLevelController","level":""},{"name":"org.springframework","level":""},{"name":"org.springframework.aop","level":""},{"name":"org.springframework.aop.aspectj","level":""},{"name":"org.springframework.aop.aspectj.annotation","level":""},{"name":"org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator","level":""},{"name":"org.springframework.aop.aspectj.annotation.ReflectiveAspectJAdvisorFactory","level":""},{"name":"org.springframework.aop.framework","level":""},{"name":"org.springframework.aop.framework.CglibAopProxy","level":""},{"name":"org.springframework.aop.framework.JdkDynamicAopProxy","level":""},{"name":"org.springframework.aop.framework.ObjenesisCglibAopProxy","level":""},{"name":"org.springframework.aop.framework.autoproxy","level":""},{"name":"org.springframework.aop.framework.autoproxy.BeanFactoryAdvisorRetrievalHelper","level":""},{"name":"org.springframework.beans","level":""},{"name":"org.springframework.beans.AbstractNestablePropertyAccessor","level":""},{"name":"org.springframework.beans.CachedIntrospectionResults","level":""},{"name":"org.springframework.beans.ExtendedBeanInfo","level":""},{"name":"org.springframework.beans.TypeConverterDelegate","level":""},{"name":"org.springframework.beans.factory","level":""},{"name":"org.springframework.beans.factory.annotation","level":""},{"name":"org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor","level":""},{"name":"org.springframework.beans.factory.config","level":""},{"name":"org.springframework.beans.factory.config.PropertiesFactoryBean","level":""},{"name":"org.springframework.beans.factory.parsing","level":""},{"name":"org.springframework.beans.factory.parsing.FailFastProblemReporter","level":""},{"name":"org.springframework.beans.factory.support","level":""},{"name":"org.springframework.beans.factory.support.DefaultListableBeanFactory","level":""},{"name":"org.springframework.beans.factory.support.DisposableBeanAdapter","level":""},{"name":"org.springframework.beans.factory.xml","level":""},{"name":"org.springframework.beans.factory.xml.DefaultDocumentLoader","level":""},{"name":"org.springframework.beans.factory.xml.XmlBeanDefinitionReader","level":""},{"name":"org.springframework.boot","level":""},{"name":"org.springframework.boot.ApplicationServletEnvironment","level":""},{"name":"org.springframework.boot.BeanDefinitionLoader","level":""},{"name":"org.springframework.boot.BeanDefinitionLoader$ClassExcludeFilter","level":""},{"name":"org.springframework.boot.DefaultApplicationArguments","level":""},{"name":"org.springframework.boot.DefaultApplicationArguments$Source","level":""},{"name":"org.springframework.boot.SpringApplication","level":""},{"name":"org.springframework.boot.SpringApplicationShutdownHook","level":""},{"name":"org.springframework.boot.StartupInfoLogger","level":""},{"name":"org.springframework.boot.admin","level":""},{"name":"org.springframework.boot.admin.SpringApplicationAdminMXBeanRegistrar","level":""},{"name":"org.springframework.boot.admin.SpringApplicationAdminMXBeanRegistrar$SpringApplicationAdmin","level":""},{"name":"org.springframework.boot.autoconfigure","level":""},{"name":"org.springframework.boot.autoconfigure.AutoConfigurationImportSelector","level":""},{"name":"org.springframework.boot.autoconfigure.AutoConfigurationPackages","level":""},{"name":"org.springframework.boot.autoconfigure.cache","level":""},{"name":"org.springframework.boot.autoconfigure.cache.CacheCondition","level":""},{"name":"org.springframework.boot.autoconfigure.condition","level":""},{"name":"org.springframework.boot.autoconfigure.condition.OnBeanCondition","level":""},{"name":"org.springframework.boot.autoconfigure.condition.OnClassCondition","level":""},{"name":"org.springframework.boot.autoconfigure.condition.OnJndiCondition","level":""},{"name":"org.springframework.boot.autoconfigure.condition.OnPropertyCondition","level":""},{"name":"org.springframework.boot.autoconfigure.condition.OnResourceCondition","level":""},{"name":"org.springframework.boot.autoconfigure.condition.OnWebApplicationCondition","level":""},{"name":"org.springframework.boot.autoconfigure.context","level":""},{"name":"org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration","level":""},{"name":"org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration$ResourceBundleCondition","level":""},{"name":"org.springframework.boot.autoconfigure.data","level":""},{"name":"org.springframework.boot.autoconfigure.data.jpa","level":""},{"name":"org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration","level":""},{"name":"org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration$BootstrapExecutorCondition","level":""},{"name":"org.springframework.boot.autoconfigure.http","level":""},{"name":"org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration","level":""},{"name":"org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration$NotReactiveWebApplicationCondition","level":""},{"name":"org.springframework.boot.autoconfigure.info","level":""},{"name":"org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration","level":""},{"name":"org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration$GitResourceAvailableCondition","level":""},{"name":"org.springframework.boot.autoconfigure.jdbc","level":""},{"name":"org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration","level":""},{"name":"org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$EmbeddedDatabaseCondition","level":""},{"name":"org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$PooledDataSourceAvailableCondition","level":""},{"name":"org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$PooledDataSourceCondition","level":""},{"name":"org.springframework.boot.autoconfigure.jdbc.DataSourceJmxConfiguration","level":""},{"name":"org.springframework.boot.autoconfigure.logging","level":""},{"name":"org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener","level":""},{"name":"org.springframework.boot.autoconfigure.orm","level":""},{"name":"org.springframework.boot.autoconfigure.orm.jpa","level":""},{"name":"org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration","level":""},{"name":"org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration","level":""},{"name":"org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration$JpaWebConfiguration","level":""},{"name":"org.springframework.boot.autoconfigure.sql","level":""},{"name":"org.springframework.boot.autoconfigure.sql.init","level":""},{"name":"org.springframework.boot.autoconfigure.sql.init.SqlInitializationAutoConfiguration","level":""},{"name":"org.springframework.boot.autoconfigure.sql.init.SqlInitializationAutoConfiguration$SqlInitializationModeCondition","level":""},{"name":"org.springframework.boot.autoconfigure.transaction","level":""},{"name":"org.springframework.boot.autoconfigure.transaction.PlatformTransactionManagerCustomizer","level":""},{"name":"org.springframework.boot.autoconfigure.transaction.TransactionManagerCustomizers","level":""},{"name":"org.springframework.boot.autoconfigure.web","level":""},{"name":"org.springframework.boot.autoconfigure.web.OnEnabledResourceChainCondition","level":""},{"name":"org.springframework.boot.autoconfigure.web.client","level":""},{"name":"org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration","level":""},{"name":"org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration$NotReactiveWebApplicationCondition","level":""},{"name":"org.springframework.boot.autoconfigure.web.servlet","level":""},{"name":"org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration","level":""},{"name":"org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration$DefaultDispatcherServletCondition","level":""},{"name":"org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration$DispatcherServletRegistrationCondition","level":""},{"name":"org.springframework.boot.autoconfigure.web.servlet.WelcomePageHandlerMapping","level":""},{"name":"org.springframework.boot.autoconfigure.web.servlet.error","level":""},{"name":"org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration","level":""},{"name":"org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration$ErrorTemplateMissingCondition","level":""},{"name":"org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration$StaticView","level":""},{"name":"org.springframework.boot.availability","level":""},{"name":"org.springframework.boot.availability.ApplicationAvailabilityBean","level":""},{"name":"org.springframework.boot.context","level":""},{"name":"org.springframework.boot.context.ConfigurationWarningsApplicationContextInitializer","level":""},{"name":"org.springframework.boot.context.FileEncodingApplicationListener","level":""},{"name":"org.springframework.boot.context.config","level":""},{"name":"org.springframework.boot.context.config.ConfigDataEnvironment","level":""},{"name":"org.springframework.boot.context.config.ConfigDataEnvironmentContributors","level":""},{"name":"org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor","level":""},{"name":"org.springframework.boot.context.config.ConfigDataImporter","level":""},{"name":"org.springframework.boot.context.config.ConfigDataLoaders","level":""},{"name":"org.springframework.boot.context.config.ConfigDataLocationResolver","level":""},{"name":"org.springframework.boot.context.logging","level":""},{"name":"org.springframework.boot.context.logging.LoggingApplicationListener","level":""},{"name":"org.springframework.boot.context.properties","level":""},{"name":"org.springframework.boot.context.properties.PropertySourcesDeducer","level":""},{"name":"org.springframework.boot.context.properties.source","level":""},{"name":"org.springframework.boot.context.properties.source.ConfigurationPropertySourcesPropertyResolver","level":""},{"name":"org.springframework.boot.context.properties.source.ConfigurationPropertySourcesPropertyResolver$DefaultResolver","level":""},{"name":"org.springframework.boot.context.properties.source.ConfigurationPropertySourcesPropertySource","level":""},{"name":"org.springframework.boot.devtools","level":""},{"name":"org.springframework.boot.devtools.autoconfigure","level":""},{"name":"org.springframework.boot.devtools.autoconfigure.ConditionEvaluationDeltaLoggingListener","level":""},{"name":"org.springframework.boot.devtools.autoconfigure.DevToolsDataSourceAutoConfiguration","level":""},{"name":"org.springframework.boot.devtools.autoconfigure.DevToolsDataSourceAutoConfiguration$DevToolsDataSourceCondition","level":""},{"name":"org.springframework.boot.devtools.autoconfigure.LocalDevToolsAutoConfiguration","level":""},{"name":"org.springframework.boot.devtools.autoconfigure.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener","level":""},{"name":"org.springframework.boot.devtools.autoconfigure.OnEnabledDevToolsCondition","level":""},{"name":"org.springframework.boot.devtools.autoconfigure.OptionalLiveReloadServer","level":""},{"name":"org.springframework.boot.devtools.classpath","level":""},{"name":"org.springframework.boot.devtools.classpath.ClassPathDirectories","level":""},{"name":"org.springframework.boot.devtools.env","level":""},{"name":"org.springframework.boot.devtools.env.DevToolsPropertyDefaultsPostProcessor","level":""},{"name":"org.springframework.boot.devtools.livereload","level":""},{"name":"org.springframework.boot.devtools.livereload.LiveReloadServer","level":""},{"name":"org.springframework.boot.devtools.restart","level":""},{"name":"org.springframework.boot.devtools.restart.ChangeableUrls","level":""},{"name":"org.springframework.boot.devtools.restart.OnInitializedRestarterCondition","level":""},{"name":"org.springframework.boot.devtools.restart.RestartApplicationListener","level":""},{"name":"org.springframework.boot.devtools.restart.Restarter","level":""},{"name":"org.springframework.boot.devtools.restart.classloader","level":""},{"name":"org.springframework.boot.devtools.restart.classloader.RestartClassLoader","level":""},{"name":"org.springframework.boot.devtools.settings","level":""},{"name":"org.springframework.boot.devtools.settings.DevToolsSettings","level":""},{"name":"org.springframework.boot.env","level":""},{"name":"org.springframework.boot.env.EnvironmentPostProcessor","level":""},{"name":"org.springframework.boot.env.OriginTrackedMapPropertySource","level":""},{"name":"org.springframework.boot.env.OriginTrackedYamlLoader","level":""},{"name":"org.springframework.boot.env.RandomValuePropertySource","level":""},{"name":"org.springframework.boot.env.SystemEnvironmentPropertySourceEnvironmentPostProcessor","level":""},{"name":"org.springframework.boot.env.SystemEnvironmentPropertySourceEnvironmentPostProcessor$OriginAwareSystemEnvironmentPropertySource","level":""},{"name":"org.springframework.boot.jackson","level":""},{"name":"org.springframework.boot.jackson.JsonMixinModule","level":""},{"name":"org.springframework.boot.jackson.JsonMixinModule$JsonMixinComponentScanner","level":""},{"name":"org.springframework.boot.jdbc","level":""},{"name":"org.springframework.boot.jdbc.init","level":""},{"name":"org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer","level":""},{"name":"org.springframework.boot.system","level":""},{"name":"org.springframework.boot.system.ApplicationPid","level":""},{"name":"org.springframework.boot.web","level":""},{"name":"org.springframework.boot.web.embedded","level":""},{"name":"org.springframework.boot.web.embedded.tomcat","level":""},{"name":"org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader","level":""},{"name":"org.springframework.boot.web.embedded.tomcat.TomcatProtocolHandlerCustomizer","level":""},{"name":"org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory","level":""},{"name":"org.springframework.boot.web.embedded.tomcat.TomcatStarter","level":""},{"name":"org.springframework.boot.web.embedded.tomcat.TomcatWebServer","level":""},{"name":"org.springframework.boot.web.server","level":""},{"name":"org.springframework.boot.web.server.WebServerFactoryCustomizer","level":""},{"name":"org.springframework.boot.web.server.WebServerFactoryCustomizerBeanPostProcessor","level":""},{"name":"org.springframework.boot.web.servlet","level":""},{"name":"org.springframework.boot.web.servlet.RegistrationBean","level":""},{"name":"org.springframework.boot.web.servlet.ServletContextInitializerBeans","level":""},{"name":"org.springframework.boot.web.servlet.context","level":""},{"name":"org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext","level":""},{"name":"org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext","level":""},{"name":"org.springframework.boot.web.servlet.filter","level":""},{"name":"org.springframework.boot.web.servlet.filter.OrderedCharacterEncodingFilter","level":""},{"name":"org.springframework.boot.web.servlet.filter.OrderedFormContentFilter","level":""},{"name":"org.springframework.boot.web.servlet.filter.OrderedRequestContextFilter","level":""},{"name":"org.springframework.context","level":""},{"name":"org.springframework.context.annotation","level":""},{"name":"org.springframework.context.annotation.AutoProxyRegistrar","level":""},{"name":"org.springframework.context.annotation.ClassPathBeanDefinitionScanner","level":""},{"name":"org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider","level":""},{"name":"org.springframework.context.annotation.CommonAnnotationBeanPostProcessor","level":""},{"name":"org.springframework.context.annotation.ComponentScanAnnotationParser","level":""},{"name":"org.springframework.context.annotation.ComponentScanAnnotationParser$1","level":""},{"name":"org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader","level":""},{"name":"org.springframework.context.annotation.ConfigurationClassEnhancer","level":""},{"name":"org.springframework.context.annotation.ConfigurationClassParser","level":""},{"name":"org.springframework.context.annotation.ConfigurationClassPostProcessor","level":""},{"name":"org.springframework.context.annotation.ConfigurationClassUtils","level":""},{"name":"org.springframework.context.event","level":""},{"name":"org.springframework.context.event.EventListenerMethodProcessor","level":""},{"name":"org.springframework.context.index","level":""},{"name":"org.springframework.context.index.CandidateComponentsIndexLoader","level":""},{"name":"org.springframework.context.support","level":""},{"name":"org.springframework.context.support.ApplicationListenerDetector","level":""},{"name":"org.springframework.context.support.DefaultLifecycleProcessor","level":""},{"name":"org.springframework.context.support.DelegatingMessageSource","level":""},{"name":"org.springframework.context.support.PostProcessorRegistrationDelegate","level":""},{"name":"org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker","level":""},{"name":"org.springframework.context.support.PropertySourcesPlaceholderConfigurer","level":""},{"name":"org.springframework.context.support.PropertySourcesPlaceholderConfigurer$1","level":""},{"name":"org.springframework.context.support.ReloadableResourceBundleMessageSource","level":""},{"name":"org.springframework.core","level":""},{"name":"org.springframework.core.LocalVariableTableParameterNameDiscoverer","level":""},{"name":"org.springframework.core.env","level":""},{"name":"org.springframework.core.env.MapPropertySource","level":""},{"name":"org.springframework.core.env.PropertiesPropertySource","level":""},{"name":"org.springframework.core.env.PropertySource","level":""},{"name":"org.springframework.core.env.PropertySource$ComparisonPropertySource","level":""},{"name":"org.springframework.core.env.PropertySource$StubPropertySource","level":""},{"name":"org.springframework.core.env.PropertySourcesPropertyResolver","level":""},{"name":"org.springframework.core.env.StandardEnvironment","level":""},{"name":"org.springframework.core.env.SystemEnvironmentPropertySource","level":""},{"name":"org.springframework.core.io","level":""},{"name":"org.springframework.core.io.support","level":""},{"name":"org.springframework.core.io.support.PathMatchingResourcePatternResolver","level":""},{"name":"org.springframework.core.io.support.ResourceArrayPropertyEditor","level":""},{"name":"org.springframework.core.io.support.SpringFactoriesLoader","level":""},{"name":"org.springframework.core.task","level":""},{"name":"org.springframework.core.task.SimpleAsyncTaskExecutor","level":""},{"name":"org.springframework.core.task.SimpleAsyncTaskExecutor$ConcurrencyThrottleAdapter","level":""},{"name":"org.springframework.core.type","level":""},{"name":"org.springframework.core.type.filter","level":""},{"name":"org.springframework.core.type.filter.AnnotationTypeFilter","level":""},{"name":"org.springframework.core.type.filter.AssignableTypeFilter","level":""},{"name":"org.springframework.data","level":""},{"name":"org.springframework.data.jpa","level":""},{"name":"org.springframework.data.jpa.repository","level":""},{"name":"org.springframework.data.jpa.repository.config","level":""},{"name":"org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean","level":""},{"name":"org.springframework.data.jpa.repository.query","level":""},{"name":"org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy","level":""},{"name":"org.springframework.data.mapping","level":""},{"name":"org.springframework.data.mapping.context","level":""},{"name":"org.springframework.data.mapping.context.MappingContext","level":""},{"name":"org.springframework.data.mapping.model","level":""},{"name":"org.springframework.data.mapping.model.ClassGeneratingEntityInstantiator","level":""},{"name":"org.springframework.data.repository","level":""},{"name":"org.springframework.data.repository.config","level":""},{"name":"org.springframework.data.repository.config.RepositoryBeanDefinitionBuilder","level":""},{"name":"org.springframework.data.repository.config.RepositoryComponentProvider","level":""},{"name":"org.springframework.data.repository.config.RepositoryComponentProvider$InterfaceTypeFilter","level":""},{"name":"org.springframework.data.repository.config.RepositoryConfigurationDelegate","level":""},{"name":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport","level":""},{"name":"org.springframework.data.repository.core","level":""},{"name":"org.springframework.data.repository.core.support","level":""},{"name":"org.springframework.data.repository.core.support.RepositoryFactorySupport","level":""},{"name":"org.springframework.data.repository.core.support.TransactionalRepositoryProxyPostProcessor","level":""},{"name":"org.springframework.data.repository.core.support.TransactionalRepositoryProxyPostProcessor$RepositoryAnnotationTransactionAttributeSource","level":""},{"name":"org.springframework.data.rest","level":""},{"name":"org.springframework.data.rest.core","level":""},{"name":"org.springframework.data.rest.core.event","level":""},{"name":"org.springframework.data.rest.core.event.AnnotatedEventHandlerInvoker","level":""},{"name":"org.springframework.data.rest.core.event.ValidatingRepositoryEventListener","level":""},{"name":"org.springframework.data.rest.core.mapping","level":""},{"name":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping","level":""},{"name":"org.springframework.data.rest.webmvc","level":""},{"name":"org.springframework.data.rest.webmvc.BasePathAwareHandlerMapping","level":""},{"name":"org.springframework.data.rest.webmvc.RepositoryRestExceptionHandler","level":""},{"name":"org.springframework.data.rest.webmvc.RepositoryRestHandlerAdapter","level":""},{"name":"org.springframework.data.rest.webmvc.RepositoryRestHandlerMapping","level":""},{"name":"org.springframework.data.rest.webmvc.alps","level":""},{"name":"org.springframework.data.rest.webmvc.alps.AlpsJsonHttpMessageConverter","level":""},{"name":"org.springframework.data.rest.webmvc.config","level":""},{"name":"org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration","level":""},{"name":"org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration$ResourceSupportHttpMessageConverter","level":""},{"name":"org.springframework.data.rest.webmvc.json","level":""},{"name":"org.springframework.data.rest.webmvc.json.PersistentEntityJackson2Module","level":""},{"name":"org.springframework.data.util","level":""},{"name":"org.springframework.data.util.AnnotatedTypeScanner","level":""},{"name":"org.springframework.data.util.AnnotatedTypeScanner$InterfaceAwareScanner","level":""},{"name":"org.springframework.data.web","level":""},{"name":"org.springframework.data.web.PagedResourcesAssemblerArgumentResolver","level":""},{"name":"org.springframework.data.web.ProjectingJackson2HttpMessageConverter","level":""},{"name":"org.springframework.data.web.ProxyingHandlerMethodArgumentResolver","level":""},{"name":"org.springframework.hateoas","level":""},{"name":"org.springframework.hateoas.server","level":""},{"name":"org.springframework.hateoas.server.core","level":""},{"name":"org.springframework.hateoas.server.core.ControllerEntityLinksFactoryBean","level":""},{"name":"org.springframework.hateoas.server.mvc","level":""},{"name":"org.springframework.hateoas.server.mvc.TypeConstrainedMappingJackson2HttpMessageConverter","level":""},{"name":"org.springframework.http","level":""},{"name":"org.springframework.http.converter","level":""},{"name":"org.springframework.http.converter.ByteArrayHttpMessageConverter","level":""},{"name":"org.springframework.http.converter.ResourceHttpMessageConverter","level":""},{"name":"org.springframework.http.converter.ResourceRegionHttpMessageConverter","level":""},{"name":"org.springframework.http.converter.StringHttpMessageConverter","level":""},{"name":"org.springframework.http.converter.json","level":""},{"name":"org.springframework.http.converter.json.MappingJackson2HttpMessageConverter","level":""},{"name":"org.springframework.http.converter.xml","level":""},{"name":"org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter","level":""},{"name":"org.springframework.http.converter.xml.SourceHttpMessageConverter","level":""},{"name":"org.springframework.jdbc","level":""},{"name":"org.springframework.jdbc.core","level":""},{"name":"org.springframework.jdbc.core.JdbcTemplate","level":""},{"name":"org.springframework.jdbc.datasource","level":""},{"name":"org.springframework.jdbc.datasource.lookup","level":""},{"name":"org.springframework.jdbc.datasource.lookup.JndiDataSourceLookup","level":""},{"name":"org.springframework.jmx","level":""},{"name":"org.springframework.jmx.export","level":""},{"name":"org.springframework.jmx.export.annotation","level":""},{"name":"org.springframework.jmx.export.annotation.AnnotationMBeanExporter","level":""},{"name":"org.springframework.jmx.export.naming","level":""},{"name":"org.springframework.jmx.export.naming.KeyNamingStrategy","level":""},{"name":"org.springframework.jmx.support","level":""},{"name":"org.springframework.jmx.support.JmxUtils","level":""},{"name":"org.springframework.jmx.support.MBeanServerFactoryBean","level":""},{"name":"org.springframework.jndi","level":""},{"name":"org.springframework.jndi.JndiTemplate","level":""},{"name":"org.springframework.jndi.support","level":""},{"name":"org.springframework.jndi.support.SimpleJndiBeanFactory","level":""},{"name":"org.springframework.orm","level":""},{"name":"org.springframework.orm.hibernate5","level":""},{"name":"org.springframework.orm.hibernate5.SpringBeanContainer","level":""},{"name":"org.springframework.orm.jpa","level":""},{"name":"org.springframework.orm.jpa.EntityManagerFactoryUtils","level":""},{"name":"org.springframework.orm.jpa.ExtendedEntityManagerCreator","level":""},{"name":"org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler","level":""},{"name":"org.springframework.orm.jpa.JpaTransactionManager","level":""},{"name":"org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean","level":""},{"name":"org.springframework.orm.jpa.SharedEntityManagerCreator","level":""},{"name":"org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler","level":""},{"name":"org.springframework.orm.jpa.persistenceunit","level":""},{"name":"org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager","level":""},{"name":"org.springframework.orm.jpa.persistenceunit.PersistenceUnitReader","level":""},{"name":"org.springframework.orm.jpa.support","level":""},{"name":"org.springframework.orm.jpa.support.AsyncRequestInterceptor","level":""},{"name":"org.springframework.orm.jpa.support.OpenEntityManagerInViewInterceptor","level":""},{"name":"org.springframework.plugin","level":""},{"name":"org.springframework.plugin.core","level":""},{"name":"org.springframework.plugin.core.config","level":""},{"name":"org.springframework.plugin.core.config.PluginRegistriesBeanDefinitionRegistrar","level":""},{"name":"org.springframework.scheduling","level":""},{"name":"org.springframework.scheduling.concurrent","level":""},{"name":"org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor","level":""},{"name":"org.springframework.transaction","level":""},{"name":"org.springframework.transaction.annotation","level":""},{"name":"org.springframework.transaction.annotation.AnnotationTransactionAttributeSource","level":""},{"name":"org.springframework.transaction.interceptor","level":""},{"name":"org.springframework.transaction.interceptor.TransactionInterceptor","level":""},{"name":"org.springframework.transaction.support","level":""},{"name":"org.springframework.transaction.support.TransactionSynchronizationUtils","level":""},{"name":"org.springframework.transaction.support.TransactionTemplate","level":""},{"name":"org.springframework.ui","level":""},{"name":"org.springframework.ui.context","level":""},{"name":"org.springframework.ui.context.support","level":""},{"name":"org.springframework.ui.context.support.ResourceBundleThemeSource","level":""},{"name":"org.springframework.ui.context.support.UiApplicationContextUtils","level":""},{"name":"org.springframework.util","level":""},{"name":"org.springframework.util.PropertyPlaceholderHelper","level":""},{"name":"org.springframework.web","level":""},{"name":"org.springframework.web.HttpLogging","level":""},{"name":"org.springframework.web.context","level":""},{"name":"org.springframework.web.context.request","level":""},{"name":"org.springframework.web.context.request.async","level":""},{"name":"org.springframework.web.context.request.async.WebAsyncManager","level":""},{"name":"org.springframework.web.context.support","level":""},{"name":"org.springframework.web.context.support.ServletContextPropertySource","level":""},{"name":"org.springframework.web.context.support.ServletContextResourcePatternResolver","level":""},{"name":"org.springframework.web.context.support.StandardServletEnvironment","level":""},{"name":"org.springframework.web.cors","level":""},{"name":"org.springframework.web.cors.DefaultCorsProcessor","level":""},{"name":"org.springframework.web.method","level":""},{"name":"org.springframework.web.method.HandlerMethod","level":""},{"name":"org.springframework.web.method.annotation","level":""},{"name":"org.springframework.web.method.annotation.ModelFactory","level":""},{"name":"org.springframework.web.servlet","level":""},{"name":"org.springframework.web.servlet.DispatcherServlet","level":""},{"name":"org.springframework.web.servlet.HandlerExecutionChain","level":""},{"name":"org.springframework.web.servlet.PageNotFound","level":""},{"name":"org.springframework.web.servlet.config","level":""},{"name":"org.springframework.web.servlet.config.annotation","level":""},{"name":"org.springframework.web.servlet.config.annotation.WebMvcConfigurer","level":""},{"name":"org.springframework.web.servlet.function","level":""},{"name":"org.springframework.web.servlet.function.support","level":""},{"name":"org.springframework.web.servlet.function.support.HandlerFunctionAdapter","level":""},{"name":"org.springframework.web.servlet.function.support.RouterFunctionMapping","level":""},{"name":"org.springframework.web.servlet.handler","level":""},{"name":"org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping","level":""},{"name":"org.springframework.web.servlet.handler.SimpleUrlHandlerMapping","level":""},{"name":"org.springframework.web.servlet.mvc","level":""},{"name":"org.springframework.web.servlet.mvc.ParameterizableViewController","level":""},{"name":"org.springframework.web.servlet.mvc.annotation","level":""},{"name":"org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver","level":""},{"name":"org.springframework.web.servlet.mvc.method","level":""},{"name":"org.springframework.web.servlet.mvc.method.annotation","level":""},{"name":"org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver","level":""},{"name":"org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor","level":""},{"name":"org.springframework.web.servlet.mvc.method.annotation.ReactiveTypeHandler","level":""},{"name":"org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter","level":""},{"name":"org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping","level":""},{"name":"org.springframework.web.servlet.mvc.method.annotation.RequestPartMethodArgumentResolver","level":""},{"name":"org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor","level":""},{"name":"org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor","level":""},{"name":"org.springframework.web.servlet.mvc.support","level":""},{"name":"org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver","level":""},{"name":"org.springframework.web.servlet.resource","level":""},{"name":"org.springframework.web.servlet.resource.PathResourceResolver","level":""},{"name":"org.springframework.web.servlet.resource.ResourceHttpRequestHandler","level":""},{"name":"org.springframework.web.servlet.resource.ResourceUrlProvider","level":""},{"name":"org.springframework.web.servlet.support","level":""},{"name":"org.springframework.web.servlet.support.SessionFlashMapManager","level":""},{"name":"org.springframework.web.servlet.view","level":""},{"name":"org.springframework.web.servlet.view.BeanNameViewResolver","level":""},{"name":"org.springframework.web.servlet.view.ContentNegotiatingViewResolver","level":""},{"name":"org.springframework.web.servlet.view.InternalResourceViewResolver","level":""},{"name":"org.springframework.web.util","level":""},{"name":"org.springframework.web.util.UrlPathHelper","level":""}]
根据logger名称设置指定logger的日志级别:
POST http://localhost:8080/log/level
{
"name" : "org.sauceggplant.manage.log.controller.LogLevelController",
"level" : "ERROR"
}
再次通过log/level的GET操作
应用日志没有打印,REST api 返回 org.sauceggplant.manage.log.controller.LogLevelController 对应的 level 变成"ERROR", 验证完毕
感兴趣或有需要的童鞋可以源码试一下,goog lcuck!