Apache karaf4.2.3 — отдельный файл журнала для каждого пакета

#log4j2 #apache-karaf

#log4j2 #apache-karaf

Вопрос:

Как создать отдельный файл журнала для каждого пакета, развернутого в karaf-4.2.3, используя pax logging, который имеет конфигурацию в собственном стиле log4j2?

Я пробовал с routing appender, но безрезультатно.

Я освобожден от записи журналов каждого пакета в отдельный файл журнала для упрощения отладки.

Комментарии:

1. В списке рассылки karaf dev обсуждалась эта конфигурация: karaf.922171.n3.nabble.com /…

2. Кроме того, Karaf теперь будет иметь конфигурацию шаблона для такого сценария ведения журнала: github.com/apache/karaf/pull/801/files

Ответ №1:

Я все равно не знаю, как это делается автоматически. Но что вы могли бы сделать, так это создать для каждого модуля отдельную конфигурацию на основе имени корневого пакета

 log4j2.logger.xy.name = com.company.module.xy
log4j2.logger.xy.level = INFO
log4j2.logger.xy.additivity = false
log4j2.logger.xy.appenderRef.inovel.ref = XyFile

log4j2.logger.zz.name = com.company.module.zz
log4j2.logger.zz.level = INFO
log4j2.logger.zz.additivity = false
log4j2.logger.zz.appenderRef.inovel.ref = ZzFile

log4j2.logger.keycloak.name = org.keycloak
log4j2.logger.keycloak.level = INFO
log4j2.logger.keycloak.additivity = false
log4j2.logger.keycloak.appenderRef.keycloak.ref = KeycloakFile
  

И ссылка может выглядеть как

 # keyclok file appender
log4j2.appender.keycloak.type = RollingRandomAccessFile
log4j2.appender.keycloak.name = KeycloakFile
log4j2.appender.keycloak.fileName = ${karaf.data}/log/keycloak.log
log4j2.appender.keycloak.filePattern = ${karaf.data}/log/keycloak.log.%i
log4j2.appender.keycloak.append = true
log4j2.appender.keycloak.layout.type = PatternLayout
log4j2.appender.keycloak.layout.pattern = %d{ISO8601}
log4j2.appender.keycloak.policies.type = Policies
log4j2.appender.keycloak.policies.size.type = SizeBasedTriggeringPolicy
log4j2.appender.keycloak.policies.size.size = 8MB
log4j2.appender.keycloak.strategy.type = DefaultRolloverStrategy
log4j2.appender.keycloak.strategy.max = 10
  

Это большая ручная работа. Так что, может быть, кто-нибудь придумает автоматическую настройку

С уважением

Комментарии:

1. @Jayamani Anbazhagan, если это ответило на ваш вопрос, не могли бы вы, пожалуйста, принять его.

Ответ №2:

Просто взгляните на официальную конфигурацию Log4j 2.x, поставляемую с каждым дистрибутивом Karaf, и взгляните на раздел «Маршрутизация» с комментариями.

Например. Я использовал следующее в одном из своих проектов:

 # Root logger
log4j2.rootLogger.level = INFO
log4j2.rootLogger.appenderRef.RollingFile.ref = RollingFile
log4j2.rootLogger.appenderRef.RollingFile.filter.threshold.type = ThresholdFilter
log4j2.rootLogger.appenderRef.RollingFile.filter.threshold.level = WARN
log4j2.rootLogger.appenderRef.PaxOsgi.ref = PaxOsgi
log4j2.rootLogger.appenderRef.Console.ref = Console
log4j2.rootLogger.appenderRef.Console.filter.threshold.type = ThresholdFilter
log4j2.rootLogger.appenderRef.Console.filter.threshold.level = ${karaf.log.console:-OFF}

# Enable log routing...
log4j2.rootLogger.appenderRef.Routing.ref = Routing

# Loggers configuration

...

# Configure the routing (pay close attention to the escapes)...
log4j2.appender.routing.type = Routing
log4j2.appender.routing.name = Routing
log4j2.appender.routing.routes.type = Routes
log4j2.appender.routing.routes.pattern = $$\{ctx:bundle.name}
log4j2.appender.routing.routes.bundle.type = Route
log4j2.appender.routing.routes.bundle.appender.type = RollingRandomAccessFile
log4j2.appender.routing.routes.bundle.appender.name = Bundle-$\{ctx:bundle.name}
log4j2.appender.routing.routes.bundle.appender.fileName = ${karaf.data}/log/bundle-$\{ctx:bundle.name}.log
log4j2.appender.routing.routes.bundle.appender.filePattern = ${karaf.data}/log/bundle-$\{ctx:bundle.name}.log.%d{yyyy-MM-dd}
log4j2.appender.routing.routes.bundle.appender.append = true
log4j2.appender.routing.routes.bundle.appender.layout.type = PatternLayout
log4j2.appender.routing.routes.bundle.appender.layout.pattern = ${log4j2.pattern}
log4j2.appender.routing.routes.bundle.appender.policies.type = Policies
log4j2.appender.routing.routes.bundle.appender.policies.time.type = TimeBasedTriggeringPolicy
log4j2.appender.routing.routes.bundle.appender.strategy.type = DefaultRolloverStrategy
log4j2.appender.routing.routes.bundle.appender.strategy.max = 31
  

У меня это явно сработало. Я бы даже не подумал о статической конфигурации в OSGi! 😉

Ответ №3:

раздел с комментариями к конфигурации log4j по ссылке ниже
https://github.com/apache/karaf/blob/master/assemblies/features/base/src/main/resources/resources/etc/org.ops4j.pax.logging.cfg

будет записывать сообщения для каждого пакета в отдельный файл, но по умолчанию karaf поставляется с несколькими пакетами, в результате чего для каждого пакета будет один файл журнала. Будет сгенерировано очень много файлов журналов.

Как это можно сделать для конкретных пакетов, которые пользователь развернул в папке deploy