python中添加log日志的三种输出方式的写法

摘要

  • log日志一般使用是很方便的,一般使用第二种即可。
  • 详细理解建议仔细阅读第三种写法。
  • log日志的主要作用有以下两点:
    1.错误排查与分析
    2.log日志分析,进行用户画像。

代码1:在控制台输出log日志

import logging

logging.basicConfig(level=logging.WARNING,
                    format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')

# 开始使用log功能
logging.info('这是 loggging info message')
logging.debug('这是 loggging debug message')
logging.warning('这是 loggging a warning message')
logging.error('这是 an loggging error message')
logging.critical('这是 loggging critical message')

代码2:在文件中写入log日志

import logging

logging.basicConfig(level=logging.WARNING,
                    filename='./log.txt',
                    filemode='w',
                    format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')
# use logging
logging.info('这是 loggging info message')
logging.debug('这是 loggging debug message')
logging.warning('这是 loggging a warning message')
logging.error('这是 an loggging error message')
logging.critical('这是 loggging critical message')

代码3:在控制台和文件中分别输出log日志

import logging

# 第一步,创建一个logger
logger = logging.getLogger()
logger.setLevel(logging.INFO)  # Log等级总开关  此时是INFO

# 第二步,创建一个handler,用于写入日志文件
logfile = './log.txt'
fh = logging.FileHandler(logfile, mode='a')  # open的打开模式这里可以进行参考
fh.setLevel(logging.DEBUG)  # 输出到file的log等级的开关

# 第三步,再创建一个handler,用于输出到控制台
ch = logging.StreamHandler()
ch.setLevel(logging.WARNING)   # 输出到console的log等级的开关

# 第四步,定义handler的输出格式(时间,文件,行数,错误级别,错误提示)
formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
fh.setFormatter(formatter)
ch.setFormatter(formatter)

# 第五步,将logger添加到handler里面
logger.addHandler(fh)
logger.addHandler(ch)

# 日志级别
logger.debug('这是 logger debug message')
logger.info('这是 logger info message')
logger.warning('这是 logger warning message')
logger.error('这是 logger error message')
logger.critical('这是 logger critical message')
#
# DEBUG:详细的信息,通常只出现在诊断问题上
# INFO:确认一切按预期运行
# WARNING(默认):一个迹象表明,一些意想不到的事情发生了,或表明一些问题在不久的将来(例如。磁盘空间低”)。这个软件还能按预期工作。
# ERROR:更严重的问题,软件没能执行一些功能
# CRITICAL:一个严重的错误,这表明程序本身可能无法继续运行

好的,以下是使用 Python 高级写法实现的日志上传功能。该实现采用了发布/订阅模,以确保在整个项目中高效地管理日志上传任务。 ```python import threading import time from collections import deque class Logger: def __init__(self, timer=60, count=100): """ 初始化日志类 :param timer: 每隔多少秒上传一次日志 :param count: 累积多少条日志后上传一次 """ self.timer = timer self.count = count self.log_queue = deque() self.lock = threading.Lock() self.stop_event = threading.Event() def log(self, message): """ 记录一条日志 :param message: 日志消息 """ with self.lock: self.log_queue.append(message) if len(self.log_queue) >= self.count: self.upload_logs() def upload_logs(self): """ 上传日志 """ with self.lock: logs_to_upload = list(self.log_queue) self.log_queue.clear() # 模拟日志上传操作 print(f"Uploading {len(logs_to_upload)} logs") for log in logs_to_upload: print(log) def start_timer(self): """ 开始定时器,定期上传日志 """ while not self.stop_event.is_set(): time.sleep(self.timer) if self.log_queue: self.upload_logs() def start(self): """ 启动日志记录和上传 """ timer_thread = threading.Thread(target=self.start_timer) timer_thread.daemon = True timer_thread.start() def stop(self): """ 停止日志记录和上传 """ self.stop_event.set() self.upload_logs() # 最后一次上传剩余日志 # 示例使用 if __name__ == "__main__": logger = Logger(timer=5, count=5) # 每5秒或累积5条日志上传一次 logger.start() # 模拟生成日志 for i in range(20): logger.log(f"Log message {i}") time.sleep(1) # 停止日志记录 logger.stop() ``` ### 代码说明 1. **Logger 类**: - `__init__`: 初始化日志类,设置定时器间隔 `timer` 和日志数量阈值 `count`。 - `log`: 记录一条日志,如果队列中的日志数量达到阈值 `count`,则调用 `upload_logs` 方法上传日志。 - `upload_logs`: 从队列中取出所有日志并上传。 - `start_timer`: 定时器线程,每隔 `timer` 秒检查一次日志队列,如果有日志则上传。 - `start`: 启动日志记录和上传,创建并启动定时器线程。 - `stop`: 停止日志记录和上传,设置停止事件并上传剩余日志。 2. **示例使用**: - 创建 `Logger` 实例,设置每5秒或累积5条日志上传一次。 - 启动日志记录和上传。 - 模拟生成20条日志,每条日志之间间隔1秒。 - 停止日志记录和上传。 这种实现方利用了多线程和锁机制,确保了日志记录和上传的高效性和安全性。希望这对你有所帮助!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值