你正试图重现 Python 标准库做得很好的东西,但结果却很糟糕;请检查记录模块 http://docs.python.org/library/logging.html.
使用此模块,您可以完全按照您的意愿进行操作,但以更简单、标准且可扩展的方式进行。您可以按如下方式继续(此示例是从记录食谱 http://docs.python.org/howto/logging-cookbook.html#logging-to-multiple-destinations):
假设您想使用不同的消息登录控制台和文件
格式和不同情况下。假设您要记录消息
具有 DEBUG 和更高级别的文件,以及这些级别的消息
INFO 和更高版本到控制台。我们还假设该文件应该
包含时间戳,但控制台消息不应包含时间戳。就是这样
你可以实现这个:
import logging
# set up logging to file - see previous section for more details
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
datefmt='%m-%d %H:%M',
filename='/temp/myapp.log',
filemode='w')
# define a Handler which writes INFO messages or higher to the sys.stderr
console = logging.StreamHandler()
console.setLevel(logging.INFO)
# set a format which is simpler for console use
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
# tell the handler to use this format
console.setFormatter(formatter)
# add the handler to the root logger
logging.getLogger().addHandler(console)
# Now, we can log to the root logger, or any other logger. First the root...
logging.info('Jackdaws love my big sphinx of quartz.')
# Now, define a couple of other loggers which might represent areas in your
# application:
logger1 = logging.getLogger('myapp.area1')
logger2 = logging.getLogger('myapp.area2')
logger1.debug('Quick zephyrs blow, vexing daft Jim.')
logger1.info('How quickly daft jumping zebras vex.')
logger2.warning('Jail zesty vixen who grabbed pay from quack.')
logger2.error('The five boxing wizards jump quickly.')
当您运行此命令时,您将在控制台上看到
root : INFO Jackdaws love my big sphinx of quartz.
myapp.area1 : INFO How quickly daft jumping zebras vex.
myapp.area2 : WARNING Jail zesty vixen who grabbed pay from quack.
myapp.area2 : ERROR The five boxing wizards jump quickly.
在文件中你会看到类似的内容
10-22 22:19 root INFO Jackdaws love my big sphinx of quartz.
10-22 22:19 myapp.area1 DEBUG Quick zephyrs blow, vexing daft Jim.
10-22 22:19 myapp.area1 INFO How quickly daft jumping zebras vex.
10-22 22:19 myapp.area2 WARNING Jail zesty vixen who grabbed pay from quack.
10-22 22:19 myapp.area2 ERROR The five boxing wizards jump quickly.
如您所见,DEBUG 消息仅显示在文件中。另一个
消息被发送到两个目的地。
此示例使用控制台和文件处理程序,但您可以使用任何
您选择的处理程序的数量和组合。