跳转至

Python控制台输出重定向到日志并控制日志大小

python控制台输出,可以输出print和一些error信息。那么启动python的时候可以重定向控制台的输出信息到日志文件中

mkdir -p /app/example/log
touch /app/example/example.py

编辑python文件,设置日志文件及最大大小和保存个数、及日志样式

import os
import time
import traceback
import schedule
import logging
import colorlog
import sys

# ————————日志————————
logfilename = "/app/example/log/example.log"
log_colors_config = {
    'DEBUG': 'white',
    'INFO': 'green',
    'WARNING': 'yellow',
    'ERROR': 'red',
    'CRITICAL': 'bold_red',
}
logger = logging.getLogger(__name__)
logger.setLevel(level=logging.DEBUG)
# 设置日志文件大小
handler = logging.handlers.RotatingFileHandler(logfilename, encoding='utf-8',
                                               maxBytes=100 * 1024 * 1024,
                                               backupCount=10)

# 输出到文件的日志级别
handler.setLevel(logging.INFO)
# 日志样式
formatter = logging.Formatter(
    '%(asctime)s-%(name)s-%(filename)s-[line:%(lineno)d]-%(levelname)s-[日志信息]: %(message)s')
# 控制台日志样式
formatter_color = colorlog.ColoredFormatter(
    '%(log_color)s%(asctime)s-%(name)s-%(filename)s-[line:%(lineno)d]-%(levelname)s-[日志信息]: %(message)s',
    log_colors=log_colors_config)

# 控制台的日志
console = logging.StreamHandler(stream=sys.stdout)
# 控制台的日志级别
console.setLevel(logging.DEBUG)
# 设置日志样式
handler.setFormatter(formatter)
# 设置控制台日志样式
console.setFormatter(formatter_color)
#添加输出
logger.addHandler(handler)
logger.addHandler(console)
# ————————日志————————



logger.info("cron start")
try:
    logger.info("dir:" + os.getcwd())
    while True:
        time.sleep(1)
        print("hello")

except Exception as e:
    logger.error(e)
    logger.error(traceback.print_exc())

到此,example.py中 logger.infologger.error 日志会输出到 日志文件 中 和 控制台 上,print 语句会输出到控制台上

用下面的方式启动,控制台的输出会都出现在 /app/example/log/example.log 文件中

一开始我以为logger.infologger.error 会在日志中出现两次,逻辑上,代码中指定了一遍控制台输出,通过命令指定了一遍控制台输出,后来发现并没有,只会在日志中出现一次。而且日志大小正常被切割

nohup python3  /app/example/example.py > /app/example/log/example.log 2>&1 &