2013-04-09 13 views
14

コンソールとファイルの両方に例外を記録するサーバーを作成しようとしています。私は料理本からいくつかのコードを引っ張った。ここにあります:pythonロギングモジュールがファイルに何も書き込まない

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) 

このコードはコンソールに完全に正常に記録されますが、ファイルには何も記録されません。ファイルは作成されますが、何も書き込まれることはありません。ハンドラを閉じようとしましたが、何もしません。どちらもそれを洗い流すことはありません。私はインターネットを検索しましたが、明らかに私はこの問題の唯一の人です。誰が問題が何であるか考えているのですか?あなたの答えをありがとう。

+0

ログにはどのようなコマンドを使用していますか?あなたは単に 'logging.debug()'を呼び出していますか? – Leopd

+0

私はlogging.error()を使用しています – thePurpleMonkey

+0

私のためのreproはありません。あなたのコードは正常に動作します – wim

答えて

16

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') 
+1

ああね!これは完全に動作させました!あなたは天才です!私は完全に理解していませんが、それは正常に動作しました... – thePurpleMonkey

+5

良い精神的能力 – wim

+2

'logging.error'を呼び出すと、設定していないデフォルトのロガーが使用されます。変数 'logger'は最初の行で定義したもので、設定したすべてのプロパティがあります。 – Leopd

1

を呼び出して試してみてください、私はこの質問は少し古すぎるかもしれないことを知っているが、私は上記の方法にやり過ぎのビットを発見しました。これはexample.logにレベルのデバッグまたはそれ以上のものであり、すべてのログを書き込みます

import logging 

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

:私は同様の問題に走った、私はでそれを解決することができました。

logging.debug("This is a debug message")は、This is a debug messageからexample.logとなります。これが機能するにはレベルが重要です。

+1

私は、OPが私がやりたかったことの少し残酷すぎるとも思った。私はあなたが働いているコードを作ろうとしていますが、私のためのファイルは作成しません。 – Mymozaaa

+0

@Mymozaaa - https://docs.python.org/2/howto/logging.html#logging-to-a-fileこれがあなたを助けることを願っています。 –

1

インポートとbasicConfigをスクリプトの中に入れてみましょう。このようなもの:

import logging 
logging.basicConfig(filename='log.log', level=logging.INFO) 
. 
. 
import ... 
import ... 
関連する問題