Как настроить logback для получения хороших логов события akka-http logRequest - PullRequest
0 голосов
/ 06 февраля 2019

В результате ответа на этот вопрос Я могу получить logRequest для входа в файл с именем access.log.

У меня есть

val routes =
      path("ping" ) {
        withLog(accessLog) {
          logRequest("ping", Logging.InfoLevel) {
            complete("pong")
          }
        }
      }

Часть моей конфигурации logback.xml выглядит как

 <appender name="ACCESSLOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>log/access.log</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>
                %d{yyyy-MM-dd HH:mm:ss} %msg%n
            </pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>log/access-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>64 MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>

И полученная запись в файле журнала выглядит как

2019-02-06 16:51:04 ping: HttpRequest(HttpMethod(GET),http://localhost:8080/ping,List(Host: localhost:8080, Connection: keep-alive, Cache-Control: max-age=0, Upgrade-Insecure-Requests: 1, User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36, Accept: text/html, application/xhtml+xml, application/xml;q=0.9, image/webp, image/apng, */*;q=0.8, Accept-Encoding: gzip, deflate, br, Accept-Language: en-GB, en-US;q=0.9, en;q=0.8, Cookie: xxx, Timeout-Access: <function1>),HttpEntity.Strict(none/none,ByteString()),HttpProtocol(HTTP/1.1))

Что я могу сделать, чтобы мои записи журнала выглядели как-токак

2019-02-06 16:51:04 GET /ping <time_taken> 

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Проверьте Документацию для pattern.

У нас все хорошо:

  <conversionRule conversionWord="coloredLevel" converterClass="play.api.libs.logback.ColoredLevel" />
    ...
  <appender ...>
    <encoder>
        <pattern>%date %coloredLevel %logger{15} - %message%n%xException{10}</pattern>
    </encoder>
 </appender>

Вот еще один пример (где я нашел результаты):

<appender name="ACCESS_FILE" ...>
  ....     
    <encoder>
            <pattern>%date [%level] from %logger - %message%n%xException</pattern>
        </encoder>
    </appender>

Это дает вам:

2018-06-26 12:13:50,377 [INFO] from access-filter - 6. GET /assets/javascripts/versioned.js took 113ms and returned 200
2018-06-26 12:13:50,377 [INFO] from access-filter - 6. GET /assets/scala-adapters-client-jsdeps.js took 113ms and returned 200
0 голосов
/ 06 февраля 2019

Вы можете определить метод, который будет производить LogEntry, и вы установите свое сообщение в журнале так, как вы хотите.

  def myLogEntry(req: HttpRequest): LogEntry = {
    LogEntry(s"${req.method} /${req.uri.path}", Logging.InfoLevel)
  }

  logRequest(myLogEntry _) {
    complete("pong")
  }

Проблема с информацией, такой как <time_taken>, так как она недоступна, когдаДиректива logRequest выполнена.Эта директива печатает сообщение журнала при входящем HTTP-запросе при запуске директивы.Информации о результатах внутреннего маршрута, завершенных или отклоненных, пока нет.

Ознакомьтесь с этим сообщением в блоге , чтобы узнать, как можно рассчитать время.

...