Skip to main content

现代化的Python日志库

Project description

ElegantLog

现代化的 Python 日志库,重点解决这几类问题:

  • 多进程场景下的文件日志
  • 按大小 / 按服务器本地时间跨午夜轮转
  • 父子 logger 重复输出
  • JSON 结构化日志
  • print() 增强与全局异常捕获
  • Web 框架中的日志恢复与稳定性

安装

pip install elegant-log

要求:

  • Python >= 3.12

文档

快速开始

最小示例

import elegantlog

logger = elegantlog.get_logger("myapp")
logger.info("应用已启动")
logger.warning("这是一条警告")
logger.error("这是一条错误")

输出到文件

logger = elegantlog.get_logger(
    name="myapp",
    file=True,
    log_dir="./logs",
    console=True,
)

logger.info("日志将写入 ./logs/myapp_{pid}.log")

说明:

  • 活动文件命名:myapp_{pid}.log
  • 每个进程独立文件,避免多进程锁竞争

启用日志轮转

rotation_by_date=False:只按大小轮转

logger = elegantlog.get_logger(
    name="myapp_size_only",
    file=True,
    log_dir="./logs",
    rotation_by_size=True,
    max_file_size=50 * 1024 * 1024,
    rotation_by_date=False,
    backup_count=7,
)

适用场景:

  • 只关心控制单个日志文件大小
  • 不需要按天切分日志

rotation_by_date=True:按服务器本地时间跨午夜轮转

logger = elegantlog.get_logger(
    name="myapp_daily",
    file=True,
    log_dir="./logs",
    rotation_by_size=True,
    max_file_size=50 * 1024 * 1024,
    rotation_by_date=True,
    backup_count=7,
)

归档文件命名示例:

  • myapp_{pid}_20240115_143025_0001.log

日期轮转说明:

  • rotation_by_date=True 时,按服务器本地时间在跨午夜时轮转
  • 迟到日志不会回写历史日期文件
  • 如果需要按事件发生日期归档,应交给外部日志收集或归档系统处理

性能相关配置

logger = elegantlog.get_logger(
    name="high_performance",
    file=True,
    batch_size=500,
    flush_interval=2.0,
    async_mode=True,
)

Print 增强

from elegantlog import enable_print_enhancement

enable_print_enhancement()
print("带时间戳和调用位置的输出")

异常捕获

from elegantlog import enable_exception_capture

logger = elegantlog.get_logger("myapp", file=True)
enable_exception_capture(logger)

JSON 日志

import elegantlog
from elegantlog import JsonFormatter

logger = elegantlog.get_logger("myapp", file=True)
formatter = JsonFormatter(
    static_fields={"service": "myapp", "environment": "production"}
)

for handler in logger.handlers:
    handler.setFormatter(formatter)

logger.info("用户登录", extra={"user_id": "user123", "ip": "192.168.1.1"})

更多内容:

常用 API

elegantlog.get_logger(name, **kwargs)
elegantlog.configure(config)
elegantlog.set_exclusive_handler(name, handler_type, **kwargs)
elegantlog.clear_handlers(name)
elegantlog.replace_handler(name, old_handler_type, new_handler_type, **kwargs)

下一步看什么

如果你已经完成基础接入,建议按这个顺序继续阅读:

  1. docs/ADVANCED_GUIDE.md
  2. 如果使用 JSON 输出,再看 docs/JSON_LOGGING.md
  3. 如果你要参与仓库开发,再看 docs/DEVELOPER_GUIDE.md

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

elegant_log-0.1.2.tar.gz (180.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

elegant_log-0.1.2-py3-none-any.whl (112.2 kB view details)

Uploaded Python 3

File details

Details for the file elegant_log-0.1.2.tar.gz.

File metadata

  • Download URL: elegant_log-0.1.2.tar.gz
  • Upload date:
  • Size: 180.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.5.31

File hashes

Hashes for elegant_log-0.1.2.tar.gz
Algorithm Hash digest
SHA256 8e3e49bcb1078d2067a99428193261372727b02f6d0319e9c30517c100405165
MD5 05ae31464c3ae20e408506527f5714fe
BLAKE2b-256 6d85935156df75f9e5a969015407e1274879265eb944656dcd723cbe99474cf7

See more details on using hashes here.

File details

Details for the file elegant_log-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for elegant_log-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 688399f5dc2b117d538c3a7fe73d902d3bdd9736eed32663187811974845d5ee
MD5 4e7bae242747532dc7a948eeebdc959f
BLAKE2b-256 307441bb69fcc596436a0dae9ab1be00108ad9dcf507c2af2977a08791e706dd

See more details on using hashes here.

Supported by

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