AWS Elastic Beanstalk-Anwendungsprotokollierung mit Logback
BEARBEITEN: Bild hinzugefügt (Das Problem scheint, dass keine Protokolldateien geschrieben wurden)
Ich verwende eine Spring MVC (NICHT Springboot) WAR-Datei unter AWS Elastic Beanstalk auf einer 'Tomcat 8.5 mit Corretto 11 unter 64 Bit Amazon Linux 2 / 4.1.3' Umgebung.
Alles funktioniert wie erwartet, AUSSER Anwendungsprotokolle, die ich mit slf4j / logback schreibe.
Das Folgende ist meine Konfigurationsdatei logback.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE xml>
<configuration debug="true">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d{yyyy-MM-dd'T'HH:mm:ss.SSSZ} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<appender name="APPLOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/var/log/java.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>/var/log/java_%d{yyyy-MM-dd}_%i.log</FileNamePattern>
<!-- keep 14 days' worth of history -->
<maxHistory>14</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- or whenever the File size reaches 10MB -->
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSSZ} [%thread][%X{remoteHost}] %-5level %c{1} - %msg%n</pattern>
<!-- <pattern>%d %-5p %c{1} - %m%n</pattern> -->
</encoder>
</appender>
<logger name="com.personal.service.layer.mongodb" level="INFO"
additivity="false">
<appender-ref ref="STDOUT" />
<appender-ref ref="APPLOG" />
</logger>
<logger name="org.springframework" level="INFO"
additivity="false">
<appender-ref ref="STDOUT" />
<appender-ref ref="APPLOG" />
</logger>
<logger name="spring.web" level="INFO" additivity="false">
<appender-ref ref="STDOUT" />
<appender-ref ref="APPLOG" />
</logger>
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="APPLOG" />
</root>
</configuration>
Nach der Suche in Google / Stackoverflow habe ich einen Ordner ebextensions mit einer Konfigurationsdatei hinzugefügt, um meine Protokolle wie folgt in die Endprotokolle und das Bundle aufzunehmen:
files:
"/opt/elasticbeanstalk/tasks/bundlelogs.d/applogs.conf" :
mode: "000755"
owner: root
group: root
content: |
/var/log/*.log
"/opt/elasticbeanstalk/tasks/taillogs.d/applogs.conf" :
mode: "000755"
owner: root
group: root
content: |
/var/log/*.log
Nach einigen Online-Recherchen habe ich einige andere Kombinationen ausprobiert. Zum Beispiel habe ich versucht, die Protokolldatei in logback.xml als /var/app/current/logs/applog.log
und in den verwendeten conf-Dateien /var/log/current/logs/*.log
anstelle der oben gezeigten festzulegen , aber sie funktionierten auch nicht. Ich habe also das Gefühl, dass mir etwas bei der Anmeldung bei AWS mit Logback fehlt.
Ich bin auch offen für (Arbeits-) Vorschläge zur Protokollierung mit etwas anderem (log4j, Java-Protokollierung usw.).
EDIT: Endlich herausgefunden, was aws / eb Chaos, und war in der Lage, ssh an die Umgebung. Ich sehe nicht, dass java.log unter dem Ordner var / log (oder einem anderen Ordner) erstellt wurde.
Warum schreibt Logback die Protokolle nicht? Ist dieser Logpfad /var/log/java.log
nicht verwendbar?

Antworten
Dies funktioniert jetzt für mich, dank der akzeptierten Antwort in Logback mit Elastic Beanstalk , die ich ebenfalls gefragt habe.
Ich möchte das, was ich aus beiden Fragen gelernt habe, hier kombinieren, da es bei dieser Frage um das Lesen von Protokollen geht, während es bei dieser Frage um das Schreiben von Protokollen geht, und es wäre schön, eine vollständige Antwort an einem Ort zu haben.
Im Folgenden sind die Änderungen aufgeführt, die ich an der Konfigurationsdatei logback.xml und ebextensions vorgenommen habe, wie in der Frage erwähnt:
(1) Aktualisieren Sie <file>/var/log/java.log</file>
in logback.xml auf<file>/var/log/tomcat/java.log</file>
(2) Aktualisieren Sie /var/log/*.log
in der Konfigurationsdatei von ebextensions auf /var/log/tomcat/*.log
(dies ist optional, es funktioniert auch, wenn es so belassen wird /var/log/*.log
)
Der Grund, warum es im /var/log
Ordner nicht funktioniert hat, liegt in den Berechtigungen für den Ordner. Als ich in den Ordner ssh, stellte ich fest, dass die Berechtigungen für diesen Ordner nur auf root
Benutzer beschränkt sind .

Wenn die App jedoch mit Tomcat ausgeführt wird, wird sie als Benutzer ausgeführt, tomcat
der keine Berechtigung zum Schreiben in diesen Ordner hat. Der Benutzer tomcat
hat jedoch die Berechtigung, in den /var/log/tomcat
Ordner zu schreiben .

Der andere Ordner, auf den der tomcat
Benutzer Zugriff hat, ist der für die App erstellte Ordner /var/app
. Wenn der Speicherort der Protokolldatei in diesem Ordner in logback.xml festgelegt ist, funktioniert dies ebenfalls (es wäre auch erforderlich, die Konfigurationsdatei von ebextensions zu aktualisieren, um auf diesen Speicherort zu verweisen).
Ich habe ein paar Tage gebraucht, um das endlich herauszufinden, hoffe, es wird auch anderen helfen.
PS Ich habe das ConsoleAppender
aus meiner logback.xml herausgenommen, es hat nichts getan.