7

この方法でログ ファイルを作成します。

    global logger
    logger = logging.getLogger("plus_dig_cname")
    logger.setLevel(logging.DEBUG)

    fh = logging.FileHandler( fdoc_log + "/plus_dig_cname.log" )

    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    fh.setFormatter(formatter)

    logger.addHandler(fh)

plus_dig_cname.log のサイズが 300MB を超える場合は、シェル スクリプトで処理します。主なプロセスは次のとおりです。

 mv $LOG_DIR/$1 $LOG_DIR/$1.bk
 [ $? -ne 0 ] && return 1
 touch $LOG_DIR/$1
 [ $? -ne 0 ] && return 1
 chmod 666 $LOG_DIR/$1
 [ $? -ne 0 ] && return 1

それをmvして、新しいものに触れてください。
問題は、ロガーが plus_dig_cname.log のファイルに何も書き込めないことです。ロギングが機能しません。
たぶん、次の方法で解決できます。

with open( "plus_dig_cname.log", "w" ):
               pass

この方法で、Python で新しいログ ファイルを取得できます。しかし、私はBashで新しいログファイルを取得したい.

では、なぜ「mv touch chmod」の後にロギングが機能しないのでしょうか?

ありがとうございました

4

2 に答える 2

6

RotatingFileHandlerを使用して、これを処理します。

例えば:

MAX_SIZE = 300 * 1024 * 1024
LOG_PATH = fdoc_log + "/plus_dig_cname.log"
fh = logging.handlers.RotatingFileHandler(LOG_PATH, maxBytes=MAX_SIZE, backupCount=5)

これにより、それぞれ300MBのバックアップが5つ作成されます。

于 2012-09-17T06:16:58.590 に答える
1

ファイルは、作成時FileHandler()または最初の書き込み時に開かれます。ファイルを移動した場合。それはなくなった。

logging.handlers.RotatingFileHandlerPythonを使用してファイルをローテーションするために@sberryが提案したように使用できます。

たとえば、 logrotateを使用してログ ファイルを外部でローテーションする場合、スクリプトを再起動するか、postrotate ステップでシグナルを送信することにより、ファイルがなくなったことをスクリプトに通知できます。

inotify などを使用して変更を検出すると、スクリプトでファイルを自動的に再度開くことができます。tail -f方法とtail -F作業を比較します。

于 2012-09-17T06:43:38.193 に答える