我正在寻找一种简单的方法来扩展标准python库中定义的logging功能。我只希望能够选择是否也将我的日志打印到屏幕上。
示例:通常情况下,要记录警告,您可以调用:
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)s: %(message)s', filename='log.log', filemode='w')
logging.warning("WARNING!!!")这将设置日志的配置并将警告放入日志中
我想要一些类似于呼叫的东西,比如:
logging.warning("WARNING!!!", True)其中True语句表示日志是否也打印到stdout。
我见过一些overriding the logger class实现的示例
但是我对这门语言是个新手,并不了解它是怎么回事,也不知道如何实现这个想法。任何帮助都将不胜感激:)
发布于 2011-10-27 23:40:49
Python日志记录模块定义了以下类:
发出日志消息的记录器。
将这些消息发送到目的地的处理程序。
格式化日志消息的格式。
筛选器过滤日志消息的。
记录器可以具有Handler。您可以通过调用addHandler()方法添加它们。处理程序可以有Filters和Formatters。您可以通过分别调用addFilter()和setFormatter()方法来添加它们。
它是这样工作的:
import logging
# make a logger
main_logger = logging.getLogger("my logger")
main_logger.setLevel(logging.INFO)
# make some handlers
console_handler = logging.StreamHandler() # by default, sys.stderr
file_handler = logging.FileHandler("my_log_file.txt")
# set logging levels
console_handler.setLevel(logging.WARNING)
file_handler.setLevel(logging.INFO)
# add handlers to logger
main_logger.addHandler(console_handler)
main_logger.addHandler(file_handler)现在,您可以像这样使用此对象:
main_logger.info("logged in the FILE")
main_logger.warning("logged in the FILE and on the CONSOLE")如果您只是在您的机器上运行python,那么您可以在交互式控制台中输入上述代码,您应该会看到输出。如果您有在当前目录中创建文件的权限,日志文件将被创建在当前目录中。
我希望这能帮到你!
发布于 2015-09-02 18:41:58
可以覆盖logging.getLoggerClass()来向记录器添加新功能。我写了一个用stdout打印绿色消息的简单类。
我代码中最重要的部分:
class ColorLogger(logging.getLoggerClass()):
__GREEN = '\033[0;32m%s\033[0m'
__FORMAT = {
'fmt': '%(asctime)s %(levelname)s: %(message)s',
'datefmt': '%Y-%m-%d %H:%M:%S',
}
def __init__(self, format=__FORMAT):
formatter = logging.Formatter(**format)
self.root.setLevel(logging.INFO)
self.root.handlers = []
(...)
handler = logging.StreamHandler()
handler.setFormatter(formatter)
self.root.addHandler(handler)
def info(self, message):
self.root.info(message)
(...)
def info_green(self, message):
self.root.info(self.__GREEN, message)
(...)
if __name__ == '__main__':
logger = ColorLogger()
logger.info("This message has default color.")
logger.info_green("This message is green.")发布于 2011-09-02 02:28:11
处理程序将日志记录(由记录器创建)发送到适当的目的地。
(来自文档:http://docs.python.org/library/logging.html)
只需使用日志对象设置多个处理程序,一个用于写入文件,另一个用于写入屏幕。
更新
下面是一个示例函数,您可以在类中调用它来使用处理程序设置日志记录。
def set_up_logger(self):
# create logger object
self.log = logging.getLogger("command")
self.log.setLevel(logging.DEBUG)
# create console handler and set min level recorded to debug messages
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
# add the handler to the log object
self.log.addHandler(ch)您只需要为文件设置另一个处理程序,就像已经存在的StreamHandler代码一样,并将其添加到日志对象中。表示ch.setLevel(logging.DEBUG)的行表示此特定处理程序将接受调试或更高级别的日志记录消息。您可能希望将您的设置为WARNING或更高,因为您只希望将更重要的内容转到控制台。因此,您的日志记录的工作方式如下:
self.log.info("Hello, World!") -> goes to file
self.log.error("OMG!!") -> goes to file AND consolehttps://stackoverflow.com/questions/7274732
复制相似问题