Sl4j и logback - возможно ли программно установить уровень ведения журнала для пакета?

Я могу программно установить уровень ведения журнала в приложении со следующим кодом, но также возможно сделать это на уровне пакета, например, com.somepackage. *, где я хочу, чтобы уровень был только ERROR чем DEBUG или INFO на указанной упаковке?

// Sets the logging level to INFO
LoggerContext loggerContext = (LoggerContext)LoggerFactory.getILoggerFactory();
Logger rootLogger = loggerContext.getLogger(Logger.ROOT_LOGGER_NAME);
rootLogger.setLevel(Level.INFO);

Но я не могу найти способ установить его на уровне пакета...

Ответ 1

Вы должны установить имя пакета как имя журнала

// Sets the package level to INFO
LoggerContext loggerContext = (LoggerContext)LoggerFactory.getILoggerFactory();
Logger rootLogger = loggerContext.getLogger("com.somepackage");
rootLogger.setLevel(Level.INFO);

Вы должны иметь возможность получить более элегантное имя пакета, но это в основном это. Это следует за деревом, как иерархия для контекста Logger: Контекст Logger

Ответ 2

Вы можете сделать это, используя logback..

Logger LOG = (Logger) org.slf4j.LoggerFactory.getLogger(ch.qos.logback.classic.Logger.ROOT_LOGGER_NAME);
LOG.setLevel(Level.WARN);

Это решило мою проблему.

Ответ 3

Вы можете получить регистратор SLF4J для пакета и передать его в Loglog logger. Меньше кода, который @dimitri-dewaele.

((Logger) LoggerFactory.getLogger("com.somepackage")).setLevel(DEBUG)

@подход nandu-prajapati схож, за исключением того, что он устанавливает уровень корневого регистратора, а не тот, который вам нужен.