Как писать логи в файл в лагом приложении - PullRequest
0 голосов
/ 26 мая 2020

В рамках развертывания моего приложения lagom в производственной среде kubernetes я пытаюсь опубликовать sh все свои журналы в файл, помимо записи в стандартный вывод. Для этого я создал logback.xml в каталоге ресурсов, добавив файл appender согласно предложению здесь .

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>${application.home:-.}/logs/application.log</file>
    <encoder>
        <pattern>%date [%level] from %logger in %thread - %message%n%xException</pattern>
    </encoder>
</appender>

Но он не может создать файл журнала в рабочем каталоге контейнера. Вместо этого я получаю следующую ошибку:

09:23:33,209 |-INFO in ch.qos.logback.classic.AsyncAppender[ASYNCSTDOUT] - Setting discardingThreshold to 51
09:23:33,209 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.FileAppender]
09:23:33,213 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [FILE]
09:23:33,217 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
09:23:33,220 |-INFO in ch.qos.logback.core.FileAppender[FILE] - File property is set to [./logs/application.log]
09:23:33,222 |-ERROR in ch.qos.logback.core.FileAppender[FILE] - Failed to create parent directories for [/opt/docker/./logs/application.log]
09:23:33,222 |-ERROR in ch.qos.logback.core.FileAppender[FILE] - openFile(./logs/application.log,true) call failed. java.io.FileNotFoundException: ./logs/application.log (No such file or directory)
    at java.io.FileNotFoundException: ./logs/application.log (No such file or directory)
    at  at java.io.FileOutputStream.open0(Native Method)

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

demiourgos728@ca5fc4a4c1db:/opt/docker$ ls
bin  lib  share

Я попытался предоставить разрешение на чтение, запись и выполнение в рабочем каталоге контейнера, как показано ниже, но это тоже не сработало:

DockerChmodType.UserGroupWriteExecute

Пожалуйста, предложите.

1 Ответ

1 голос
/ 30 мая 2020

Запись в файл в контейнере - это плохо по двум причинам: 1. Журналы доступны только внутри контейнера, т. Е. Для просмотра журналов потребуется войти в контейнер. 2. Они недоступны с помощью команды kubectl log 3. Они эфемерны по своей природе, то есть, если контейнер выйдет из строя, журналы исчезнут

Вместо этого запись в STDOUT и STDERR считается лучшей практикой в ​​среде контейнера. Журналы, записанные в STDOUT и STDERR, перенаправляются механизмом docker в место на узле (/ var / log / container /). Более того, эти журналы также доступны через команду kubectl logs.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...