将不同级别的logging 日志信息写入不同文件

将不同级别的logging 日志信息写入不同文件

# -*- coding: utf-8 -*-
import os
import time
from logging.handlers import RotatingFileHandler
import logging

import inspect

dir = os.path.dirname(__file__)

handlers = {logging.NOTSET: os.path.join(dir, 'notset.log'),

            logging.DEBUG: os.path.join(dir, 'debug.log'),

            logging.INFO: os.path.join(dir, 'info.log'),

            logging.WARNING: os.path.join(dir, 'warning.log'),

            logging.ERROR: os.path.join(dir, 'error.log'),

            logging.CRITICAL: os.path.join(dir, 'critical.log'),
            }


def createHandlers():
    logLevels = handlers.keys()

    for level in logLevels:
        path = os.path.abspath(handlers[level])
        handlers[level] = RotatingFileHandler(path, maxBytes=10000, backupCount=2, encoding='utf-8')


# 加载模块时创建全局变量

createHandlers()


class TNLog(object):

    def printfNow(self):
        return time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())

    def __init__(self, level=logging.NOTSET):
        self.__loggers = {}

        logLevels = handlers.keys()

        for level in logLevels:
            logger = logging.getLogger(str(level))

            # 如果不指定level,获得的handler似乎是同一个handler?

            logger.addHandler(handlers[level])

            logger.setLevel(level)

            self.__loggers.update({level: logger})

    def getLogMessage(self, level, message):
        frame, filename, lineNo, functionName, code, unknowField = inspect.stack()[2]

        '''日志格式:[时间] [类型] [记录代码] 信息'''

        return "[%s] [%s] [%s - %s - %s] %s" % (self.printfNow(), level, filename, lineNo, functionName, message)

    def info(self, message):
        message = self.getLogMessage("info", message)

        self.__loggers[logging.INFO].info(message)

    def error(self, message):
        message = self.getLogMessage("error", message)

        self.__loggers[logging.ERROR].error(message)

    def warning(self, message):
        message = self.getLogMessage("warning", message)

        self.__loggers[logging.WARNING].warning(message)

    def debug(self, message):
        message = self.getLogMessage("debug", message)

        self.__loggers[logging.DEBUG].debug(message)

    def critical(self, message):
        message = self.getLogMessage("critical", message)

        self.__loggers[logging.CRITICAL].critical(message)


if __name__ == "__main__":
    logger = TNLog()

    logger.debug("debug")
    logger.info("info")
    logger.warning("warning")
    logger.error("error")
    logger.critical("critical")

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏乐沙弥的世界

MySQL "Bind on TCP/IP port: Address already in use"

   最近在已部署MySQL Enterprise Monitor的服务器上新增了MySQL实例,导致MySQL Enterprise Monitor异常宕机...

1131
来自专栏代码拾遗

Spring Boot 2.0 教程 - 日志详解

Spring Boot 内部使用commons logging 作为日志输出工具,同时也可以配置其他的工具例如,Java Logging,Log4j2,log...

1674
来自专栏技术博文

ip地址查询

<?php Class IPQuery{ private static $_requestURL = 'http://ip.taobao.com/ser...

30711
来自专栏DHUtoBUAA

C#实现软件开机自启动原理与代码

1、软件自启动原理     软件自启动的原理要从Windows的注册表聊起,在Windows操作系统下,主要有2个文件夹和8个注册表键项控制程序的自启动,这部分...

4159
来自专栏用户2442861的专栏

[置顶] Python logging模块详解

WARNING:root:warning message ERROR:root:error message CRITICAL:root:critical ...

942
来自专栏DeveWork

WordPress 的几个高级调试( Debug)技巧

好久好久之前翻译过一篇《WordPress 中的 Debug 模式(调试模式)》,现在作为补充,再给出几个WordPress 的高级调试( Debug)技巧。建...

2245
来自专栏Ryan Miao

centos-5.5安装vmvare tools

centos-5.5安装vmvare tools 虚拟机管理,安装tools 找到VMwareTools压缩包                         ...

3148
来自专栏晓晨的专栏

Visual Studio 2017 设置透明背景图

给大家分享一下,如何为VS2017设置透明背景图。下面是一张设置前和设置后的图片。

1653
来自专栏JAVA后端开发

activiti集成spring boot的一个怪问题

最近想集成activti到spring boot中,上网找了一下例子,发现很简单,就开干了!

1364
来自专栏一个会写诗的程序员的博客

第11章 Spring Boot应用监控第11章 Spring Boot应用监控小结

在实际的生产系统中,我们怎样知道我们的应用运行良好呢?我们往往需要对系统实际运行的情况(各种cpu,io,disk,db,业务功能等指标)进行监控运维。这需要耗...

2843

扫码关注云+社区

领取腾讯云代金券