Pythonのメインスクリプトから/ var/log内のファイルにいくつかのログ情報を書き込みたいと思います。
logger.info("Starting")
を呼び出すと、ファイルに対してPermissionErrorが発生します。これは、/ var/log内のファイルがrootに属し、プログラムがrootとして実行されていないため、ごく普通のことです。
もちろん、myappに書き込むために、/var/log/my.log
の権限を設定することもできます。 (たとえば、同じグループを設定します)。しかし、それは私には良い習慣のようには見えません。myappを別のコンピューターにインストールするとどうなりますか?次に、インストールプロセス中にログファイルの権限を変更する必要がありますか?それとも、それを行うための別のより一般的な方法はありますか? (ログを「システム」に送信する一般的な方法のように?一般的な意味では、ポータブルも意味します。Linux、freebsdなどで何が機能しますか?)
関連性があるかどうかはわかりませんが、参考までに、コードの一部を次に示します。
メインスクリプト:
import logging, logging.config
from lib import settings
settings.init()
logging.config.fileConfig(settings.logging_conf_file)
logger = logging.getLogger(__name__)
ロギング設定ファイルのsettings.logging_conf_file
に一致するハンドラー:
[handler_mainHandler]
class=FileHandler
level=INFO
formatter=defaultFormatter
filemode=w
args=('/var/log/myapp.log',)
ボックスでsyslogdが実行されている場合は、SysLogHandlerを使用して、フォルダーのアクセス許可の問題を回避できます( https://docs.python.org/2/library/logging.handlers.html#sysloghandler ) 。
カテゴリを指定するには、ファシリティパラメータを目的に設定する必要があります(例:LOG_LOCAL5)。この場合、syslogdのlocal5。*カテゴリに対応します。
ファイル名ではなくハンドラーパラメーターとしてファシリティを指定する場合、特定のファイルにログレコードを書き込むようにsyslogdと言うようにsyslog構成を調整する必要があります。 FreeBSDでは、syslogconfファイルは/etc/syslog.conf(syslog.conf(5))です。
また、。のようなsyslogマッピングを/var/log/all.logに追加して、すべてのsyslogプロデューサーからのすべてのログを処理することもできます。疑問がある場合は、ロギングが機能するかどうか、およびアプリケーションのカテゴリを判断するのに役立ちます。
Rsyslogdの場合、ここで詳細情報を取得できます。 SysLogHandlerロギングクラスで使用するためにrsyslogを構成する方法