logging模块

# logging模块
    # 日志模块


# 日志
    # 日志用来记录用户行为的,有没有错都要记录下来
    # 或者记录代码的执行过程的时候,咱们须要记录下来
    # 排错的时候须要打印不少细节来帮助咱们排错时,咱们须要记录下来
    # 严重的错误应该记录下来



# 在logging模块中有5个级别, 默认只输出info以上的级别不包括info级别
# import logging
# logging.debug('debug message')  # 低级别   排错信息
# logging.info('info message')    # 正常的信息
# logging.warning('warning message')  # 警告嘻嘻
# logging.error('error message')  # 错误信息
# logging.critical('critical message')    # 高级别   # 严重错误信息


# 能够经过配置的方式使logging日志输出的信息更好看
    # 两种配置日志的方式
        # basicconfig 用法简单,能作的事情相对少
            # 缺点
                # 记录到日志文件中时,解决不了中文的乱码问题
                # 不能同时往文件和屏幕上输出
        # 配置log对象  用户比较复杂,能作的事情相对多

# 配置日志logging, level=loggin.DEBUG,配置debug级别以上的信息都输出。 NOTSET = 0为最低
    # format,格式化,asctime 是时间,对应datefmt。 filename是文件名字,对应filename。lineo是多少行。levelname是等级。message是信息内容
#
# import logging
# print('%(key)s' % {'key' : 'value'})    # value
# logging.basicConfig(level = logging.DEBUG,
#                     format = '%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
#                     datefmt = '%a, %d %b %Y %H:%M:%S',
#                     filename = 'test.log',
#                     filemode = 'a')
#
# logging.debug('debug message')  # 低级别   排错信息
# logging.info('info message')    # 正常的信息
# logging.warning('warning message')  # 警告嘻嘻
# logging.error('error message')  # 错误信息
# logging.critical('critical message')    # 高级别,基于操做系统级别的信息了   # 严重错误信息
#
# # 例,输入值错误,异常处理后,将错误输出到日志中
# try:
#     int(input('num >>>'))
# except ValueError:
#     logging.error('input ValueError')

# basicConfig缺点
    # 记录到日志文件中时,解决不了中文的乱码问题
    # 不能同时往文件和屏幕上输出
    # 因此通常不用logging中的basicConfig来记录日志


# 此种日志为灵活,充分解耦,比较经常使用
import logging
logger = logging.getLogger()    # 建立一个logger对象

# 建立一个handler,用于写入日志文件
fh = logging.FileHandler('test2.log', encoding='utf-8') # 建立一个文件描述符

# 再建立一个handler,用于输出到控制台
ch = logging.StreamHandler()    # 在建立一个控制台的文件秒速福
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s[line:%(lineno)d] -%(message)s')   # 设置输出格式化的格式

#formatter = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
 #                   datefmt = '%a, %d %b %Y %H:%M:%S')
fh.setLevel(logging.DEBUG)  # 设置输出等级

# 文件操做符和格式关联
fh.setFormatter(formatter)  # 设置日志文件(文件描述符)为该格式输出
ch.setFormatter(formatter)  # 设置控制台(文件描述符)为该格式输出

# logger对象和文件操做符关联绑定
logger.addHandler(fh)   # logger对象能够添加多个fh和ch对象   将日志操做符绑定到logger中
logger.addHandler(ch)   #   将控制台操做符绑定到logger中

logger.debug('logger debug message')
logger.info('logger info message')
logger.warning('logger warning message')
logger.error('logger error message')
logger.critical('logger critical message')


# 例,输入值错误,异常处理后,将错误输出到日志中
try:
    int(input('num >>>'))
except ValueError:
    logger.error('input ValueError')






# zabbix 比较好的监控系统

 

logging 类spa

class Logger(object):
    level_relations = {
        'debug':logging.DEBUG,
        'info':logging.INFO,
        'warning':logging.WARNING,
        'error':logging.ERROR,
        'crit':logging.CRITICAL
    }#日志级别关系映射

    def __init__(self, filename, level='info', when='D', backCount=3, fmt='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'):
        self.logger = logging.getLogger(filename)
        format_str = logging.Formatter(fmt)#设置日志格式
        self.logger.setLevel(self.level_relations.get(level))#设置日志级别
        sh = logging.StreamHandler()#往屏幕上输出
        sh.setFormatter(format_str) #设置屏幕上显示的格式
        th = handlers.TimedRotatingFileHandler(filename=filename,when=when,backupCount=backCount,encoding='utf-8')#往文件里写入#指定间隔时间自动生成文件的处理器
        #实例化TimedRotatingFileHandler
        #interval是时间间隔,backupCount是备份文件的个数,若是超过这个个数,就会自动删除,when是间隔的时间单位,单位有如下几种:
        # S 秒
        # M 分
        # H 小时、
        # D 天、
        # W 每星期(interval==0时表明星期一)
        # midnight 天天凌晨
        th.setFormatter(format_str)#设置文件里写入的格式
        self.logger.addHandler(sh) #把对象加到logger里
        self.logger.addHandler(th)


logfilename = 'NBT100_' + time.strftime('%Y-%m-%d') + '.log'
log = Logger(logfilename, level='debug')
log.logger.info('[%s]收到沣泰FTM13不带阀命令1:' % time.strftime('%Y-%m-%d %H:%M:%S'))
相关文章
相关标签/搜索