简介
日志模块。提供日志创建、加载和获取功能。基于 pino 日志库创建三个日志实例:
- logger:应用日志(
ee.log),记录业务代码输出 - coreLogger:框架核心日志(
ee-core.log),记录框架内部运行时信息 - errorLogger:错误日志(
ee-error.log),仅记录 error/fatal 级别
所有日志实例使用 Proxy 包装,兼容多种调用风格:
- pino 标准:
logger.info({ key: 'value' }, 'message')— 第一个参数为合并对象 - pino printf:
logger.info('count: %d', 42)— 包含%s/%d格式占位符 - 拼接模式:
logger.info('msg:', value)— 多参数自动拼接为'msg: value'
特性:
- 基于 pino-roll 的日志文件轮转(每日/每小时)
- 开发环境 pino-pretty 彩色输出
- 支持字段脱敏(redact)、自定义日志级别、自定义序列化器
- 安全模式:日志写入失败时不抛出异常
- 可配置日志时间戳时区(IANA 时区名或 UTC)
导入
CJS 和 ESM:
// ESM
import { loadLog, getLoggers, createLog, logger, coreLogger } from 'ee-core/log';
import type { EeLogger } from 'ee-core/log';
// CJS
const { loadLog, getLoggers, createLog, logger, coreLogger } = require('ee-core/log');从主入口:
// ESM
import { loadLog, getLoggers, coreLogger } from 'ee-core';
import type { EeLogger } from 'ee-core';
// CJS
const { loadLog, getLoggers, coreLogger } = require('ee-core');API
EeLogger
说明:框架统一日志接口,屏蔽 pino 内部实现细节。所有日志实例(logger、coreLogger、errorLogger)均实现此接口。支持六个日志级别和子日志器创建。
| 方法 | 签名 | 说明 |
| trace | (...args: unknown[]) => void | Trace 级别日志 |
| debug | (...args: unknown[]) => void | Debug 级别日志 |
| info | (...args: unknown[]) => void | Info 级别日志 |
| warn | (...args: unknown[]) => void | Warn 级别日志 |
| error | (...args: unknown[]) => void | Error 级别日志 |
| fatal | (...args: unknown[]) => void | Fatal 级别日志 |
| child | (bindings: pino.Bindings) => EeLogger | 创建带额外上下文绑定的子日志器 |
示例:
// 标准 pino 风格
logger.info({ userId: 123 }, 'User logged in');
// Printf 风格(支持 %s, %d, %i, %f, %o, %O, %c)
logger.info('Count: %d, name: %s', 42, 'test');
// 拼接风格
logger.info('Request completed:', { status: 200, duration: 150 });
// 创建带上下文的子日志器
const requestLogger = logger.child({ requestId: 'abc-123' });
requestLogger.info('Processing request');loadLog()
说明:加载日志系统。使用系统配置创建日志实例。在框架启动流程中由 boot.ts init() 调用。此函数属于框架启动生命周期的一部分,通常无需手动调用。
参数:无
返回值:void
示例:
// 在框架启动时内部调用
loadLog();参见:app.ElectronEgg 生命周期、getLoggers
getLoggers()
说明:获取日志实例集合(PinoLoggers)。如果日志尚未加载,自动触发加载。返回原始 pino 实例,而非 Proxy 包装版本。
参数:无
返回值:PinoLoggers — 包含三个 pino.Logger 实例的对象:{ logger, coreLogger, errorLogger }
示例:
const loggers = getLoggers();
// 访问原始 pino 实例
loggers.logger.info('Direct pino call');
loggers.coreLogger.debug('Core debug message');
loggers.errorLogger.error('Error message');参见:loadLog、logger、coreLogger
createLog(config)
说明:创建自定义日志实例集合。合并默认配置和用户配置,为每个日志文件创建独立的 pino 实例。适用于需要与默认日志系统不同设置的独立日志系统。
参数:| 参数 | 类型 | 必填 | 说明 |
| config | Partial<LoggerConfig> | 否 | 自定义日志配置(覆盖系统配置) |
返回值:PinoLoggers — 包含三个 pino.Logger 实例的对象:{ logger, coreLogger, errorLogger }
示例:
// 使用自定义配置创建日志
const customLoggers = createLog({
dir: '/custom/log/path',
level: 'debug',
appLogName: 'my-app.log',
prettyPrint: false,
});
customLoggers.logger.info('Custom log message');参见:LoggerConfig 类型、loadLog
logger
说明:应用日志实例(Proxy 包装)。记录业务代码输出到 ee.log(可通过 appLogName 配置)。实现 EeLogger 接口,通过 Proxy 包装兼容多种调用风格。
参数:无(这是预创建的单例实例)
返回值:EeLogger — 应用日志 Proxy 实例
示例:
// 多种调用风格
logger.info('Simple message');
logger.info('User id: %d', 123);
logger.info({ action: 'login' }, 'User logged in');
logger.info('Status:', 200, 'Duration:', 150);
logger.error(new Error('Something failed'));
logger.warn('Deprecated API used');参见:EeLogger、coreLogger、getLoggers
coreLogger
说明:框架核心日志实例(Proxy 包装)。记录框架内部运行时信息到 ee-core.log(可通过 coreLogName 配置)。实现 EeLogger 接口。从 ee-core/log 和主 ee-core 入口均可导出。
参数:无(这是预创建的单例实例)
返回值:EeLogger — 框架核心日志 Proxy 实例
示例:
coreLogger.debug('[config] Loading configuration...');
coreLogger.info('[controller] Registered: example');
coreLogger.error('[socket] Connection failed');参见:EeLogger、logger、getLoggers
errorLogger
说明:错误日志实例(Proxy 包装,仅 error/fatal 级别)。仅记录 error 级别及以上到 ee-error.log(可通过 errorLogName 配置)。日志级别固定为 error,不受全局配置级别影响。实现 EeLogger 接口。注意:errorLogger 仅通过 ee-core/log 模块导入可用,不从主 ee-core 入口导出。
参数:无(这是预创建的单例实例)
返回值:EeLogger — 错误日志 Proxy 实例
示例:
// 仅记录 error 和 fatal 消息
const { errorLogger } = require('ee-core/log');
errorLogger.error('Critical failure occurred');
errorLogger.fatal('Unrecoverable error');参见:EeLogger、logger、getLoggers
