【问题标题】:How to save logfiles into a docker volume如何将日志文件保存到 docker 卷中
【发布时间】:2017-12-14 13:19:43
【问题描述】:

我有一个 java 应用程序。我将我的项目导出为 .war 文件,构建一个 docker 容器并运行它。

在我的应用程序中,我定义了我的变量:

private static final Logger logger = Logger.getLogger(BusController.class.getName());

对于我使用的输出,例如:

logger.warning("User "+XYZ+" not found!");

然后我创建了一个 logback.xml,日志将保存在我的 HDD 中,并带有 timetemp。我也在这里找到了解决方案。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

<include resource="org/springframework/boot/logging/logback/base.xml"/>

<logger name="org.springframework.web" level="INFO"/>

<timestamp key="Timestamp" timeReference="contextBirth" datePattern="yyyy-MM-dd'_'HH-mm-ss"/>

<!-- Send debug messages to System.out -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!-- By default, encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
    <encoder>
        <pattern>%d{HH:mm:ss.SSS}  - %msg%n</pattern>
    </encoder>
</appender>

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>/opt/docker-busapi/data/logs/busicroservice-${myTimestamp}.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.FixedWindowRollingPolicy">
        <FileNamePattern>busmicroservice.%i{yyyy-MM-dd_HH:mm:ss.SSS}}.log</FileNamePattern>
    </rollingPolicy>

    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        <MaxFileSize>30MB</MaxFileSize>
    </triggeringPolicy>
</appender>

<logger name="mypackage" level="INFO" additivity="false">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="FILE" />
</logger>

这样行,我所有的日志都将保存在我的windows环境下的“/opt/docker-busapi/data/logs”(我创建了文件夹结构)

我现在也可以通过 dockerfile 中的 -v 参数挂载我的额外卷:

REGISTRY=xxxxx.net
VERSION=latest
IMAGE=busMicroservice
SERVICE=busmicroservice
LOCAL_DATA_PATH=/opt/docker-busapi/data

docker run -p xxxx:xxxxx -d -v $LOCAL_DATA_PATH:/logs --name $SERVICE --hostname $SERVICE $REGISTRY/$IMAGE:$VERSION

因为如果我检查我的 docker 容器,就会安装卷。 通过“docker inspect busmicroservice”我得到:

    "Mounts": [
    {
        "Type": "bind",
        "Source": "/opt/docker-busapi/data",
        "Destination": "/logs",
        "Mode": "",
        "RW": true,
        "Propagation": "rprivate"
    }

但我的日志不会保存在我的日志文件夹中。 我想路径仍然有问题。我必须在“docker run”命令中输入哪个路径?

【问题讨论】:

    标签: java docker dockerfile java.util.logging


    【解决方案1】:

    看起来你的文件路径名不一致,在某些地方你定义了这个:

    /opt/docker-busapi/data/logs/
    

    而在其他人中,你有:

    /opt/docker-busmicroservice/data
    

    然后在 Docker 容器中,你说应该在容器中使用它:

    /logs
    

    如果您希望您的所有文件都转到/opt/docker-busapi/data/logs/主机目录,那么首先确保该目录存在并且您对其设置了正确的权限,然后确保您的application 使用/logs 作为它的保存目录。

    然后当你运行时:

    docker run -p xxxx:xxxxx -d -v /opt/docker-busapi/data/logs:/logs --name my_service --hostname my_hostname image:version
    

    那你应该可以走了。

    【讨论】:

      猜你喜欢
      • 2016-05-26
      • 1970-01-01
      • 1970-01-01
      • 2019-03-28
      • 1970-01-01
      • 2023-01-29
      • 2017-10-19
      • 2017-03-22
      • 2020-11-20
      相关资源
      最近更新 更多