web-dev-qa-db-ja.com

pythonスクリプトから/ var / logにログを書き込むためのベストプラクティス?

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',)
11
zezollo

ボックスで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を構成する方法

9
Michael Zhilin