此代码是否同时写入日志文件和控制台?
logFile = open("logfile.log",a)
print >>logFile,message
logFile.close()
答案 0 :(得分:23)
不,它不会同时写入。 print()
将仅写入控制台。关于原始代码的快速说明。我假设您在某处定义message
,但代码仍然不正确。您需要a
语句中open
周围的引号,如下所示:
open("logfile.log", "a")
因为我认为你打算附加到该文件。否则,您的代码会抛出NameError
,因为a
不是已定义的变量。
但是,正如其他人所说,你应该强烈考虑使用logging模块。这是一个如何写入控制台和日志文件的简单示例。该代码部分源自here和here:
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()
由于logger对象可以有多个处理程序,因此我们可以创建多个处理程序来写入不同的位置。在我的代码中,function_logger
函数创建了一个特定于它所调用函数的记录器对象。
函数f1()
将DEBUG
级别消息及以上消息记录到文件f1.log
,同时将ERROR
级别消息及以上消息写入控制台,每种消息的格式不同。
但是,函数f2()
不会向控制台记录任何内容,只会将WARNING
级别的消息记录到其日志文件f2.log
中。运行此脚本一次会在控制台上生成此输出:
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
答案 1 :(得分:0)
没有。它只写入文件。您应该使用logging
模块。见http://docs.python.org/library/logging.html