让你迷糊的Log4python

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 在日志界,最著名的是Log4J(Java日志框架),很多开发语言都基于Log4j实现了自己的日志框架,如.net下的Log4net,PHP的Log4PHP(都是Apache软件基金会的Logging下的开源项目)。

在日志界,最著名的是Log4J(Java日志框架),很多开发语言都基于Log4j实现了自己的日志框架,如.net下的Log4net,PHP的Log4PHP(都是Apache软件基金会的Logging下的开源项目)。Python除了系统自带的logging模块外,也有基于Log4j的框架实现,名曰Log4Python(https://pypi.org/project/log4python/),但是要使用此库,按照官方的Example你或许会迷糊半天。
首先,虽然此框架2019年更新到了0.2.31版本,但还是仅支持Python2.x版本,对Python3.x版本还不支持。如果要在3版本下使用,你可能还需要做些修改才行。
其次,此框架还需要flumelogger的支持。所以需要一并安装。
第三,按照官方的Example,你应该是运行不成功的。官方的Example如下:

from log4p import log
TestLog = log(__name__)
TestLog.debug("Debug Log")
TestLog.info("Info Log")

按照官方说明,会输出如下信息:

2015-01-20 16:18:47,692 DEBUG [Thread-3] data.LogInsert (LogInsert.py:172) - Debug Log
2015-01-20 16:18:47,692 DEBUG [Thread-3] data.LogInsert (LogInsert.py:173) - Info Log

但其实你可能会发现提示你的是找不到log4p模块。
参照框架下的TestLog.py才发现,第一句导入就是错误的,正确的应该是:

from log4python.Log4python import log
TestLog = log(__name__)
TestLog.debug("Debug Log")
TestLog.info("Info Log")

真不知道软件的作者是怎么想的,太不负责任了。
即使这样,但你仍然无法输出日志,得到的消息是没有handlers.

No handlers could be found for logger "__main__"

再按照官方的文档使用配置文件log4p.py(官方的这个配置文件还有点小错误),我直接贴出我修改后的:

config = {
    'monitorInterval': 10,
    'loggers': {
        'LogThread': {
            'level': "DEBUG",
            'additivity': False,
            'AppenderRef': ['A1']
        },
        'root': {
            # 'level' : "CRITICAL",
            'level': "ERROR",
            'AppenderRef': ['output_root']
        },
        '__main__':{
            'level': "DEBUG",
            'additivity': False,
            'AppenderRef': ['console']
        }
    },

    'appenders': {
        'output_root': {
            'type': "file",
            'FileName': "root_error.log",
            'backup_count': 5,
            'file_size_limit': 1024 * 1024 * 20,
            'PatternLayout': "[level:%(levelname)s-file:%(filename)s-lineno:%(lineno)d] %(asctime)s %(message)s"
        },
        'A1': {
            'type': "file",
            'FileName': "A2.log",
            'PatternLayout': "[level:%(levelname)s-file:%(filename)s-lineno:%(lineno)d] %(asctime)s %(message)s"
        },
        'flumeTest': {
            'type': "FLUME",
            'host': "192.168.10.120",
            'port': 44444,
            'headers': {'application': 'Skyline.Analyzer'},
            'PatternLayout': "[PID:%(process)d-level:%(levelname)s-file:%(filename)s-lineno:%(lineno)d] %(asctime)s %(message)s"
        },
        'console': {
            'type': "console",
            'target': "console",
            #'PatternLayout': "[%(levelname)s] %(asctime)s %(message)s",
            'PatternLayout': "[PID:%(process)d-level:%(levelname)s-file:%(filename)s-lineno:%(lineno)d] %(asctime)s %(message)s"
        }
    }
}

这个配置文件倒是和Log4j的差不太多。
到这个时候日志基本上可以输出了。但控制台的输出也很莫名其妙,有时候还重复,有时第一条Debug会报找不到Handler,看截图:
2019_07_10_10_08_38
还是希望开源的作者能做好单元测试,既然提供了,还是提供一个更可靠的框架。我对Python也是入门者,如果功力深厚我就好好去研究研究给完善一下。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
存储 人工智能 芯片
多GPU训练大型模型:资源分配与优化技巧 | 英伟达将推出面向中国的改良芯片HGX H20、L20 PCIe、L2 PCIe
在人工智能领域,大型模型因其强大的预测能力和泛化性能而备受瞩目。然而,随着模型规模的不断扩大,计算资源和训练时间成为制约其发展的重大挑战。特别是在英伟达禁令之后,中国AI计算行业面临前所未有的困境。为了解决这个问题,英伟达将针对中国市场推出新的AI芯片,以应对美国出口限制。本文将探讨如何在多个GPU上训练大型模型,并分析英伟达禁令对中国AI计算行业的影响。
1761 0
|
存储 Linux Apache
抛弃开源!Docker镜像仓库Docker Hub或将「断供」
近日,Docker更新了一些服务条款,禁止被列入美国「实体名单」的国家、企业、个人使用Docker Hub相关服务,并且计划删除高达4.5PB的用户镜像数据,Docker会为开源世界的理想发声还是成为下一个VMware?
9965 0
抛弃开源!Docker镜像仓库Docker Hub或将「断供」
|
9月前
|
消息中间件 NoSQL Java
2024年高频Java面试题集锦(含答案),让你的面试之路畅通无阻!
或许这份面试题还不足以囊括所有 Java 问题,但有了它,我相信你一定不会“败”的很惨,因为有了它,足以应对目前市面上绝大部分的 Java 面试了,因为这篇文章不论是从深度还是广度上来讲,都已经囊括了非常多的知识点了。
|
5月前
|
自然语言处理 IDE 测试技术
通义灵码支持 DeepSeek-V3 和R1 满血版模型,免费用
通义灵码最全使用指南,一键收藏。
122891 25
通义灵码支持 DeepSeek-V3 和R1 满血版模型,免费用
【CCCC】L2-023 图着色问题 (25分),图的染色判定,遍历
【CCCC】L2-023 图着色问题 (25分),图的染色判定,遍历
195 0
|
弹性计算 对象存储
基于OSS搭建云上个人博客-3
基于OSS搭建云上个人博客-3
150 0
基于OSS搭建云上个人博客-3
|
关系型数据库 PostgreSQL 移动开发
PostgreSQL 9.6 聚合运算180倍性能提升如何做到? 聚合代码优化OP复用浅析
PostgreSQL 9.6 内核优化之 聚合代码优化OP复用浅析 作者 digoal 日期 2016-10-08 标签 PostgreSQL , 9.6 , 内核优化 , 聚合代码优化 , OP复用 背景 聚合操作指将分组的数据聚合为一个结果输出。 聚合通常用在统
5472 0
|
机器学习/深度学习 分布式计算 Hadoop
|
9月前
|
人工智能 安全 API
Unity优化——加速物理引擎1
Unity优化——加速物理引擎1
182 0

热门文章

最新文章