このコードは、ログファイルとコンソールの両方に同時に書き込みますか?
logFile = open("logfile.log",a)
print >>logFile,message
logFile.close()
いいえ、両方に書き込むことはありません。print()
コンソールにのみ書き込みます。元のコードに関する簡単なメモ。どこかで定義していると思いますmessage
が、コードはまだ正しくありません。a
次のように、open
ステートメント内のを引用符で囲む必要があります。
open("logfile.log", "a")
私はあなたがファイルに追加するつもりだったと思うので。それ以外の場合、コードは、定義された変数ではないためNameError
、をスローします。a
ただし、他の人が言っているように、ロギングモジュールの使用を強く検討する必要があります。これは、コンソールとログファイルの両方に書き込む方法の簡単な例です。コードはこことここから部分的に派生しています:
import inspect
import logging
def function_logger(file_level, console_level = None):
function_name = inspect.stack()[1][3]
logger = logging.getLogger(function_name)
logger.setLevel(logging.DEBUG) #By default, logs all messages
if console_level != None:
ch = logging.StreamHandler() #StreamHandler logs to console
ch.setLevel(console_level)
ch_format = logging.Formatter('%(asctime)s - %(message)s')
ch.setFormatter(ch_format)
logger.addHandler(ch)
fh = logging.FileHandler("{0}.log".format(function_name))
fh.setLevel(file_level)
fh_format = logging.Formatter('%(asctime)s - %(lineno)d - %(levelname)-8s - %(message)s')
fh.setFormatter(fh_format)
logger.addHandler(fh)
return logger
def f1():
f1_logger = function_logger(logging.DEBUG, logging.ERROR)
f1_logger.debug('debug message')
f1_logger.info('info message')
f1_logger.warn('warn message')
f1_logger.error('error message')
f1_logger.critical('critical message')
def f2():
f2_logger = function_logger(logging.WARNING)
f2_logger.debug('debug message')
f2_logger.info('info message')
f2_logger.warn('warn message')
f2_logger.error('error message')
f2_logger.critical('critical message')
def main():
f1()
f2()
logging.shutdown()
main()
ロガーオブジェクトは複数のハンドラーを持つことができるため、異なる場所に書き込む複数のハンドラーを作成できます。私のコードでは、function_logger
関数はそれが呼び出された関数に固有のロガーオブジェクトを作成します。
この関数は、レベルメッセージ以上をファイルにf1()
記録し、レベルメッセージ以上をコンソールに書き込みます。フォーマットはそれぞれ異なります。DEBUG
f1.log
ERROR
ただし、この関数f2()
はコンソールに何も記録せず、WARNING
レベルメッセージのみをログファイルに記録しますf2.log
。このスクリプトを1回実行すると、コンソールに次の出力が表示されます。
2012-07-20 10:46:38,950 - f1 - error message
2012-07-20 10:46:38,953 - f1 - critical message
そして、この出力はそれぞれf1.log
とになります。f2.log
f1.log:
2012-07-20 10:46:38,950 - 26 - DEBUG - debug message
2012-07-20 10:46:38,950 - 27 - INFO - info message
2012-07-20 10:46:38,950 - 28 - WARNING - warn message
2012-07-20 10:46:38,950 - 29 - ERROR - error message
2012-07-20 10:46:38,953 - 30 - CRITICAL - critical message
f2.log
2012-07-20 10:46:38,960 - 36 - WARNING - warn message
2012-07-20 10:46:38,960 - 37 - ERROR - error message
2012-07-20 10:46:38,960 - 38 - CRITICAL - critical message
いいえ。ファイルにのみ書き込みます。logging
モジュールを使用する必要があります。http://docs.python.org/library/logging.htmlを参照してください