mcpField
F
frappe-core-logging

frappe-core-logging

github.com/impertio-studio开发198114 次安装30 周前更新
代码仓库

关于 frappe-core-logging

面向 Frappe 开发者的日志技能,介绍应用日志、Error Log 跟踪和生产环境配置,帮助选择合适的记录方式并避免常见误用。

主要功能

  1. 01文件日志轮转
  2. 02数据库 Error Log 跟踪
  3. 03日志级别与生产配置指南
  4. 04Sentry 与异常跟踪指南
  5. 05常见日志误用说明

适用场景

  1. 01记录应用诊断信息和审计轨迹
  2. 02让管理员查看错误
  3. 03配置生产日志与监控

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/impertio-studio/frappe_claude_skill_package --skill frappe-core-logging

安装后在 Claude Code 中输入/frappe-core-logging确认已加载。

附带文件references/error-tracking.mdreferences/logger-patterns.md

详细介绍

Frappe 日志记录与错误跟踪

三种日志记录机制

机制存储位置用途
frappe.logger()文件(轮转)应用日志、调试信息、审计记录
frappe.log_error()数据库(Error Log DocType)在管理界面中查看错误,持久化跟踪
frappe.log() / frappe.errprint()stderr / 请求作用域仅用于快速调试(不适用于生产环境)

决策树

Need to log something?
│
├─ Application logging (info, debug, warnings)?
│  └─ frappe.logger("my_module").info("message")
│     → Writes to sites/{site}/logs/my_module.log
│
├─ Error that admins should see in Desk UI?
│  └─ frappe.log_error(title="Short desc", message=traceback)
│     → Creates Error Log document (queryable, auto-cleanup)
│
├─ Quick debug during development?
│  └─ frappe.errprint(variable) — shows in console
│     → NEVER leave in production code
│
├─ Track all HTTP requests?
│  └─ Set enable_frappe_logger: true in site_config.json
│     → Logs to frappe.web.log
│
├─ Performance monitoring?
│  └─ Set monitor: true in site_config.json
│     → Logs to monitor.json.log (JSON, per-request metrics)
│
└─ External error tracking (Sentry)?
   └─ Set FRAPPE_SENTRY_DSN environment variable
      → Auto-captures unhandled exceptions

快速参考:frappe.logger()

# Get a logger for your module (ALWAYS specify module name)
logger = frappe.logger("my_app")

# Standard Python logging levels
logger.debug("Detailed diagnostic info")
logger.info("Normal operations: processed 50 records")
logger.warning("Something unexpected but recoverable")
logger.error("Operation failed", exc_info=True)
logger.critical("System-level failure")

# Full signature
frappe.logger(
    module=None,          # Logger name + log filename
    with_more_info=False, # Auto-log request form_dict
    allow_site=True,      # Log under site's logs/ directory
    filter=None,          # Custom logging.Filter
    max_size=100_000,     # Max bytes per log file (100KB default)
    file_count=20         # Rotated files retained (20 default)
)

日志位置: sites/{site}/logs/{module}.log 轮转: RotatingFileHandler——每个文件 100KB,20 个备份(每个日志记录器总计约 2MB)

默认日志级别
模式级别效果
开发(_dev_server)WARNING抑制 Debug/Info 日志
生产ERROR仅记录错误及以上级别
# Change level dynamically
frappe.utils.logger.set_log_level("DEBUG")

快速参考:frappe.log_error()

# ALWAYS use keyword arguments (title/message can swap otherwise)
frappe.log_error(
    title="Payment gateway timeout",          # Short description (140 chars max)
    message=frappe.get_traceback(),            # Full error details
    reference_doctype="Payment Entry",        # Related DocType
    reference_name="PE-00001"                 # Related document
)

# Minimal — auto-captures current traceback
try:
    risky_operation()
except Exception:
    frappe.log_error(title="Operation failed")

Error Log 清理: 30 天后自动删除。手动清理:frappe.whitelist: clear_error_logs()

自动捕获的异常

未处理的异常(HTTP 500+)会自动记录到 Error Log。

不会自动捕获:

  • frappe.AuthenticationError
  • frappe.CSRFTokenError
  • frappe.SecurityException
  • frappe.InReadOnlyMode

生产环境配置

site_config.json 键
键值效果
enable_frappe_loggertrueHTTP 请求日志 → frappe.web.log
logging2记录所有 SQL 查询(仅用于调试!)
monitortrue请求/作业指标 → monitor.json.log
disable_error_snapshottrue禁用异常自动捕获
环境变量
变量效果
FRAPPE_STREAM_LOGGING=1将日志写入 stderr,而非文件
FRAPPE_SENTRY_DSN=<dsn>启用 Sentry 错误跟踪
ENABLE_SENTRY_DB_MONITORING在 Sentry 中跟踪 SQL 查询
SENTRY_TRACING_SAMPLE_RATE性能跟踪采样率(0.0-1.0)
生产环境日志文件
文件内容
logs/web.error.logHTTP 错误(supervisor)
logs/web.logGunicorn 标准输出
logs/worker.error.log后台作业错误
logs/frappe.log默认 frappe 日志记录器
logs/frappe.web.logHTTP 请求元数据
logs/monitor.json.log性能指标(JSON)
sites/{site}/logs/*.log各站点的应用日志

反模式

切勿始终原因
print("debug info")frappe.logger("mod").info(...)print() 在生产环境中会消失
frappe.log_error("info msg")frappe.logger().info(...)log_error 会创建 Error Log 文档,导致管理界面杂乱
frappe.logger()(不指定模块)frappe.logger("my_module")未指定模块时,日志会与框架日志混在一起
位置参数 frappe.log_error(title, msg)frappe.log_error(title=t, message=m)位置参数可能会互换(已知问题)
记录密码/令牌遮盖敏感数据SiteContextFilter 只会遮盖 form_dict
在生产环境中使用 frappe.log()frappe.logger()frappe.log() 仅用于调试,且作用域限于请求
在生产环境中保留 logging=2仅在调试期间使用会记录所有 SQL 查询,产生大量 I/O

版本差异

功能v14v15+
frappe.logger()是是
frappe.log_error()是+ defer_insert kwarg
Error Log trace_id--已添加
Error Log 元数据--JSON 请求/作业上下文
错误快照基于文件 + 定时收集直接插入数据库
Sentry 集成基础增强(数据库监控、性能分析)
guess_exception_source()--识别导致错误的应用
FRAPPE_STREAM_LOGGING是是

参考文件

评论

支持 Markdown