Я использую Log4j для входа в проект Scala, где каждый класс создает свой экземпляр журнала с помощью LoggerFactory.getLogger(this.getClass.getName.stripSuffix("$")). В другом проекте я расширяю класс из этой библиотеки и использую его средство ведения журнала по умолчанию, которое ведет журнал на уровне трассировки.
В моем текущем проекте мне нужен более детальный контроль над средствами ведения журнала. В частности, я хочу установить уровень ведения журнала библиотеки info, чтобы журналы трассировки не отображались. Как я могу настроить средства ведения журнала для достижения такого детального контроля над уровнями ведения журнала?
Чтобы контролировать уровни ведения журнала, я создал в своей конфигурации специальный регистратор, предназначенный для пакета расширенного класса из библиотеку (library.package1.package2.package3...) и установите для нее уровень info. У меня также есть средство ведения журнала верхнего уровня для моего текущего проекта (thisProject.package), настроенное на трассировку.
Я ожидаю, что в выходных данных не появятся журналы трассировки из библиотеки, хотя я Расширяю свои занятия в моем проекте. Однако я все еще вижу журналы трассировки из библиотеки. Как я могу обеспечить журналирование библиотеки только на уровне информации, сохраняя при этом ведение журнала трассировки для моего проекта?
Вот моя конфигурация журнала (намеренно отсутствуют некоторые значения конфигурации, такие как макет ):
status = error
appenders = console
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{${LOG_DATEFORMAT_PATTERN:-MM-dd HH:mm:ss.SSS}} %highlight{${LOG_LEVEL_PATTERN:-%5p}}{FATAL=red blink, ERROR=red, WARN=yellow bold, INFO=green, DEBUG=green bold, TRACE=blue} %style{%12.12t}{magenta} %style{%20.20replace{%c{1.}:%L}{}{}}{cyan} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%rEx}
loggers = library-logger, project-logger
logger.project-logger.name = project.main
logger.project-logger.level = trace
logger.library-logger.name = library.project.main.myPackage
logger.library-logger.level = info
rootLogger.level = error
rootLogger.appenderRefs = stdout
rootLogger.appenderRef.stdout.ref = STDOUT
Это класс, который я расширяю в проекте из библиотеки:
package library.project.main.myPackage
abstract class MyExtendableClass {
protected lazy val log = com.typesafe.scalalogging.Logger(LoggerFactory.getLogger(
this.getClass.getName.stripSuffix("$")
))
def func = {
log.trace("This is a trace log from the library")
}
}
И вот что я делаю в текущем проекте:
package project.main.package
import library.project.main.myPackage.MyExtendableClass
class MyClazz extends MyExtendableClass {
def myInitFunc = {
// call func
func
log.info("This is an info log after calling func")
// do other stuff
}
}
Я ожидаю увидеть в консоли только информационный журнал текущего проекта:
INFO project.main.package.MyClazz This is an info log after calling func
Но я вижу оба сообщения журнала:
TRACE library.project.main.myPackage.MyExtendableClass This is a trace log from the library
INFO project.main.package.MyClazz This is an info log after calling func
Подробнее здесь: https://stackoverflow.com/questions/790 ... allow-fine
Как я могу управлять экземплярами регистраторов (для каждого класса) в моих собственных библиотеках, чтобы обеспечить де ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение