48

コンソールとファイルの両方に例外を記録するサーバーを作成しようとしています。クックブックからいくつかのコードを取り出しました。ここにあります:

logger = logging.getLogger('server_logger')
logger.setLevel(logging.DEBUG)
# create file handler which logs even debug messages
fh = logging.FileHandler('server.log')
fh.setLevel(logging.DEBUG)
# create console handler with a higher log level
ch = logging.StreamHandler()
ch.setLevel(logging.ERROR)
# create formatter and add it to the handlers
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
ch.setFormatter(formatter)
fh.setFormatter(formatter)
# add the handlers to logger
logger.addHandler(ch)
logger.addHandler(fh)

このコードはコンソールに完全に記録されますが、ファイルには何も記録されません。ファイルは作成されますが、何も書き込まれません。ハンドラーを閉じようとしましたが、何もしません。フラッシングもしません。インターネットで検索しましたが、どうやらこの問題を抱えているのは私だけのようです。誰が問題が何であるか知っていますか? 回答ありがとうございます。

4

6 に答える 6

44

電話してみる

logger.error('This should go to both console and file')

それ以外の

logging.error('this will go to the default logger which you have not changed the config of')
于 2013-04-09T04:34:45.933 に答える
19

import と basicConfig をスクリプトの一番最初に置くようにしてください。このようなもの:

import logging
logging.basicConfig(filename='log.log', level=logging.INFO)
.
.
import ...
import ...
于 2017-08-10T12:50:43.867 に答える
5

この質問は少し古すぎるかもしれませんが、上記の方法は少しやり過ぎであることがわかりました。同様の問題に遭遇しましたが、次の方法で解決できました。

import logging

logging.basicConfig(format = '%(asctime)s %(message)s',
                    datefmt = '%m/%d/%Y %I:%M:%S %p',
                    filename = 'example.log',
                    level=logging.DEBUG)

example.logこれにより、debug レベル以上のすべてのログに書き込まれます。

logging.debug("This is a debug message")に書き込みThis is a debug messageますexample.log。これが機能するためには、レベルが重要です。

于 2016-10-16T14:33:45.180 に答える