23

によって作成されたファイルのアクセス許可はどのようにRollingFileAppender決定されますか?

最近、root以外のユーザーとして実行する必要があるデーモンプロセスを変更しました。ファイルは現在、0600(所有者のみが読み取り可能)のアクセス許可で作成されていますが、すべてまたは少なくとものメンバーが読み取り可能にする必要があります。管理者グループ(0644または0640)。私のTomcatアプリによって作成されたファイルは、常に0644(すべての人が読み取り可能)です。

誤って他の何かを変更したのか、それともそのユーザーの権限に関係しているのかはわかりません。テストとして親ディレクトリを作成しましたが0777、役に立たなかったようです(そうでした0755)。私はそれらを見ることができるので明らかに大したことではありませんsudoが、むしろ迷惑であり、顧客にそれらをコピーしてもらう必要がある場合は問題になります。

jsvc/commons-daemon環境は、デーモンの実行に使用するUbuntu10.04LTSです。ここで重要な場合は、私のlog4j設定の基本です:

<!DOCTYPE log4j:configuration SYSTEM 'log4j.dtd'>
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true">

<appender name="StdOutAppender" class="org.apache.log4j.ConsoleAppender">
    <!-- only send error / fatal messages to console (catalina.out) -->
    <param name="threshold" value="${log4j.StdOutAppender.threshold}" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%5p %d{ISO8601} [%t][%x] %c - %m%n" />
        <!--%d{dd-MMM-yyyy HH:mm:ss.SSS} [%5p] %c{2}.%M [line:%L]: %m%n-->
    </layout>
</appender>

<appender name="TimeBasedRollingFileAppender" class="org.apache.log4j.rolling.RollingFileAppender">
    <param name="append" value="true" />
    <param name="encoding" value="UTF-8" />
    <param name="threshold" value="${log4j.TimeBasedRollingFileAppender.threshold}" />
    <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
        <param name="FileNamePattern" value="${cloud.daemon.log4j.file.config.path}.%d.gz" />
    </rollingPolicy>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%5p %d{ISO8601} [%t][%x] %c - %m%n" />
        <!--%d{dd-MMM-yyyy HH:mm:ss.SSS} [%5p] %c{2}.%M [line:%L]: %m%n-->
    </layout>
</appender>
....
4

4 に答える 4

21

ファイルのパーミッションはユーザーのumaskによって決定されます-log4j自体でそれを変更する方法はありません。

おそらく、ユーザーのumaskを次のように設定する必要があります。0117

$ umask -S 0117
u=rw,g=rw,o=
于 2011-10-25T17:53:40.773 に答える
12

Log4J-core-2.9は、 FileAppenderRollingFileAppender、およびRollingRandomAccessFileManagerのposix OSにこの機能 fileOwnerfileGroup、およびfilePermissionsを提供します。

<RollingFile name="RollingFile"
             fileName="mylogs.log"
             filePattern="mylogs-$${date:MM-dd-yyyy}-%i.log.7z"
             fileOwner="log4j"
             fileGroup="log4grp"
             filePermissions="rw-r-----">
于 2017-06-21T06:44:19.467 に答える
6

これは古い質問だと思いますが、この問題を検索したときはまだ最初のヒットだったので...

RollingFileAppender次のように、ファイルを最初に開いたときに、ファイルをサブクラス化してアクセス許可を設定するだけです。

public class WorldWritableFileAppender extends RollingFileAppender {
    @Override
    public synchronized void setFile(String fileName, boolean append,
            boolean bufferedIO, int bufferSize) throws IOException {
        super.setFile(fileName, append, bufferedIO, bufferSize);
        File f = new File(fileName);
        if(f.exists()) {
            java.nio.file.Files.setPosixFilePermissions(f.toPath(), 
                    EnumSet.allOf(PosixFilePermission.class));
        }
    }
}

次に、WorldWritableFileAppenderの代わりに参照RollingFileAppenderしますlog4j.xml

<appender name="name" class="path.to.WorldWritableFileAppender">

これが機能setFile()するのは、ロガーを最初にセットアップするときと、ロールオーバー後に新しいファイルを作成するときの両方で呼び出されるためです。古いファイルはFile.renameTo()、権限を保持するとともに移動されます。

于 2017-04-11T18:21:22.820 に答える
1

log4j.properties内にこれが含まれています:log4j.appender.file.File=${user.home}/log とにかく、これはコンソールとファイル「log」に情報を表示する私の構成です。

# Root logger option
log4j.rootLogger=DEBUG, stdout, file

# Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=${user.home}/test
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
于 2017-02-08T13:07:12.863 に答える