Registro de aplicaciones de AWS Elastic Beanstalk con Logback
EDITAR: Imagen agregada (el problema parece que los archivos de registro no están escritos)
Estoy ejecutando un archivo WAR de Spring mvc (NO Springboot) en AWS Elastic Beanstalk en un entorno 'Tomcat 8.5 con Corretto 11 ejecutándose en un entorno de 64 bits Amazon Linux 2 / 4.1.3'.
Todo funciona como se esperaba, EXCEPTO los registros de aplicaciones que escribo con slf4j / logback.
El siguiente es mi archivo de configuración 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>
Después de buscar en google / stackoverflow, agregué una carpeta ebextensions con un archivo de configuración para incluir mis registros con los registros finales y agruparlos de la siguiente manera:
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
Después de investigar un poco en línea, probé otras combinaciones. Por ejemplo, he intentado configurar el archivo de registro en logback.xml como /var/app/current/logs/applog.logy en los archivos conf utilizados /var/log/current/logs/*.log, en lugar de lo que se muestra arriba, pero tampoco funcionaron. Entonces siento que me falta algo sobre el registro en AWS con Logback.
También estoy abierto a sugerencias (de trabajo) sobre el registro con otra cosa (log4j, registro de Java, etc.).
EDITAR: Finalmente descubrió el desorden de aws / eb y fue capaz de enviar ssh al entorno. No veo java.log creado en la carpeta var / log (o cualquier otra carpeta relacionada con el asunto).
¿Por qué logback no estaría escribiendo los registros? ¿Esa ruta de registro /var/log/java.logno se puede utilizar?
Respuestas
Esto me está funcionando ahora, gracias a la respuesta aceptada en Logback con Elastic Beanstalk , que también pregunté.
Quiero combinar lo que aprendí de ambas preguntas aquí porque esta pregunta trata sobre la lectura de registros, mientras que la pregunta trata sobre la escritura de registros, y sería bueno tener una respuesta completa en un solo lugar.
Los siguientes son los cambios que hice en el archivo de configuración logback.xml y ebextensions como se menciona en la pregunta:
(1) En logback.xml, actualice <file>/var/log/java.log</file>a<file>/var/log/tomcat/java.log</file>
(2) En el archivo de configuración de ebextensions, actualice /var/log/*.loga /var/log/tomcat/*.log(esto es opcional, funcionará incluso si se deja como /var/log/*.log)
La razón por la que no funcionaba en la /var/logcarpeta es por los permisos de la carpeta. Cuando accedo a la carpeta, descubrí que los permisos para esa carpeta están limitados rootsolo para el usuario.
Sin embargo, cuando la aplicación se ejecuta con Tomcat, se ejecuta como el usuario tomcatque no tiene permiso para escribir en esa carpeta. Sin embargo, el usuario tomcattiene permiso para escribir en la /var/log/tomcatcarpeta.
La otra carpeta que encontré a la que el tomcatusuario tiene acceso es la carpeta creada para la aplicación /var/app. Entonces, si la ubicación del archivo de registro se establece dentro de esa carpeta en logback.xml, también funcionaría (también requeriría actualizar el archivo de configuración de ebextensions para que apunte a esa ubicación).
Me tomó un par de días resolver esto finalmente, espero que también ayude a otros.
PD: ConsoleAppenderSaqué el de mi logback.xml, no estaba haciendo nada.