2015-03-11 5 views
0

Я хочу свести ведение журнала перезапуска к log4j2, поэтому LogServices зарегистрирован правильно. В настоящее время у меня есть полное имя класса в моем шаблоне журнала, например: [org.restlet.Component.InternalRouter], но LogService зарегистрирован как [.Logservice] (что не является желательным поведением). У меня нет классов для slf4j-моста в моем пути к классам и они не нужны (за исключением slf4j api-classes). Я использую все зависимости для моста JUL, log4j1.x, Slf4j.Route Restlet logging to log4j2

Использование slf4j ранее я использовал код из restlet documentation/раздел «SLF4J мост из JULI», чтобы свести выход. Использование кода для удаления обработчика приведет к исключению, так как обработчик больше не работает.

Я использую log4j2 2.2 и Restlet 2.0.15

ответ

1

Restlet использует протоколирование API JDK, что вы стыковались в log4j.

Ваши собственные классы могут использовать API SLF4J, если вы предпочитаете (я предпочитаю API logj4, хотя), который также может подключаться к log4j.

Вам понадобятся два моста в пути пути выполнения: log4j-jul e log4j-slf4j-impl.

В Maven, сделайте следующее:

<dependency> 
    <groupId>org.apache.logging.log4j</groupId> 
    <artifactId>log4j-jul</artifactId> 
    <version>2.2</version> 
    <scope>runtime</scope> 
</dependency> 

<dependency> 
    <groupId>org.apache.logging.log4j</groupId> 
    <artifactId>log4j-slf4j-impl</artifactId> 
    <version>2.2</version> 
    <scope>runtime</scope> 
</dependency> 

Таким образом, вы можете настроить и с помощью Log4j.

+0

Я использую уже slf4j и jul bridge. Я также добавил мост JUL, используя 'System.setProperty (« java.util.logging.manager », LogManager.class.getName())'. – Dag

+0

'Каждый компонент также регистрирует доступ с использованием имени, такого как« org.restlet.MyComponent.LogService ». Это имя можно настроить с помощью свойства «LogService.loggerName». - кто-то может устанавливать LogService.loggerName с **. Logservice ** –