Log de aplicativo AWS Elastic Beanstalk com Logback
EDIT: imagem adicionada (o problema parece que os arquivos de log não foram gravados)
Estou executando um arquivo WAR do spring mvc (NÃO do springboot) no AWS Elastic Beanstalk em um ambiente 'Tomcat 8.5 com Corretto 11 em execução no Amazon Linux 2 / 4.1.3 de 64 bits.
Tudo está funcionando conforme o esperado, EXCETO os logs de aplicativos que escrevo com slf4j / logback.
A seguir está o meu arquivo de configuração 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>
Depois de pesquisar google / stackoverflow, adicionei uma pasta ebextensions com um arquivo de configuração para incluir meus logs com os logs de cauda e agrupar da seguinte forma:
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
Depois de alguma pesquisa online, tentei algumas outras combinações. Por exemplo, tentei definir o arquivo de log em logback.xml como /var/app/current/logs/applog.log
e nos arquivos conf usados /var/log/current/logs/*.log
, em vez do que é mostrado acima, mas também não funcionaram. Portanto, sinto que estou perdendo algo sobre o registro na AWS com Logback.
Também estou aberto a sugestões (de trabalho) sobre registro em log com outra coisa (log4j, log de java, etc).
EDIT: Finalmente descobri a bagunça aws / eb e fui capaz de ssh para o ambiente. Não vejo java.log criado na pasta var / log (ou qualquer outra pasta para o assunto).
Por que o logback não estaria gravando os logs? Esse logpath /var/log/java.log
não pode ser usado?

Respostas
Isso está funcionando para mim agora, graças à resposta aceita no Logback com Elastic Beanstalk , que eu também perguntei.
Quero combinar o que aprendi com as duas perguntas aqui, porque esta pergunta é sobre a leitura de logs, enquanto aquela pergunta é sobre como escrever logs, e seria bom ter uma resposta completa em um só lugar.
A seguir estão as alterações que fiz no arquivo de configuração logback.xml e ebextensions conforme mencionado na pergunta:
(1) Em logback.xml, atualize <file>/var/log/java.log</file>
para<file>/var/log/tomcat/java.log</file>
(2) No arquivo de configuração ebextensions, atualize /var/log/*.log
para /var/log/tomcat/*.log
(opcional, funcionará mesmo que seja deixado como /var/log/*.log
)
A razão pela qual ele não estava funcionando na /var/log
pasta é por causa das permissões para a pasta. Quando eu ssh para a pasta, descobri que as permissões para essa pasta são limitadas root
apenas ao usuário.

No entanto, quando o aplicativo está sendo executado com o Tomcat, ele é executado como o usuário tomcat
que não tem permissão para gravar nessa pasta. No entanto, o usuário tomcat
tem permissão para gravar na /var/log/tomcat
pasta.

A outra pasta que encontrei à qual o tomcat
usuário tem acesso é a pasta criada para o aplicativo /var/app
. Portanto, se o local do arquivo de log for definido dentro dessa pasta em logback.xml, também funcionará (também será necessário atualizar o arquivo de configuração ebextensions para apontar para esse local).
Levei alguns dias para finalmente descobrir isso, espero que ajude outras pessoas também.
PS Tirei o ConsoleAppender
do meu logback.xml, ele não estava fazendo nada.