2017-12-14 4 views
0

Ich habe eine Java-Anwendung. Ich exportiere mein Projekt als .war-Datei, erstelle einen Andock-Container und führe es aus.So speichern Sie Logdateien in einem Andock-Volume

In meiner Anwendung definieren ich meine Variable:

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

Und für die Ausgabe verwende ich zum Beispiel:

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

Dann habe ich eine logback.xml erstellt haben, dass die Protokolle werden gespeichert auf meiner HDD mit einem Timetemp. Auch hier habe ich die Lösung gefunden.

<?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> 

das funktioniert, sind alle meine Protokolle werden in meinem Windows-Umgebung unter "/ opt/Docker-busapi/data/logs" (i erstellt die Ordnerstruktur)

ich auch meine Extra montieren konnte gerettet werden Volumen nun über den Parameter -v in meinem dockerfile:

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 

Denn wenn ich meine docker Container überprüfen, wird das Volumen montiert. Via "Docker inspizieren busmicroservice" i erhalten:

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

Aber meine Protokolle werden nicht in meinen Logs Ordner gespeichert werden. Ich denke da ist noch etwas mit dem Pfad nicht in Ordnung. Welchen Pfad muss ich in meinen "docker run" Befehl eingeben?

Antwort

0

Sieht aus wie Sie auf Ihrem Dateipfadnamen nicht konsistent sind, in einigen Orten, die Sie haben diese definiert:

/opt/docker-busapi/data/logs/ 

Während in anderen, Sie haben:

/opt/docker-busmicroservice/data 

Und dann in der Docker Container, Sie sagen, dass diese in dem Behälter verwendet werden soll:

/logs 

Wenn Sie alle Ihre Dateien t wollen o Zum Host-Verzeichnis von /opt/docker-busapi/data/logs/ dann zuerst sicher sein, dass Verzeichnis vorhanden ist, und Sie haben die richtigen Berechtigungen darauf, und dann sicherzustellen, dass Ihre Anwendung verwendet /logs wie es Verzeichnis ist in speichern.

Dann Wenn du rennst:

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

Dann solltest du gut gehen.

Verwandte Themen