log日志模块

log日志

工作日志分四个大类:

系统日志:记录服务器的一些重要信息:监控系统,cpu温度,网卡流量,重要的硬件的一些指标,运维人员经常使用的,运维人员,记录操作的一些指令.

网站日志: 访问异常,卡顿,网站一些板块,受欢迎程度,访问量,点击率.等等,蜘蛛爬取次数等等.

辅助开发日志: 开发人员在开发项目中,利用日志进行排错,排除一些避免不了的错误(记录),辅助开发.

记录用户信息日志: 用户的消费习惯,新闻偏好,等等.(数据库解决)

日志: 是谁使用的? 一般都是开发者使用的.

三个版本:

Low版(简易版).

标配版(标准版)

import logging
def log(lj):
    # 创建一个logging对象
    logger = logging.getLogger()

    # 创建一个文件对象
    fh = logging.FileHandler(lj, encoding='utf-8')#传参

    # 创建一个屏幕对象
    sh = logging.StreamHandler()

    # 配置显示格式
    # formatter1变量名
    formatter1 = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')
    formatter2 = logging.Formatter('%(asctime)s %(message)s')
    fh.setFormatter(formatter1)#绑定  屏幕文件
    sh.setFormatter(formatter2)  #绑定屏幕

    logger.addHandler(fh)#绑定文件
    logger.addHandler(sh)#绑定屏幕

    # 总开关
    logger.setLevel(10)

    fh.setLevel(10)#文件级别
    sh.setLevel(50)#屏幕级别

    logging.debug('调试模式')  # 10
    logging.info('正常模式')  # 20
    logging.warning('警告信息')  # 30
    logging.error('错误信息')  # 40
    # logging.critical('严重错误信息')  # 50
log(r'D:\s23\day19 包的初识 日志模块\day19\日志\标配版日志\aaa\zz.log')

旗舰版(项目中使用的,Django项目)

自定制(通过字典的方式)
轮转日志的功能
"""
logging配置
"""

import os
import logging.config

# 定义三种日志输出格式 开始
def load_my_logging_cfg(n):
    standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
                      '[%(levelname)s][%(message)s]'  # 其中name为getlogger指定的名字 复杂版

    simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'#标准版

    id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'#简易版

    # 定义日志输出格式 结束

    logfile_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))+"\log"  # log文件的目录**************************

    logfile_name = '创建课程'+'.log'  # log文件名************** 'all2.lg'

    # 如果不存在定义的日志目录就创建一个
    if not os.path.isdir(logfile_dir):
        os.mkdir(logfile_dir)

    # log文件的全路径 调最外层'handlers'里面
    logfile_path = os.path.join(logfile_dir, logfile_name)

    # log配置字典
    # LOGGING_DIC第一层的所有的键不能更改

    LOGGING_DIC = {
        'version': 1,  # 版本号
        'disable_existing_loggers': False,  # 固定写法
        'formatters': {
            'standard': {
                'format': standard_format##********绑定上面的3种格式之一对应下面字典 'formatter'
            },#标准的格式
            'simple': {
                'format': simple_format
            },#简单的格式
            'chaojiandan':{'format':id_simple_format},#超简单的格式绑定上面的3种格式之一对应下面字典 'formatter'
        },  # 配置格式 上面3个 选其中一个 上面调了 下面也调
        'filters': {},  # 固定空字典 过滤模式
        'handlers': {
            # 打印到终端的日志
            'console': {
                'level': 'ERROR',######调级别 5个级别  屏幕显示只要调这个 可以改
                'class': 'logging.StreamHandler',  # 打印到屏幕 固定的
                'formatter': 'simple' ##****调屏幕显示格式 可以改 对应'standard'里面的键  'standard' 'simple'
            },
            # 打印到文件的日志,收集info及以上的日志
            'default': {
                'level': 'DEBUG',######调级别5个级别   文件显示只要调这个 可以改
                'class': 'logging.handlers.RotatingFileHandler',  # 配置轮转 保存到文件 固定不变
                'formatter': 'standard',###****调文件显示格式 可以改 对应'standard'里面的键  'standard' 'simple'
                'filename': logfile_path,  # 日志文件 对应 log文件的全路径  要一一对应
                'maxBytes': 1024*1024*5,  # 日志大小 5M 以字节为单位
                'backupCount': 5,#轮转次数
                'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
            },
        },  # 配置 句柄 是文件写入还是屏幕显示
        'loggers': {
            # logging.getLogger(__name__)拿到的logger配置
            '': {
                'handlers': ['default', 'console'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
                'level': 'DEBUG',#总级别
                'propagate': True,  # 向上(更高level的logger)传递
            },
        },  # 固定写法
    }


# def load_my_logging_cfg(n):
    logging.config.dictConfig(LOGGING_DIC)  # 导入上面定义的logging配置 固定不变
    logger = logging.getLogger('ATM日志')  # 生成一个log实例
    logger.debug(n)  # 记录该文件的运行状态 比如存钱logger.info(n) 可以配置5个级别
#[2019-07-06 22:35:37,315][MainThread:11308][task_id:ATM][common.py:104][INFO][11111111]

# if __name__ == '__main__':
#     load_my_logging_cfg(555)
#     pass


# logging.debug('debug message')#10调试模式 括号里面是提示
# logging.info('info message')#20正常模式
# logging.warning('warning message')#30警告模式
# logging.error('error message')#40错误信息 ERROR
# logging.critical('critical message')#50严重错误信息
posted @ 2020-03-01 10:46  一起奥利给  阅读(430)  评论(0编辑  收藏  举报