Skip to main content

A useful logging library for Python

Project description

NsparkleLog日志库

Sparkle!

描述

NsparkleLog 是一个高性能的日志库,设计之初就注重性能和多线程支持。与其他日志库相比,NsparkleLog 在处理大量日志条目时表现出色。

性能对比

我们对比了 NsparkleLog 和 Loguru 的性能,结果显示:

  • NsparkleLog:
    • 总耗时:2.77 秒
    • 平均每条日志耗时:0.000277 秒
  • Loguru:
    • 总耗时:4.06 秒
    • 平均每条日志耗时:0.000406 秒

这意味着 NsparkleLog 的性能比 Loguru 快约 36%。

主要特点

  • 多线程支持:使用队列和线程高效处理并发日志记录
  • 自定义锁机制:确保线程安全的同时最大化性能
  • 从底层实现:避免对第三方库的依赖,进一步优化性能

安装

pip install NsparkleLog

测试质疑

  • 如果您对测试结果感到质疑,可以自己修改下列测试脚本
from NsparkleLog import logger as NsparkleLogger
from loguru import logger as LoguruLogger
import time

# 测试参数
num_messages = 10000
test_message = "This is a test log message."

# 测试 NsparkleLog
nsparkle_times = []
for i in range(num_messages):
    start_time = time.time()
    NsparkleLogger.info(test_message)
    end_time = time.time()
    nsparkle_times.append(end_time - start_time)
nsparkle_duration = sum(nsparkle_times)
nsparkle_avg_time = nsparkle_duration / num_messages

# 测试 Loguru
loguru_times = []
for i in range(num_messages):
    start_time = time.time()
    LoguruLogger.info(test_message)
    end_time = time.time()
    loguru_times.append(end_time - start_time)
loguru_duration = sum(loguru_times)
loguru_avg_time = loguru_duration / num_messages

# 输出结果
print(f"NsparkleLog total duration: {nsparkle_duration:.2f} seconds")
print(f"NsparkleLog average time per message: {nsparkle_avg_time:.6f} seconds")

print(f"Loguru total duration: {loguru_duration:.2f} seconds")
print(f"Loguru average time per message: {loguru_avg_time:.6f} seconds")

下载总计

总下载量:

每月下载量:

每周下载量:

快速开始

暂时没有

[2024/7/7 1:21]

更新了可以自定义渲染日志字段消息的功能,美化显示

  • 用法
from NsparkleLog import LogManager , Levels , StreamHandler , Formatter


logBodyColor = {
    "localtime": "cyan",
    "ProcessName": "green",
    "threadName": "yellow",
    "name": "blue",
    "funcName": "magenta",
    "filename": "cyan",
    "lineno": "cyan",
    "msecs": "cyan",
}

consoleHanlder = StreamHandler()
console_fmt = Formatter(colorMode=True)
console_fmt.configuateColor(logBodyColor,True)
consoleHanlder.setFormatter(console_fmt)

LogManager.config(
    handlers=[consoleHanlder],
    level=Levels.TRACE, # type: ignore
    colorMode=True
)

logger = LogManager.getLogger('test')

logger.info('test')

[2024/6/28 21:05]

修复颜色渲染bug

[2024/6/26 21:32]

更新了HTML标签字体渲染

  • 用法如下,这里用 cyan 作为示例
from NsparkleLog import logger

logger.trace("<cyan>Hello World</cyan>")
logger.debug("<cyan>Hello World</cyan>")
logger.info("<cyan>Hello World</cyan>")
logger.warning("<cyan>Hello World</cyan>")
logger.error("<cyan>Hello World</cyan>")
logger.fatal("<cyan>Hello World</cyan>")
  • 你也可以用 Color 类来查看所有自带的颜色
from NsparkleLog import Color

print(Color.GetAvaliableColor())
  • 当然了,也允许你动态的添加颜色
from NsparkleLog import Color
Color.regColor(50,"test_color")
  • 如果你有自定义的等级想渲染注册好的颜色或者使用原来的颜色,不要忘了映射噢~
from NsparkleLog import LevelColor , logger

LOGG = 25

logger.addNewLevel("LOGG",LOGG)

LevelColor.mapLevelToColor(LOGG,"cyan")

logger.log(LOGG,"hello world")

[2024/6/22 15:26]

更新了NsparkleLogHandler类用于转发logging日志消息到NsparkleLog日志库

  • 用法如下
from NsparkleLog import NsparkleLogHandler

import logging

logger = logging.getLogger("test")

handler = NsparkleLogHandler()
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)

logger.debug("debug")
logger.info("info")
logger.warning("warning")
logger.error("error")
logger.critical("critical")

[2024/6/21 17:26]

