# np_log 智能日志系统 使用手册
## 简介
np_log 是一个功能强大的 Python 日志系统,提供智能调用者识别、彩色终端输出、自动日志管理和多平台通知等功能。
## 安装
```bash
pip install np_log
```
## 快速开始
```python
from np_log import log, setup_logging
# 简单使用
log("Debug message") # 默认DEBUG级别
log("Info message", "INFO") # 指定级别
log("Error with bot", "ERROR", {"bot": True}) # 触发机器人通知
# 高级配置
logger = setup_logging(
name="my_app", # 自定义日志名称
console_level="INFO", # 控制台日志级别
file_level="DEBUG", # 文件日志级别
log_max_days=30, # 日志保留天数
log_max_size=100 # 单个日志文件大小(MB)
)
logger.info("Custom logger message")
```
## 核心功能
### 1. 智能调用追踪
- 自动识别真实调用源文件位置
- 准确显示文件名和行号
- 跳过logging模块内部调用
### 2. 彩色终端输出
- DEBUG: 青色
- INFO: 绿色
- WARNING: 黄色
- ERROR: 红色
- CRITICAL: 紫色
### 3. 自动日志管理
- 按日期分目录存储
- 支持日志轮转(默认50MB/文件)
- 可设置保留天数(默认7天)
- UTF-8编码保证兼容性
### 4. 机器人通知
- 支持企业微信和飞书
- 通过`.env`文件配置
- 按需发送关键日志
## 配置说明
### setup_logging 参数
| 参数 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| `name` | str | None | 自动检测调用文件 |
| `is_logfile` | bool | True | 是否启用文件日志 |
| `console_level` | str | "DEBUG" | 控制台日志级别 |
| `file_level` | str | "DEBUG" | 文件日志级别 |
| `log_max_days` | int | 7 | 日志保留天数 |
| `log_max_size` | int | 50 | 单个日志文件大小(MB) |
### 机器人配置
在项目根目录创建`.env`文件:
```ini
# 企业微信机器人(完整URL或KEY)
WECHAT_WEBHOOK_URL=your_wechat_key
# 飞书机器人
FEISHU_WEBHOOK_URL=your_feishu_key
```
## 最佳实践
1. **项目初始化配置**:
```python
# app.py
from np_log import setup_logging
logger = setup_logging()
```
2. **模块中使用**:
```python
# module.py
from np_log import log
def my_function():
log("Function started")
```
3. **关键错误通知**:
```python
try:
critical_operation()
except Exception as e:
log(f"操作失败: {str(e)}", "ERROR", {"bot": True})
```
## 问题排查
### 常见问题
1. **看不到颜色输出**:
- 检查终端是否支持ANSI颜色
- 确保未重定向输出到文件
2. **机器人不工作**:
- 检查`.env`文件配置
- 确认网络可访问
- 检查是否设置了`{"bot": True}`
3. **行号显示不正确**:
- 确保未使用`from np_log import *`
- 检查是否有中间包装函数
## 版本信息
- **当前版本**:0.1.9
- **更新日期**:2025-05-20
## 联系方式
如果您在使用过程中遇到任何问题,或者有任何建议和反馈,可以通过以下方式联系我们:
- **邮箱**:2558949748@qq.com
- **GitHub**:https://github.com/Liu670/np_log
## 参与贡献
欢迎提交Issue或PR,请包含:
- 问题描述/功能建议
- 重现步骤
- 预期与实际行为
## 许可证
MIT License
Raw data
{
"_id": null,
"home_page": "https://github.com/Liu670/np_log",
"name": "np-log",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.5",
"maintainer_email": null,
"keywords": "logging custom log configuration",
"author": "\u5218\u91d1\u6797",
"author_email": "2558949748@qq.com",
"download_url": null,
"platform": null,
"description": "# np_log \u667a\u80fd\u65e5\u5fd7\u7cfb\u7edf \u4f7f\u7528\u624b\u518c\r\n\r\n## \u7b80\u4ecb\r\n\r\nnp_log \u662f\u4e00\u4e2a\u529f\u80fd\u5f3a\u5927\u7684 Python \u65e5\u5fd7\u7cfb\u7edf\uff0c\u63d0\u4f9b\u667a\u80fd\u8c03\u7528\u8005\u8bc6\u522b\u3001\u5f69\u8272\u7ec8\u7aef\u8f93\u51fa\u3001\u81ea\u52a8\u65e5\u5fd7\u7ba1\u7406\u548c\u591a\u5e73\u53f0\u901a\u77e5\u7b49\u529f\u80fd\u3002\r\n\r\n## \u5b89\u88c5\r\n\r\n```bash\r\npip install np_log\r\n```\r\n\r\n## \u5feb\u901f\u5f00\u59cb\r\n\r\n```python\r\nfrom np_log import log, setup_logging\r\n\r\n# \u7b80\u5355\u4f7f\u7528\r\nlog(\"Debug message\") # \u9ed8\u8ba4DEBUG\u7ea7\u522b\r\nlog(\"Info message\", \"INFO\") # \u6307\u5b9a\u7ea7\u522b\r\nlog(\"Error with bot\", \"ERROR\", {\"bot\": True}) # \u89e6\u53d1\u673a\u5668\u4eba\u901a\u77e5\r\n\r\n# \u9ad8\u7ea7\u914d\u7f6e\r\nlogger = setup_logging(\r\n name=\"my_app\", # \u81ea\u5b9a\u4e49\u65e5\u5fd7\u540d\u79f0\r\n console_level=\"INFO\", # \u63a7\u5236\u53f0\u65e5\u5fd7\u7ea7\u522b\r\n file_level=\"DEBUG\", # \u6587\u4ef6\u65e5\u5fd7\u7ea7\u522b\r\n log_max_days=30, # \u65e5\u5fd7\u4fdd\u7559\u5929\u6570\r\n log_max_size=100 # \u5355\u4e2a\u65e5\u5fd7\u6587\u4ef6\u5927\u5c0f(MB)\r\n)\r\nlogger.info(\"Custom logger message\")\r\n```\r\n\r\n## \u6838\u5fc3\u529f\u80fd\r\n\r\n### 1. \u667a\u80fd\u8c03\u7528\u8ffd\u8e2a\r\n- \u81ea\u52a8\u8bc6\u522b\u771f\u5b9e\u8c03\u7528\u6e90\u6587\u4ef6\u4f4d\u7f6e\r\n- \u51c6\u786e\u663e\u793a\u6587\u4ef6\u540d\u548c\u884c\u53f7\r\n- \u8df3\u8fc7logging\u6a21\u5757\u5185\u90e8\u8c03\u7528\r\n\r\n### 2. \u5f69\u8272\u7ec8\u7aef\u8f93\u51fa\r\n- DEBUG: \u9752\u8272\r\n- INFO: \u7eff\u8272 \r\n- WARNING: \u9ec4\u8272\r\n- ERROR: \u7ea2\u8272\r\n- CRITICAL: \u7d2b\u8272\r\n\r\n### 3. \u81ea\u52a8\u65e5\u5fd7\u7ba1\u7406\r\n- \u6309\u65e5\u671f\u5206\u76ee\u5f55\u5b58\u50a8\r\n- \u652f\u6301\u65e5\u5fd7\u8f6e\u8f6c(\u9ed8\u8ba450MB/\u6587\u4ef6)\r\n- \u53ef\u8bbe\u7f6e\u4fdd\u7559\u5929\u6570(\u9ed8\u8ba47\u5929)\r\n- UTF-8\u7f16\u7801\u4fdd\u8bc1\u517c\u5bb9\u6027\r\n\r\n### 4. \u673a\u5668\u4eba\u901a\u77e5\r\n- \u652f\u6301\u4f01\u4e1a\u5fae\u4fe1\u548c\u98de\u4e66\r\n- \u901a\u8fc7`.env`\u6587\u4ef6\u914d\u7f6e\r\n- \u6309\u9700\u53d1\u9001\u5173\u952e\u65e5\u5fd7\r\n\r\n## \u914d\u7f6e\u8bf4\u660e\r\n\r\n### setup_logging \u53c2\u6570\r\n\r\n| \u53c2\u6570 | \u7c7b\u578b | \u9ed8\u8ba4\u503c | \u8bf4\u660e |\r\n|------|------|--------|------|\r\n| `name` | str | None | \u81ea\u52a8\u68c0\u6d4b\u8c03\u7528\u6587\u4ef6 |\r\n| `is_logfile` | bool | True | \u662f\u5426\u542f\u7528\u6587\u4ef6\u65e5\u5fd7 |\r\n| `console_level` | str | \"DEBUG\" | \u63a7\u5236\u53f0\u65e5\u5fd7\u7ea7\u522b |\r\n| `file_level` | str | \"DEBUG\" | \u6587\u4ef6\u65e5\u5fd7\u7ea7\u522b |\r\n| `log_max_days` | int | 7 | \u65e5\u5fd7\u4fdd\u7559\u5929\u6570 |\r\n| `log_max_size` | int | 50 | \u5355\u4e2a\u65e5\u5fd7\u6587\u4ef6\u5927\u5c0f(MB) |\r\n\r\n### \u673a\u5668\u4eba\u914d\u7f6e\r\n\r\n\u5728\u9879\u76ee\u6839\u76ee\u5f55\u521b\u5efa`.env`\u6587\u4ef6\uff1a\r\n\r\n```ini\r\n# \u4f01\u4e1a\u5fae\u4fe1\u673a\u5668\u4eba(\u5b8c\u6574URL\u6216KEY)\r\nWECHAT_WEBHOOK_URL=your_wechat_key\r\n\r\n# \u98de\u4e66\u673a\u5668\u4eba \r\nFEISHU_WEBHOOK_URL=your_feishu_key\r\n```\r\n\r\n## \u6700\u4f73\u5b9e\u8df5\r\n\r\n1. **\u9879\u76ee\u521d\u59cb\u5316\u914d\u7f6e**\uff1a\r\n```python\r\n# app.py\r\nfrom np_log import setup_logging\r\nlogger = setup_logging()\r\n```\r\n\r\n2. **\u6a21\u5757\u4e2d\u4f7f\u7528**\uff1a\r\n```python\r\n# module.py\r\nfrom np_log import log\r\n\r\ndef my_function():\r\n log(\"Function started\")\r\n```\r\n\r\n3. **\u5173\u952e\u9519\u8bef\u901a\u77e5**\uff1a\r\n```python\r\ntry:\r\n critical_operation()\r\nexcept Exception as e:\r\n log(f\"\u64cd\u4f5c\u5931\u8d25: {str(e)}\", \"ERROR\", {\"bot\": True})\r\n```\r\n\r\n## \u95ee\u9898\u6392\u67e5\r\n\r\n### \u5e38\u89c1\u95ee\u9898\r\n\r\n1. **\u770b\u4e0d\u5230\u989c\u8272\u8f93\u51fa**\uff1a\r\n - \u68c0\u67e5\u7ec8\u7aef\u662f\u5426\u652f\u6301ANSI\u989c\u8272\r\n - \u786e\u4fdd\u672a\u91cd\u5b9a\u5411\u8f93\u51fa\u5230\u6587\u4ef6\r\n\r\n2. **\u673a\u5668\u4eba\u4e0d\u5de5\u4f5c**\uff1a\r\n - \u68c0\u67e5`.env`\u6587\u4ef6\u914d\u7f6e\r\n - \u786e\u8ba4\u7f51\u7edc\u53ef\u8bbf\u95ee\r\n - \u68c0\u67e5\u662f\u5426\u8bbe\u7f6e\u4e86`{\"bot\": True}`\r\n\r\n3. **\u884c\u53f7\u663e\u793a\u4e0d\u6b63\u786e**\uff1a\r\n - \u786e\u4fdd\u672a\u4f7f\u7528`from np_log import *`\r\n - \u68c0\u67e5\u662f\u5426\u6709\u4e2d\u95f4\u5305\u88c5\u51fd\u6570\r\n\r\n## \u7248\u672c\u4fe1\u606f\r\n\r\n- **\u5f53\u524d\u7248\u672c**\uff1a0.1.9\r\n- **\u66f4\u65b0\u65e5\u671f**\uff1a2025-05-20\r\n\r\n## \u8054\u7cfb\u65b9\u5f0f\r\n\r\n\u5982\u679c\u60a8\u5728\u4f7f\u7528\u8fc7\u7a0b\u4e2d\u9047\u5230\u4efb\u4f55\u95ee\u9898\uff0c\u6216\u8005\u6709\u4efb\u4f55\u5efa\u8bae\u548c\u53cd\u9988\uff0c\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u65b9\u5f0f\u8054\u7cfb\u6211\u4eec\uff1a\r\n\r\n- **\u90ae\u7bb1**\uff1a2558949748@qq.com\r\n- **GitHub**\uff1ahttps://github.com/Liu670/np_log\r\n\r\n## \u53c2\u4e0e\u8d21\u732e\r\n\r\n\u6b22\u8fce\u63d0\u4ea4Issue\u6216PR\uff0c\u8bf7\u5305\u542b\uff1a\r\n- \u95ee\u9898\u63cf\u8ff0/\u529f\u80fd\u5efa\u8bae\r\n- \u91cd\u73b0\u6b65\u9aa4\r\n- \u9884\u671f\u4e0e\u5b9e\u9645\u884c\u4e3a\r\n\r\n## \u8bb8\u53ef\u8bc1\r\n\r\nMIT License\r\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "\u65e5\u5fd7\u7ba1\u7406\u5668",
"version": "0.2.4",
"project_urls": {
"Homepage": "https://github.com/Liu670/np_log"
},
"split_keywords": [
"logging",
"custom",
"log",
"configuration"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "c3fd6ee39d030764a3e0a2eb506cb169ff4ecb0799c3cf82131921a85b37a867",
"md5": "76b20c89c5a91dd745000f6d39a6477e",
"sha256": "6b74ccf6f6b840dc8800a3c2e088a91ad1727c27e687cb8554ea60276af22d2e"
},
"downloads": -1,
"filename": "np_log-0.2.4-py3-none-any.whl",
"has_sig": false,
"md5_digest": "76b20c89c5a91dd745000f6d39a6477e",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.5",
"size": 18628,
"upload_time": "2025-07-25T10:50:36",
"upload_time_iso_8601": "2025-07-25T10:50:36.698349Z",
"url": "https://files.pythonhosted.org/packages/c3/fd/6ee39d030764a3e0a2eb506cb169ff4ecb0799c3cf82131921a85b37a867/np_log-0.2.4-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-25 10:50:36",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "Liu670",
"github_project": "np_log",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "np-log"
}