如何在用于登录python的模块之间共享文件

如何在用于登录python的模块之间共享文件,python,logging,Python,Logging,我想将python中不同模块的消息记录到一个文件中。我还需要打印一些消息到控制台进行调试。为此,我使用了记录器模块。但是,logger模块将把所有具有给定严重性和更高级别的日志记录到文件或控制台 我只想将一些消息记录到文件中,它不应该包括来自控制台的消息 类似地,控制台消息不应包含记录到文件的消息 我的方法是创建一个singleton类,它在各个模块之间共享文件写入操作 在python中有没有比这更简单的方法 编辑: 我是Python新手。我试过的示例程序 logger = logging.ge

我想将python中不同模块的消息记录到一个文件中。我还需要打印一些消息到控制台进行调试。为此,我使用了记录器模块。但是,logger模块将把所有具有给定严重性和更高级别的日志记录到文件或控制台

我只想将一些消息记录到文件中,它不应该包括来自控制台的消息

类似地,控制台消息不应包含记录到文件的消息

我的方法是创建一个singleton类,它在各个模块之间共享文件写入操作

在python中有没有比这更简单的方法

编辑: 我是Python新手。我试过的示例程序

logger = logging.getLogger('simple_example')
logger.setLevel(logging.INFO)
# create file handler which logs even debug messages
fh = logging.FileHandler('spam.log')
fh.setLevel(logging.CRITICAL)
# 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 - %(name)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter)
fh.setFormatter(formatter)
# add the handlers to logger
logger.addHandler(ch)
logger.addHandler(fh)

# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')
控制台打印:

2015-02-03 15:36:00,651 - simple_example - ERROR - error message
2015-02-03 15:36:00,651 - simple_example - CRITICAL - critical message
#I don't want critical messages in console.
:

您还可以验证自己:

>>> import logging
>>> print logging.CRITICAL
50
>>> print logging.ERROR
40
>>> 
日志记录中有两种情况:

记录同一进程-根据日志的详细程度,应该有多个具有不同日志记录级别的处理程序。更高的级别意味着更少的输出。这就是为什么
DEBUG
是最低的预定义日志级别-它为调试目的写入所有内容

记录不同的进程-您应该设置多个记录器,可以使用
Logging.getLogger(name)
从代码中的任何位置访问它们。这样每次都会给相同的记录器,因此记录器设置在代码中持续存在,只需执行一次


第一种情况说明不能有“错误但不严重”日志,因为这与日志的工作方式相反。您可以有一个“关键但非错误”日志,这样就不那么详细了。这就是您可能想要的。

这里有一个脚本,创建两个记录器,使用您希望登录到文件或标准输出的记录器。问题是:在知道(从您的问题中)您不希望标准为日志级别(调试、错误、关键…)的情况下,您选择登录到标准输出或文件的标准是什么

当我运行这个脚本时:

D:\jrx\jrxpython                                                          
λ python essai.py                                                         
2015-02-03 11:12:07,210 - logger_stdout - DEBUG - stdout debug message    

D:\jrx\jrxpython                                                          
λ cat foo.log                                                             
2015-02-03 11:12:07,224 - logger_file - DEBUG - file debug message        

D:\jrx\jrxpython                                                          
λ   

您是否尝试过
日志记录
处理程序?是的,我尝试过。但是我不知道它将如何解决这个问题。您希望根据哪些标准来区分标准输出和文件输出?我必须使用脚本在文件中生成testdata。同时,我想在没有数据的情况下调试脚本,因为数据太重。@Knight71您可能没有按预期使用日志级别。当某些内容被认为是冗长的时,它应该有一个较低的级别(例如,
DEBUG
)。您正在以另一种方式进行操作。更改级别将使日志文件同时包含错误日志和关键日志。阅读问题时,您似乎正在尝试以不同级别而不是消息进行登录。它特别通过最后一位反映出来,在最后一位,您显示了您认为错误的内容(
CRITICAL
正在记录)。
D:\jrx\jrxpython                                                          
λ python essai.py                                                         
2015-02-03 11:12:07,210 - logger_stdout - DEBUG - stdout debug message    

D:\jrx\jrxpython                                                          
λ cat foo.log                                                             
2015-02-03 11:12:07,224 - logger_file - DEBUG - file debug message        

D:\jrx\jrxpython                                                          
λ