0

最近OpenStackでスピンアップされたCentOs6マシンがあります。当社のアプリケーションのデプロイは、war ファイルを作成して /usr/share/tomcat/webapps に配置することで構成されます。約 1 か月前に作成された他の CentOs6 マシンにデプロイし、アプリケーション ログを/var/log/myAppName/specifiLogFile.logに記録します。動作していないのは新しいマシンだけです (古いマシンは同じ構成であると想定されていることに注意してください)。

アプリケーションではなく、サーバー自体に絞り込んだと思います。新しいボックスにデプロイされる war ファイルをビルドする他のプロジェクトも/var/log/myOtherApp/otherLogFile.logに記録する必要がありますが、記録しません。

アプリケーション ログが/var/log/に生成されない理由を確認できる場所があるかどうか疑問に思っています... これは何が原因でしょうか?

アプリケーションのログ ディレクトリに対するアクセス許可は 660 で、適切なユーザーには読み取りと書き込みのアクセス権があります。

私が試したこと:

logback でデバッグを有効にし、次のログで問題を調査します: tomcat/logs/catalina.outtomcat/logs/localhost.2016-06-05.log/var/log/messages

他の唯一の違いは、古いアプリが Java 7 を実行していて、新しい CentOs ボックスが Java 8 にあるという事実でした。Java 8 にアップグレードした後でも、問題は解決しません。

編集: ログバック構成を含めますが、この構成は約1か月前に作成したサーバーで正常に機能すると言わざるを得ません...これは、新しいサーバー自体の構成に関係していると確信しています。

import ch.qos.logback.classic.encoder.PatternLayoutEncoder
import ch.qos.logback.core.rolling.RollingFileAppender
import ch.qos.logback.core.rolling.TimeBasedRollingPolicy
import ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP

import static ch.qos.logback.classic.Level.DEBUG
import static ch.qos.logback.classic.Level.WARN
import static ch.qos.logback.classic.Level.INFO

scan("30 seconds")

appender("ROLLING", RollingFileAppender) {
  file = "/var/log/myApp/myApp.log"

  encoder(PatternLayoutEncoder) {
    pattern = "%date %level [%thread] %logger{10} [%file:%line] %msg%n"
  }

  rollingPolicy(TimeBasedRollingPolicy){
    // Rollover daily
    fileNamePattern = "/var/log/myApp/myApp%d{yyyy-MM-dd}.log.gz"

    // Delete the archived files older than 10 days
    maxHistory = 10
  }

}

root(DEBUG, ["ROLLING"])
4

1 に答える 1

1

ロギング構成が正常に機能すると仮定すると、これはパーミッションの問題であると推測できます。

サーバー上のディレクトリ/var/logは確実に存在しますが、アプリがログを記録するサブディレクトリが存在することを確認してください (または、アプリケーションがそのサブディレクトリを作成する権限を持っていることを確認してください)。

その理論をテストするために、ディレクトリ/var/log/yourAppNameが存在することを確認してから、sudo chmod 666 /var/log/yourAppName. 完了したら、アプリケーションを再起動し、そのディレクトリにログ ファイルが作成されるかどうかを確認します。

それが役立つ場合は、そのソリューションを再検討し、所有者を/var/log/yourAppNameアプリが実行されているユーザーに設定し、そのディレクトリを世界中で読み書きできないようにすることをお勧めします。

于 2016-06-05T17:44:31.510 に答える