Skip to main content

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")

Metadata

Release files for NsparkleLog 1.1.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for NsparkleLog 1.1.8
File Size Uploaded Provenance Actions
nsparklelog-1.1.8.tar.gz 16.0 kB Without provenance Details for nsparklelog-1.1.8.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for NsparkleLog 1.1.8
File Interpreter ABI Platform Actions
NsparkleLog-1.1.8-py3-none-any.whl Python 3 none any Details for NsparkleLog-1.1.8-py3-none-any.whl

Total release size: 37.4 kB

Release files / nsparklelog-1.1.8.tar.gz

Download URL nsparklelog-1.1.8.tar.gz
Size 16.0 kB
Tags Source
SHA-256 checksum
How to use checksums
beab0ed2d5ed74b54f666ca059f6cfe35f7c6ba8b47fe1253b2e3f6904549c86
BLAKE2b-256 checksum
How to use checksums
7f139d3734b295b0f85bad3eec6bf8f0e3cae3c40481e3759f73ddd108a8c617
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.12.4

Release files / NsparkleLog-1.1.8-py3-none-any.whl

Download URL NsparkleLog-1.1.8-py3-none-any.whl
Size 21.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cd1df00f72de88200777668ea5d975c65d86999b6146a73d1fa8fe817222de2e
BLAKE2b-256 checksum
How to use checksums
f6952575e944c65b560f4843d4140ac5d427fdfe216b8d8a8dfd074c487c977d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.12.4

Security for NsparkleLog 1.1.8

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page