PYTHON LOGGING模块
PYTHON的日志功能,一开始在python2.4上运行,各种报错,后来换成python2.7.9。
附上linux python升级过程:
1、下载python安装包---Python-2.7.9.tar.xz 2、下载完成后到下载目录下,解压 tar -xzvf Python-3.3.0.tgz 3、进入解压缩后的文件夹 cd Python-3.3.0 4、在编译前先在/usr/local建一个文件夹python3(作为python的安装路径,以免覆盖老的版本) mkdir /usr/local/python3 5、开始编译安装 ./configure --prefix=/usr/local/python3 make make install 6、此时没有覆盖老版本,再将原来/usr/bin/python链接改为别的名字 mv /usr/bin/python /usr/bin/python_old2 7、再建立新版本python的链接 ln -s /usr/local/python3/bin/python3/usr/bin/python 8、这个时候输入 python -V
# -*- coding=gbk -*- # filename:pythonglog.py __author__ = 'vincent' import logging import logging.config logging.config.fileConfig("pythonlog.conf")
# filename:pythonlog.conf # 定义logger模块,root是父类,必需存在的,其它的是自定义。 # logging.getLogger(NAME)便相当于向logging模块注册了一种日志打印 # name 中用 . 表示 log 的继承关系 [loggers] keys=root,main,console # 定义handler [handlers] keys=fileHandler,consoleHandler # 定义格式化输出 [formatters] keys=fmt #-------------------------------------------------- # 实现上面定义的logger模块,必需是[logger_xxxx]这样的形式 #-------------------------------------------------- # [logger_xxxx] logger_模块名称 # level 级别,级别有DEBUG、INFO、WARNING、ERROR、CRITICAL # handlers 处理类,可以有多个,用逗号分开 # qualname logger名称,应用程序通过 logging.getLogger获取。对于不能获取的名称,则记录到root模块。 # propagate 是否继承父类的log信息,0:否 1:是 [logger_root] level=INFO handlers=fileHandler [logger_main] level=ERROR handlers=fileHandler propagate=0 qualname=main [logger_console] level=INFO handlers=consoleHandler propagate=0 qualname=console #-------------------------------------------------- # handler #-------------------------------------------------- # [handler_xxxx] # class handler类名 # level 日志级别 # formatter,上面定义的formatter # args handler初始化函数参数 [handler_fileHandler] class=handlers.RotatingFileHandler level=INFO formatter=fmt args=('python.log', 'a') [handler_consoleHandler] class=StreamHandler level=INFO formatter=fmt args=(sys.stdout,) #-------------------------------------------------- # 日志格式 #-------------------------------------------------- # %(asctime)s 年-月-日 时-分-秒,毫秒 2013-04-26 20:10:43,745 # %(filename)s 文件名,不含目录 # %(pathname)s 目录名,完整路径 # %(funcName)s 函数名 # %(levelname)s 级别名 # %(lineno)d 行号 # %(module)s 模块名 # %(message)s 消息体 # %(name)s 日志模块名 # %(process)d 进程id # %(processName)s 进程名 # %(thread)d 线程id # %(threadName)s 线程名 [formatter_fmt] format=[%(asctime)s F=%(filename)s L=%(lineno)d] [%(message)s] datefmt=%Y/%m/%d %H:%M:%S class=logging.Formatter
模块测试:
__author__ = 'vincent' import os import sys import logging import pythonlog console=logging.getLogger("console") console.info("THIS IS LOGGER INFO!")
定义了两个日志句柄,一个main,输出日志信息到文件python.log,另一个console,输出日志信息到屏幕
心有猛虎,细嗅蔷薇
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构