更新了一个config接口用于配置日志

  • 用法
from NsparkleLog import LogManager , Levels , StreamHandler

LogManager.config(
    handlers=[StreamHandler()],
    level=Levels.TRACE,
    colorMode=True,
)

logger = LogManager.GetLogger("test")

logger.trace("Hello, World!")
logger.debug("Hello, World!")
logger.info("Hello, World!")
logger.warning("Hello, World!")
logger.error("Hello, World!")
logger.fatal("Hello, World!")

[2024/6/5 22:14]

更新了类似loguru的catch装饰器

  • 现在可以用@logger.catch来捕获函数中的异常并打印堆栈
from NsparkleLog import logger

@logger.catch
def test():
    raise Exception("this is a test exception")

test()
output:

2024-06-05 22:13:03.793 | ERROR   | MainProcess.MainThread | main.wrapper | NsparkleLog\core\_logger.py:60 - 发生异常:
An Fatal Error has occurred: Exception: This is an exception
Traceback (most recent call last):
  at wrapper in (f:\python_play\NsparkleLog\NsparkleLog\core\_logger.py:58)
  at test in (f:\python_play\NsparkleLog\asynctest.py:12)

[2024/6/4 21:52]

更新trace方法

  • trace方法现在支持withStackTrace参数,如果为True,则包含堆栈跟踪,否则只记录信息
from NsparkleLog import logger

logger.trace("This is a trace message",withStackTrace=True)
output:

2024-06-04 21:50:44.840 | TRACE   | MainProcess.MainThread | main.<module> | asynctest.py:3 - This is a trace message
Stack Trace:
   at <module> in (f:\python_play\NsparkleLog\asynctest.py:3)

[2024/6/2 14:01]

更新了logger.exception接口

from NsparkleLog import logger
    try:
        raise Exception
    except Exception as e:
        logger.exception(e)

[2024/6/1 18:51]

完善多线程,多进程,异步的安全

[2024/5/30 21:33]

日志库不用再需要显示调用close方法来释放资源,主线程退出后会自动释放资源

更新了setLevel接口用于设置日志级别过滤

  • 同时修复了一个addNewLevel可能会覆盖自己日志库定义等级的bug
from NsparkleLog import logger
from NsparkleLog.core._level import Levels

logger.setLevel(Levels.INFO)

logger.trace("Trace message") # 过滤
logger.debug("Debug message") # 过滤
logger.info("Info message")
logger.warning("Warning message")
logger.error("Error message")
logger.fatal("fatal message")

添加了addNewLevel方法来提升灵活性

from NsparkleLog import logger

TEST = 25
logger.addNewLevel("test", TEST, 91, "bright_magenta")

logger.log(TEST, "test")

FileHandler用法

from NsparkleLog import logger
from NsparkleLog.core._handler import FileHandler
from NsparkleLog.core._formatter import Formatter

filehandler = FileHandler(filename="test.log", mode="a+")
fmts = Formatter() #懒得设置格式直接这样也行
filehandler.setFormatter(fmts)
logger.addHandler(filehandler)

logger.trace("Trace message")
logger.debug("Debug message")
logger.info("Info message")
logger.warning("Warning message")
logger.error("Error message")
logger.fatal("fatal message")

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nsparklelog-1.1.8.tar.gz (16.0 kB view details)

Uploaded Source

Built Distribution

NsparkleLog-1.1.8-py3-none-any.whl (21.4 kB view details)

Uploaded Python 3

File details

Details for the file nsparklelog-1.1.8.tar.gz.

File metadata

  • Download URL: nsparklelog-1.1.8.tar.gz
  • Upload date:
  • Size: 16.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for nsparklelog-1.1.8.tar.gz
Algorithm Hash digest
SHA256 beab0ed2d5ed74b54f666ca059f6cfe35f7c6ba8b47fe1253b2e3f6904549c86
MD5 3e127d62070d604a6de46e1c9fd8c81b
BLAKE2b-256 7f139d3734b295b0f85bad3eec6bf8f0e3cae3c40481e3759f73ddd108a8c617

See more details on using hashes here.

File details

Details for the file NsparkleLog-1.1.8-py3-none-any.whl.

File metadata

  • Download URL: NsparkleLog-1.1.8-py3-none-any.whl
  • Upload date:
  • Size: 21.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for NsparkleLog-1.1.8-py3-none-any.whl
Algorithm Hash digest
SHA256 cd1df00f72de88200777668ea5d975c65d86999b6146a73d1fa8fe817222de2e
MD5 5bb164e65f2991c0315138d6dfb09122
BLAKE2b-256 f6952575e944c65b560f4843d4140ac5d427fdfe216b8d8a8dfd074c487c977d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page