2016-06-02 3 views
0

Я создаю приложение, которое обрабатывает файлы журналов. Для этого я прочитал конфигурацию файла logback.xml, выберем имя пользователя по имени и извлеку необходимой информации о файле в хвост и формат сообщений в нем.Поиск лог-файла с помощью приложений-реестров

В настоящее время я могу только хвост файлов журнала, у которых есть заданное имя файла, и я пытаюсь перечеркнуть файлы, у которых есть узорное имя файла. Но чтобы избежать сложной проверки всех возможных шаблонов, я думал об извлечении значения файла из самого класса logger. После исследования я обнаружил, что класс RollingPolicyBase имеет метод getActiveFileName(), который, как я подозреваю, имеет то, что мне нужно (имя файла журнала в момент вызова метода), но по какой-то причине я не могу даже найдите регистратор для его имени. Кто-то раньше пробовал что-то подобное или знает, возможно ли это сделать?

Мой текущий Logback (важные биты):

<appender name="DateRollingFileAppender"  class="ch.qos.logback.core.rolling.RollingFileAppender">  
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
    <fileNamePattern>logs/jwsgateway.%d{yyyyMMddHH}.log.zip</fileNamePattern> 
    <maxHistory>1500</maxHistory> 
</rollingPolicy> 
<encoder> 
    <pattern>%d{dd/MM/yy HH:mm:ss.SSS} [%thread] %-5level %logger{0} - %m%n  </pattern> 
</encoder>  

Мой текущий код:

private static ch.qos.logback.classic.Logger logger = (ch.qos.logback.classic.Logger)LoggerFactory.getLogger(MyClass.class); 
RollingFileAppender appender=(RollingFileAppender)logger.getAppender("DateRollingFileAppender"); 
filePath=appender.getRollingPolicy().getActiveFileName(); 

переменные "Appender" заканчивается нулем. Какие-либо предложения?

ответ

1

Logger#getAppender(String) получает приложение, которое в настоящее время подключено к регистратору. Поскольку "DataRollingFileAppender" прикрепляются к корневому регистратору, вам нужно будет позвонить LoggerFactory#getLogger(String) на Logger.ROOT_LOGGER_NAME, чтобы получить регистратор, который будет содержать ваш Appender:

import ch.qos.logback.classic.Logger; 
import ch.qos.logback.core.rolling.RollingFileAppender; 
import org.slf4j.LoggerFactory; 

public class Main { 
    public static void main(String[] args) { 
    Logger logger = (Logger)LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); 
    RollingFileAppender appender=(RollingFileAppender)logger.getAppender("DateRollingFileAppender"); 
    System.out.println(appender.getRollingPolicy().getActiveFileName()); 
    } 
} 
+0

Это сделал это. Он работает по назначению. Большое спасибо! – KatVolkov

Смежные вопросы