syslogはUNIXシステムで共通して使われるシステムログユーティリティです。
(訳注:syslog=カーネル(kernel)のメッセージ・リング・バッファー
を読んだり消去(clear)したりする)。
syslogはFIFO(First In First Out)と呼ばれるスペシャルファイルを開く
デーモンです。FIFOはパイプ(pipe)に似たスペシャルファイルです。
syslogデーモンはリードサイドからのデータを待ち、ライトサイドに書き込むための
C関数があります。もしこれらのC関数でプログラムを書けば出力はsyslogに入ります。
 chroot 環境を使っていて、FIFO /dev/logは仮想環境
には存在しないことに注意して下さい。これは全ての仮想環境がsyslogへの記録が
できないということを意味しています。プログラムは新しく作ったものの代わ
りとして/dev/log を使えないので、ファイルを単にコピーすることもで
きません。
syslogの特定のバージョンにはudpソケットをFIFOの代わりに使っているものも ありますが、これは一般的なことではありません。
syslogは、コマンドラインで指定すれば、異なるFIFOを探します。 例えば以下のようにします。
syslog -p /virtual/logそして/dev/logを/virtual/logにリンクをはります(シンボリックリンク)。
ln -sf /virtual/log /dev/logつぎに以下のようにしてこのファイルに全ての
/dev/logをリンクします
(これはハードリンクでシンボリックリンクではないことに注意)。
ln /virtual/log /virtual/domain.com/dev/log上記のvirtfsスクリプトではすでにこれを行っています。
/virtualは一つ
の連続したディスクにあり、/dev/logはリンクされているので同じinode
番号かつ同じデータを指すことになります。chrootはこれをストップ
できないので全ての仮想/dev/logは機能します。全環境からのメッセージ
は一つの場所に記録されます。しかしもしプログラムを書きたくなく、それぞれlog
ファイルを分けたいという場合は以下のようにして別々にsyslogを使うこともできま
す。
syslog -p /virtual/domain1.com/dev/log syslog -p /virtual/domain2.com/dev/logもっともこうすることはプロセスIDの浪費なのでお奨めしません。 このバージョンのsyslog.initは、不適切な設定がされている場合には起動する度に 毎回 /dev/log に再リンクしてしまいます。 以下、修正したsyslog.initファイルを挙げておきます。
#!/bin/sh
# Source function library.
. /etc/rc.d/init.d/functions
case "$1" in
  start)
        echo -n "Starting dev log: "
        ln -sf /virtual/log /dev/log
        echo done
        echo -n "Starting system loggers: "
        daemon syslogd -p /virtual/log
        daemon klogd
        echo
        echo -n "Starting virtual dev log: "
        for i in /virtual/*
        do
                if [ ! -d "$i" ]
                then
                        continue
                fi
                if [ "$i" = "/virtual/lost+found" ]
                then
                        continue
                fi
                ln -f /virtual/log $i/dev/log
                echo -n "."
        done
        echo " done"
        touch /var/lock/subsys/syslog
        ;;
  stop)
        echo -n "Shutting down system loggers: "
        killproc syslogd
        killproc klogd
        echo
        rm -f /var/lock/subsys/syslog
        ;;
  *)
        echo "Usage: syslog {start|stop}"
        exit 1
esac
exit 0