如何在 lagom 应用程序中将日志写入文件

How to write logs to a file in a lagom application

作为将我的 lagom 应用程序部署到 kubernetes 生产环境的一部分,除了写入标准输出之外,我还试图将所有日志发布到一个文件中。为此,我根据建议 here.

在资源目录下创建了一个 logback.xml 添加文件附加程序
<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.日志仅在容器内可用,即需要进入容器才能看到日志 2. 它们无法通过 kubectl log 命令获得 3. 它们本质上是短暂的,即如果容器崩溃,日志将消失

改为写入 STDOUT 和 STDERR 被认为是容器环境中的最佳实践。写入 STDOUT 和 STDERR 的日志由 docker 引擎重定向到节点中的某个位置 (/var/log/containers/)。此外,这些日志也可以通过 kubectl logs 命令获得。

实际上,日志甚至没有保存在一个节点上,而是被移动到一个中央日志系统。您可以阅读更多相关信息 here