如何将日志文件保存到泊坞窗卷中

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

在我的应用程序中定义我的variables:

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

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

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

然后我创build了一个logback.xml,日志将被保存在我的硬盘上timestemp。 我也在这里find了解决scheme。

 <?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”(我创build的文件夹结构)

我也可以通过我的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检查busmicroservice”我得到:

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

但我的日志不会保存在我的日志文件夹中。 我猜path还是有问题的。 我必须在我的“docker运行”命令中放置哪条path?

看起来你在你的文件path名称上不一致,在你定义的一些地方:

 /opt/docker-busapi/data/logs/ 

而在其他人,你有:

 /opt/docker-busmicroservice/data 

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

 /logs 

如果您希望所有文件都转到/opt/docker-busapi/data/logs/主机目录 ,请首先确保该目录存在,并且您拥有正确的权限设置,然后确保您的应用程序使用/logs作为保存目录。

那么当你运行:

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

那么你应该很好去。