Journalisation des applications AWS Elastic Beanstalk avec Logback

Nov 26 2020

EDIT: Image ajoutée (le problème semble que les fichiers journaux ne sont pas écrits)

J'exécute un fichier WAR Spring mvc (PAS springboot) sur AWS Elastic Beanstalk sur un environnement 'Tomcat 8.5 avec Corretto 11 fonctionnant sur un environnement 64 bits Amazon Linux 2 / 4.1.3'.

Tout fonctionne comme prévu SAUF les journaux d'application que j'écris avec slf4j / logback.

Ce qui suit est mon fichier de configuration 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>

Après avoir recherché google / stackoverflow, j'ai ajouté un dossier ebextensions avec un fichier de configuration pour inclure mes journaux avec les journaux de fin et le regroupement comme suit:

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

Après quelques recherches en ligne, j'ai essayé d'autres combinaisons. Par exemple, j'ai essayé de définir le fichier journal dans logback.xml au fur /var/app/current/logs/applog.loget à mesure des fichiers de configuration utilisés /var/log/current/logs/*.log, au lieu de ce qui est montré ci-dessus, mais ils n'ont pas fonctionné non plus. J'ai donc l'impression qu'il me manque quelque chose concernant la connexion à AWS avec Logback.

Je suis également ouvert aux suggestions (de travail) sur la journalisation avec autre chose (log4j, journalisation java, etc.).

EDIT: J'ai enfin compris le désordre aws / eb et a pu ssh dans l'environnement. Je ne vois pas java.log créé sous le dossier var / log (ou tout autre dossier à la matière).

Pourquoi logback n'écrirait-il pas les journaux? Ce chemin d'accès /var/log/java.logn'est- il pas utilisable?

Réponses

TonyScott Nov 28 2020 at 03:05

Cela fonctionne pour moi maintenant, grâce à la réponse acceptée dans Logback avec Elastic Beanstalk , que j'ai également posée.

Je veux combiner ce que j'ai appris des deux questions ici parce que cette question concerne la lecture des journaux alors que cette question concerne l'écriture des journaux, et ce serait bien d'avoir une réponse complète en un seul endroit.

Voici les modifications que j'ai apportées au fichier de configuration logback.xml et ebextensions, comme mentionné dans la question:

(1) Dans logback.xml, mettez <file>/var/log/java.log</file>à jour vers<file>/var/log/tomcat/java.log</file>

(2) Dans le fichier de configuration ebextensions, mettez /var/log/*.logà jour vers /var/log/tomcat/*.log(ceci est facultatif, cela fonctionnera même s'il est laissé comme /var/log/*.log)

La raison pour laquelle il ne fonctionnait pas dans le /var/logdossier est à cause des autorisations sur le dossier. Lorsque je ssh dans le dossier, j'ai trouvé que les autorisations sur ce dossier sont limitées à l' rootutilisateur uniquement.

Cependant, lorsque l'application s'exécute avec Tomcat, elle s'exécute en tant qu'utilisateur tomcatqui n'a pas l'autorisation d'écrire dans ce dossier. Cependant, l'utilisateur tomcata l'autorisation d'écrire dans le /var/log/tomcatdossier.

L'autre dossier que j'ai trouvé auquel l' tomcatutilisateur a accès est le dossier créé pour l'application /var/app. Donc, si l'emplacement du fichier journal est défini dans ce dossier dans logback.xml, cela fonctionnerait également (il faudrait également mettre à jour le fichier de configuration ebextensions pour qu'il pointe vers cet emplacement).

Il m'a fallu quelques jours pour enfin comprendre cela, j'espère que cela aidera aussi les autres.

PS J'ai sorti le ConsoleAppenderde mon logback.xml, il ne faisait rien.