python web(bottle框架)知行合一之-简单知识付费平台-”全栈“实践(19)---应用多日志文件记录

python web(bottle框架)知行合一之-简单知识付费平台-”全栈“实践(19)---应用多日志文件记录

PS:笔记只是为了更好表达我怎么语言表述,有些时候可能难免废话一推!
因知识有限, 如有错误, 欢迎指正!

背景

应用的日志的必要性是必不可缺的,当应用出现什么错误信息,或找对应的请求日志的时候,我们都是需要核对的,所以相关运维角度来说,日志还是很有必要的。

定义日志的错误维度需求

  • 区分开错误的日志 和请求的日志 或 警告日志

logger_helper.py

#!/usr/bin/evn python
# coding=utf-8
# + + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + +
#        ┏┓   ┏┓+ +
#    ┏┛┻━━━┛┻┓ + +
#    ┃       ┃  
#    ┃   ━   ┃ ++ + + +
#    ████━████ ┃+
#    ┃       ┃ +
#    ┃   ┻   ┃
#    ┃       ┃ + +
#    ┗━┓   ┏━┛
#      ┃   ┃           
#      ┃   ┃ + + + +
#      ┃   ┃    Codes are far away from bugs with the animal protecting   
#      ┃   ┃ +     神兽保佑,代码无bug  
#      ┃   ┃
#      ┃   ┃  +         
#      ┃    ┗━━━┓ + +
#      ┃        ┣┓
#      ┃        ┏┛
#      ┗┓┓┏━┳┓┏┛ + + + +
#       ┃┫┫ ┃┫┫
#       ┗┻┛ ┗┻┛+ + + +
# + + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + +"""
"""
Author = zyx
@Create_Time: 2018/4/29 15:49
@version: v1.0.0
@Contact: 308711822@qq.com
@File: logger_helper.py
@文件功能描述:
"""''

import logging, logging.handlers
import sys
import os


class Logger:

    def __init__(self, logName, log_dir, _levels_tag='INFO', backupCount=10):
        self.logName = logName
        self.log_dir = log_dir
        self._levels_tag = _levels_tag

        # 如果不存在log文件夹, 则再当前脚本目录下创建log文件夹存放日志文件-
        if not os.path.exists('log'): os.mkdir('log')
        # 定义日志目录
        self.log_dir = os.path.join(log_dir, 'log')

        self._logfmt = '%Y-%m-%d %H:%M:%S'
        self._logger = logging.getLogger(self.logName)
        self.logFile = os.path.join(self.log_dir, '{0}.log'.format(self.logName))
        handler = logging.handlers.TimedRotatingFileHandler(filename=self.logFile,
                                                            backupCount=backupCount,
                                                            when="midnight")
        handler.suffix = "%Y%m%d"
        formatter = logging.Formatter(
            '[ %(levelname)s ] %(asctime)s %(filename)s:%(threadName)s:%(lineno)d %(message)s', datefmt=self._logfmt)
        handler.setFormatter(formatter)
        self._logger.addHandler(handler)
        # 日志等级
        self._levels = {
            "DEBUG": logging.DEBUG,
            "INFO": logging.INFO,
            "WARNING": logging.WARNING,
            "ERROR": logging.ERROR,
            "CRITICAL": logging.CRITICAL
        }
        self._logger.setLevel(self._levels.get(self._levels_tag))

    @property
    def getLogger(self):
        return self._logger

logging_helper.py

#!/usr/bin/evn python
# coding=utf-8
# + + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + +
#        ┏┓   ┏┓+ +
#    ┏┛┻━━━┛┻┓ + +
#    ┃       ┃  
#    ┃   ━   ┃ ++ + + +
#    ████━████ ┃+
#    ┃       ┃ +
#    ┃   ┻   ┃
#    ┃       ┃ + +
#    ┗━┓   ┏━┛
#      ┃   ┃           
#      ┃   ┃ + + + +
#      ┃   ┃    Codes are far away from bugs with the animal protecting   
#      ┃   ┃ +     神兽保佑,代码无bug  
#      ┃   ┃
#      ┃   ┃  +         
#      ┃    ┗━━━┓ + +
#      ┃        ┣┓
#      ┃        ┏┛
#      ┗┓┓┏━┳┓┏┛ + + + +
#       ┃┫┫ ┃┫┫
#       ┗┻┛ ┗┻┛+ + + +
# + + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + +"""
"""
Author = zyx
@Create_Time: 2018/4/28 16:57
@version: v1.0.0
@Contact: 308711822@qq.com
@File: logging_helper.py
@文件功能描述:
有时候会报错,是因为有些日志文件生成的所属的权限有问题,删除了对应的文件之后就可以了!!!比较奇怪
PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问
"""
import logging
import os
import traceback
from basic.utils import except_helper


def init(pro_path=''):
    # 如果不存在log文件夹, 则再当前脚本目录下创建log文件夹存放日志文件-
    if not os.path.exists('log'):
        os.mkdir('log')
    # 定义日志目录
    log_path = os.path.join(pro_path, 'log')
    # print('当前日志路径------', log_path)

    # 定义日志输出格式-输出是信息等级的
    logging.basicConfig(level=logging.INFO,
                        format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                        filename="%s/info.log" % log_path,
                        filemode='a')


from basic.utils.logger_helper import Logger

# 系统的日志对象
syslog = None


def sys_log_init(logName, log_dir):
    global syslog
    if not syslog:
        syslog = Logger(logName, log_dir).getLogger
    # reqlog = logger2.Logger("req",pro_path).getLogger


def sys_info_write(message):
    syslog.info(message)


def sys_write_error(content='', is_send_mail=True):
    """记录错误日志信息"""
    if traceback:
        content = content + '\n' + traceback.format_exc() + '\n'
    # 获取程序当前运行的堆栈信息
    detailtrace = except_helper.detailtrace()
    content = content + '程序调用堆栈的日志:' + detailtrace + '\n'
    syslog.error(content)


# =============================================
# 请求的日志对象
reqlog = None


def req_log_init(logName, log_dir):
    global reqlog
    if not reqlog:
        reqlog = Logger(logName, log_dir).getLogger
    # reqlog = logger2.Logger("req",pro_path).getLogger


def req_info_write(message):
    reqlog.info(message)


# 请求的日志对象
error_log = None


def error_log_init(logName, log_dir):
    global error_log
    if not error_log:
        error_log = Logger(logName, log_dir).getLogger
    # reqlog = logger2.Logger("req",pro_path).getLogger


def error_log_write(content='', is_send_mail=True):
    """记录错误日志信息"""
    if traceback:
        content = content + '\n' + traceback.format_exc() + '\n'
    # 获取程序当前运行的堆栈信息
    detailtrace = except_helper.detailtrace()
    content = content + '程序调用堆栈的日志:' + detailtrace + '\n'
    error_log.error(content)

# syslog.info("sys hello info")
# syslog.debug("sys hello debug")
# syslog.error("sys hello error")
# syslog.warning("sys hello warning")
#
# reqlog.info("req hello info")
# reqlog.debug("req hello debug")
# reqlog.error("req hello error")
# reqlog.warning("req hello warning")

初始化及调用

image.png

image.png
image.png
image.png

可能遇到问题:
1.PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问
解决:
删除文件重新生成新的文件!

结束

以上笔记纯属个人学习实践总结,有兴趣的同学可以加群一起学习讨论QQ:30871182

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,794评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,050评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,587评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,861评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,901评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,898评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,832评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,617评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,077评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,349评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,483评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,199评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,824评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,442评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,632评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,474评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,393评论 2 352