ログバックを使用したAWSElasticBeanstalkアプリケーションのロギング

Nov 26 2020

編集:画像を追加しました(問題はログファイルが書き込まれていないようです)

'Tomcat 8.5 with Corretto11が64ビットAmazonLinux 2 /4.1.3'環境で実行されているAWSElasticBeanstalkでspringmvc(springbootではない)WARファイルを実行しています。

slf4j / logbackで書き込んだアプリケーションログを除いて、すべてが期待どおりに機能しています。

以下は私の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>

google / stackoverflowを検索した後、構成ファイルを含むebextensionsフォルダーを追加して、ログとテールログを含め、次のようにバンドルしました。

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

オンラインで調査した後、他の組み合わせを試しました。たとえば、上記の代わりに、logback.xmlのログファイルを/var/app/current/logs/applog.log使用するconfファイルと同じように設定しようとしました/var/log/current/logs/*.logが、どちらも機能しませんでした。そのため、Logbackを使用したAWSへのロギングについて何かが足りないように感じます。

また、他の何か(log4j、javaロギングなど)でのロギングに関する(作業中の)提案も受け付けています。

編集:最終的にaws / ebの混乱を理解し、環境にSSH接続することができました。var / logフォルダー(またはその他のフォルダー)の下に作成されたjava.logが表示されません。

ログバックがログを書き込まないのはなぜですか?そのログパス/var/log/java.logは使用できませんか?

回答

TonyScott Nov 28 2020 at 03:05

Logback with Elastic Beanstalkで受け入れられた回答のおかげで、これは今私にとってはうまくいっています。

この質問はログの読み取りに関するものであるのに対し、この質問はログの書き込みに関するものであるため、ここで両方の質問から学んだことを組み合わせたいと思います。完全な回答が1か所にあると便利です。

以下は、質問で述べたように、logback.xmlおよびebextensions構成ファイルに加えた変更です。

(1)logback.xmlで、次のように更新<file>/var/log/java.log</file>します。<file>/var/log/tomcat/java.log</file>

(2)ebextensions構成ファイルで、に更新/var/log/*.logします/var/log/tomcat/*.log(これはオプションであり、そのままにしておいても機能します/var/log/*.log

/var/logフォルダー内で機能しなかった理由は、フォルダーへのアクセス許可のためです。フォルダにSSHで接続すると、そのフォルダへのアクセス許可がrootユーザーのみに制限されていることがわかりました。

ただし、アプリがTomcatで実行されている場合tomcat、そのフォルダーへの書き込み権限を持たないユーザーとして実行されます。ただし、ユーザーtomcatには/var/log/tomcatフォルダーへの書き込み権限があります。

tomcatユーザーがアクセスできるもう1つのフォルダーは、アプリ用に作成されたフォルダーです/var/app。したがって、ログファイルの場所がlogback.xmlのそのフォルダー内に設定されている場合は、同様に機能します(その場所を指すように、ebextensions構成ファイルを更新する必要もあります)。

最終的にこれを理解するのに数日かかりました。それが他の人にも役立つことを願っています。

PS ConsoleAppenderlogback.xmlからを取り出しましたが、何もしていませんでした。