2016-12-06 9 views
0

Один из моих приложений работает с консолью, а не с файлом. У меня есть несколько приложений с безупречной работой журнала, один из которых содержит более десяти приложений. Теперь я настраиваю новый так же, но я просто не могу заставить его работать.Logback appender не соответствует пакету, вход в консоль вместо

<!-- General --> 
<appender name="MAIN_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>${log.folder}/main.log</file> 
    <encoder> 
     <pattern>%d{"yyyy-MM-dd HH:mm:ss,SSS zzz"}, level="%le", %n%caller{2}, message="%msg" %n</pattern> 
    </encoder> 
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
     <fileNamePattern>${log.folder}/main.log.%d</fileNamePattern> 
    </rollingPolicy> 
</appender> 

<logger name="com.mycompany.crawler" level="INFO" additivity="false"> 
    <appender-ref ref="MAIN_APPENDER"/> 
</logger> 

<root level="INFO"> 
    <appender-ref ref="MAIN_APPENDER"/> 
</root> 

<!-- Requests to Google Maps API --> 
<appender name="GOOGLE_MAPS_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>${log.folder}/maps-requests.log</file> 
    <encoder> 
     <pattern>%d{"yyyy-MM-dd HH:mm:ss,SSS zzz"}, level="%le", %n%caller{2}, message="%msg" %n</pattern> 
    </encoder> 
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
     <fileNamePattern>${log.folder}/maps-requests.log.%d</fileNamePattern> 
    </rollingPolicy> 
</appender> 

<logger name="com.google.maps" level="DEBUG" additivity="false"> 
    <appender-ref ref="GOOGLE_MAPS_APPENDER"/> 
</logger> 

Это второй GOOGLE_MAPS_APPENDER, что не работает. Он записывается в консоль, а не в файл maps-requests.log. Сообщения в консоли выглядят так:

Dec 06, 2016 12:53:29 PM com.google.maps.OkHttpRequestHandler handle 
INFO: Request: https://maps.googleapis.com/maps/api/place/details/json?key=xxxxxxxxxx&placeid=yyyyyy&language=ar 
Dec 06, 2016 12:53:31 PM com.google.maps.OkHttpRequestHandler handle 
INFO: Request: https://maps.googleapis.com/maps/api/place/details/json?key=xxxxxxxxxx&placeid=yyyyyy&language=de 

Насколько я понимаю, эти строки должны соответствовать приложению. Я также пробовал с com.google.maps.OkHttpRequestHandler, но тот же результат. Я также могу подтвердить, что класс OkHttpRequestHandler пишет в журнал, а не непосредственно на консоль:

LOG.log(Level.INFO, "Request: {0}", hostName + url); 

При запуске приложения с Maven, это говорит о том, что Appender правильно подобраны:

13:13:33,524 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender] 
13:13:33,525 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [GOOGLE_MAPS_APPENDER] 
13:13:33,525 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property 
13:13:33,527 |-INFO in [email protected] - No compression will be used 
13:13:33,527 |-INFO in [email protected] - Will use the pattern D://code//google-maps-middleware//target/log/maps-requests.log.%d for the active file 
13:13:33,528 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - The date pattern is 'yyyy-MM-dd' from file name pattern 'D://code//google-maps-middleware//target/log/maps-requests.log.%d'. 
13:13:33,528 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Roll-over at midnight. 
13:13:33,529 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Setting initial period to Tue Dec 06 12:44:14 CET 2016 
13:13:33,530 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[GOOGLE_MAPS_APPENDER] - Active log file name: D:\\code\\google-maps-middleware\\target/log/maps-requests.log 
13:13:33,530 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[GOOGLE_MAPS_APPENDER] - File property is set to [D:\\code\\google-maps-middleware\\target/log/maps-requests.log] 
13:13:33,531 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.google.maps] to DEBUG 
13:13:33,531 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [com.google.maps] to false 
13:13:33,531 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [GOOGLE_MAPS_APPENDER] to Logger[com.google.maps] 
13:13:33,531 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration. 
13:13:33,533 |-INFO in [email protected] - Registering current configuration as safe fallback point 

Я думаю, что проблема в том, что класс OkHttpRequestHandler является внешним по отношению к моему приложению, но я использую эту же схему в другом приложении для соответствия пакетам Hibernate, и это работает. Что мне не хватает?

ответ

0

Проблема в том, что OkHttpRequestHandler использует java.util.logging вместо slf4j.

Решение было как раз для его связывания, как описано in this answer.

+0

И служба google-map изменилась с JUL на SLF4J [недавно] (https://github.com/googlemaps/google-maps-services-java/pull/186). Вы можете следить за следующим выпуском. – tan9