python 日志模块(不使用配置文件)

"""
    author: htfang
    date  : 2014 12 15

    logging module , use multiple logs without a log config file
"""
import logging
from logging import (DEBUG,
                     CRITICAL,
                     FATAL,
                     ERROR,
                     WARNING,
                     WARN,
                     INFO,
                     DEBUG,
                     NOTSET)

import sys

class LogBuilder():
    """
    as a rookie, you need‘nt know how this builder construct, just learn how to use it!!!
    example:

    log = LogBuilder()
    fd_log = log.getLogger("fd")
    mq_log = log.getLogger("mq")

    fd_log.error("error")
    mq_log.info("info") 

    if you module need log,
    first add a item in LOG_NAMES,appiont handlers and log level(ni dong de!!!)
    second config your handlers in FILE_HANDLERS or STREAM_HANDLERS whitch you appiont in LOG_NAMES,
    then select or add a format to your handlers in FORMATTERS
    """
    LOG_NAMES = {
            "fd":{"handlers":["frame","stderr",],"level":DEBUG},
            "mq":{"handlers":["rabbitmq","stderr",],"level":DEBUG},
        }

    FILE_HANDLERS = {
            "frame":{"fileName":"frame.log","format":"dft"},
            "rabbitmq":{"fileName":"rabbitmq.log","format":"dft"},
        }

    STREAM_HANDLERS = {
            "stdin":{"fileName":sys.stdin, "format":"dft"},
            "stdout":{"fileName":sys.stdout, "format":"dft"},
            "stderr":{"fileName":sys.stderr, "format":"dft"},
        }

    FORMATTERS = {
            "dft":{"fmt":("%(name)s %(asctime)s %(filename)s[line:%(lineno)d]%(levelname)s:%(message)s", 
                ‘%a, %d %b %Y %H:%M:%S‘)},
        }

    def __init__(self):
        for format_name in self.FORMATTERS:
            formatter = logging.Formatter(self.FORMATTERS[format_name]["fmt"][0],
                    self.FORMATTERS[format_name]["fmt"][1])
            self.FORMATTERS[format_name]["formatter"] = formatter

        for handler_name in self.FILE_HANDLERS:
            file_handler = logging.FileHandler(self.FILE_HANDLERS[handler_name]["fileName"])
            file_handler.setFormatter(self.FORMATTERS[self.FILE_HANDLERS[handler_name]["format"]]["formatter"])
            self.FILE_HANDLERS[handler_name]["handler"] = file_handler

        for handler_name  in self.STREAM_HANDLERS:
            stream_handler = logging.StreamHandler(self.STREAM_HANDLERS[handler_name]["fileName"])
            stream_handler.setFormatter(self.FORMATTERS[self.STREAM_HANDLERS[handler_name]["format"]]["formatter"])
            self.STREAM_HANDLERS[handler_name]["handler"] = stream_handler

        for log_name in self.LOG_NAMES:
            logger = logging.getLogger(log_name)

            for handler_name in self.LOG_NAMES[log_name]["handlers"]:
                try:
                    logger.addHandler(self.FILE_HANDLERS[handler_name]["handler"])
                except:
                    logger.addHandler(self.STREAM_HANDLERS[handler_name]["handler"])
                else:
                    pass

            logger.setLevel(self.LOG_NAMES[log_name]["level"])
            self.LOG_NAMES[log_name]["logger"] = logger

    def getLogger(self,log_name):
        return self.LOG_NAMES[log_name]["logger"]
                

log = LogBuilder()
时间: 2024-08-25 13:54:24

python 日志模块(不使用配置文件)的相关文章

python日志模块-logging

日志模块 logging logging模块主要可以根据自定义日志信息,在程序运行的时候将日志打印在终端及记录日志到文件中.在这先了解一下logging支持的日志五个级别 debug() 调试级别,一般用于记录程序运行的详细信息 info() 事件级别,一般用于记录程序的运行过程 warnning() 警告级别,,一般用于记录程序出现潜在错误的情形 error() 错误级别,一般用于记录程序出现错误,但不影响整体运行 critical 严重错误级别 , 出现该错误已经影响到整体运行 简单用法,将

Python日志模块Logger

日志模块的用法 json部分 先开一段测试代码:注意  str可以直接处理字典   eval可以直接将字符串转成字典的形式 dic={'key1':'value1','key2':'value2'} data=str(dic)#字典直接转成字符串 print(type(data),data) ## with open('db.txt','w',encoding='utf-8') as f:# f.write(str(dic))# with open('db.txt','r',encoding='

python日志模块logging

1. 基础用法 python提供了一个标准的日志接口,就是logging模块.日志级别有DEBUG.INFO.WARNING.ERROR.CRITICAL五种(级别依次升高),分别对应的函数为debug().info().warning().error().critical(). >>> import logging >>> logging.debug("ni hao") >>> logging.info("ni hao2

python日志模块的封装

背景: 要日志输出到文件 要每天记录一个日志文件. 1)封装model_logger.py #!/usr/bin/env  # coding:utf-8  import logging  import logging.handlers class Logger(logging.Logger):     def __init__(self, filename=None):         super(Logger, self).__init__(self)         # 日志文件名     

Python日志模块

做自动化的时候,我们需要给框架配上日志,出错的时候方便我们查看. 例子: import logging from Agin_Project.unittest_again.common.file_path import FilePath class My_log: def conf_log(self,level,msg): log = logging.getLogger("test_log") #创建一个日志收集器 log.setLevel(level) #设置日志的级别 # 日志的输出

python 常用模块之ConfigParser

在程序中使用配置文件来灵活的配置一些参数是一件很常见的事情,配置文件的解析并不复杂,在Python里更是如此,在官方发布的库中就包含有做这件事情的库,那就是ConfigParser, Python ConfigParser模块解析的配置文件的格式比较象ini的配置文件格式 下面用实例说明如下: 配置文件db.conf [db] db_host=10.1.10.15 db_port=3306 db_user=root db_pass=59222999 连接数据程序如下: #!/usr/bin/en

Python ConfigParser模块常用方法示例

 在程序中使用配置文件来灵活的配置一些参数是一件很常见的事情,配置文件的解析并不复杂,在Python里更是如此,在官方发布的库中就包含有做这件事情的库,那就是ConfigParser,这里简单的做一些介绍.      Python ConfigParser模块解析的配置文件的格式比较象ini的配置文件格式,就是文件中由多个section构成,每个section下又有多个配置项,比如:      [db]     db_host=192.168.1.1    db_port=3306    db_

python ConfigParser模块 配置文件解析

ConfigParser模块主要是用来解析配置文件的模块,像mysql,或者win下面的ini文件等等 下面我们来解析mysql的配置文件my.cnf my.cnf配置文件内容 [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic

python 自动化之路 logging日志模块

logging 日志模块 http://python.usyiyi.cn/python_278/library/logging.html 中文官方http://blog.csdn.net/zyz511919766/article/details/25136485 清晰明了,入门必备http://my.oschina.net/leejun2005/blog/126713 继承讲的很棒http://my.oschina.net/u/126495/blog/464892 实例分析 一:概述 在实际项目