日志配置

日志的配置文件

import os
PROJECT_NAME = "monitor_demo"  	# 项目名称,以此作为日志文件夹名
TOOLS_PROJECT_NAME = "monitor_tools"		# 项目中的常用脚本,需要日志记录

# NOTE: default level is DEBUG
LOG_LEVEL = os.getenv('LOG_LEVEL', "DEBUG")		# 日志级别,低于此级别不会别记录

# NOTE: default handler is 'console,file'
LOG_HANDLERS = os.getenv('LOG_HANDLERS', "console,file")   # console为控制台打印,file为写入文件

BACKUP_COUNT = int(os.getenv("BACKUP_COUNT", "500"))	# 每个文件的存储日志数量

# get interval from env settings, default use 1
LOG_INTERVAL = int(os.getenv("LOG_INTERVAL", "1"))

# get when from env settings, default use midnight
# Value	     | Type of interval
# 'S'	     | Seconds
# 'M'	     | Minutes
# 'H'	     | Hours
# 'D'	     | Days
# 'W0'-'W6'  | Weekday (0=Monday)
# 'midnight' | Roll over at midnight
LOG_WHEN = os.getenv("LOG_WHEN", "midnight")		# 日志的记录时间,到午夜重新写一个新的日志

LOG_NAME = os.getenv("LOG_NAME", "tornado")			# 日志文件名称

TOOLS_SCHED_NAME = "sched_tasks"			# tools的文件名称
TOOLS_ANA_MONGO_NAME = "analysis_mongo"   # 另一个tools日志文件名称

# Build paths inside the project like this: os.path.join(BASE_DIR, ...), get /*/apps
# BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
BASE_DIR = "/opt/logs"			
PROJECT_LOG_DIR = BASE_DIR + "/" + PROJECT_NAME		# 日志的路径
# tools base_dir
TOOLS_PROJECT_LOG_DIR = PROJECT_LOG_DIR + "/" + TOOLS_PROJECT_NAME		# 脚本日志路径

# if logs dir not exists, then create path
if not os.path.exists(PROJECT_LOG_DIR):			# 若没有该文件夹,则创建
    os.makedirs(PROJECT_LOG_DIR)

if not os.path.exists(TOOLS_PROJECT_LOG_DIR):		# 同上
    os.makedirs(TOOLS_PROJECT_LOG_DIR)


file_name = "".join([PROJECT_LOG_DIR, "/", LOG_NAME, '.log']) 	# 生成日志的绝对路径

# tools log
sched_tasks = "".join([TOOLS_PROJECT_LOG_DIR, "/", TOOLS_SCHED_NAME, ".log"])	# 同上
analysis_mongo = "".join([TOOLS_PROJECT_LOG_DIR, "/", TOOLS_ANA_MONGO_NAME, ".log"])

# log config
LOG_CONF = {
    'version': 1,				
    'disable_existing_loggers': False,
    'root': {
        'level': 'WARNING',
        'handlers': ['file']
    },
    'formatters': {				# 日志的格式
        'verbose': {			# 复杂格式
            'format': '{asctime} {levelname} {filename}:{lineno} '
                      'pid/tid: {process:d}/{thread:d} message: {message}',
            'style': '{',
        },
        'simple': {				# 简单格式
            'format': '{levelname} {message}',
            'style': '{',
        },
    },
    'handlers': {			# 不同的配置,可对应不同的写日志的对象
        'console': {
            'level': LOG_LEVEL,			
            'formatter': 'verbose',
            'class': 'logging.StreamHandler',
        },
        'file': {
            'level': LOG_LEVEL,		# 级别
            'class': 'logging.handlers.TimedRotatingFileHandler',		# 
            'when': LOG_WHEN,			# 什么时候重写新的日志文件
            'interval': LOG_INTERVAL,		# 日志间隔
            'filename': file_name,			# 日志文件名称
            'formatter': 'verbose',			# 日志输出格式
            'backupCount': BACKUP_COUNT,		# 单个文件日志数量
        },
        'sched_tasks': {
            'level': LOG_LEVEL,
            'class': 'logging.handlers.TimedRotatingFileHandler',
            'when': LOG_WHEN,
            'interval': LOG_INTERVAL,
            'filename': sched_tasks,
            'formatter': 'verbose',
            'backupCount': BACKUP_COUNT,
        },
        'analysis_mongo': {
            'level': LOG_LEVEL,
            'class': 'logging.handlers.TimedRotatingFileHandler',
            'when': LOG_WHEN,
            'interval': LOG_INTERVAL,
            'filename': analysis_mongo,
            'formatter': 'verbose',
            'backupCount': BACKUP_COUNT,
        },
    },
    'loggers': {			# 写日志的对象(根据传入的参数调用)
        'tornado': {
            'handlers': LOG_HANDLERS.split(","),
            'level': LOG_LEVEL,
            'propagate': True
        },
        'sched': {
            'handlers': ['sched_tasks'],
            'level': LOG_LEVEL,
            'propagate': True
        },
        'analysis': {
            'handlers': ['analysis_mongo'],
            'level': LOG_LEVEL,
            'propagate': True
        },

    }
}

日志使用

import logging.config
logging.config.dictConfig(LOG_CONF)
logger = logging.getLogger('analysis')			# 传入的参数必须为配置文件的loggers里定义的

LOG等级

DEBUG	logging.debug()	最低级别,追踪问题时使用
INFO	logging.info()	记录程序中一般事件的信息,或确认一切工作正常
WARNING	logging.warning()	记录信息,用于警告
ERROR	logging.error()	用于记录程序报错信息
CRITICAL	logging.critical()	最高级别,记录可能导致程序崩溃的错误
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值