Skip to content

简介

日志模块。提供日志创建、加载和获取功能。基于 pino 日志库创建三个日志实例:

  • logger:应用日志(ee.log),记录业务代码输出
  • coreLogger:框架核心日志(ee-core.log),记录框架内部运行时信息
  • errorLogger:错误日志(ee-error.log),仅记录 error/fatal 级别

所有日志实例使用 Proxy 包装,兼容多种调用风格:

  1. pino 标准:logger.info({ key: 'value' }, 'message') — 第一个参数为合并对象
  2. pino printf:logger.info('count: %d', 42) — 包含 %s/%d 格式占位符
  3. 拼接模式:logger.info('msg:', value) — 多参数自动拼接为 'msg: value'

特性:

  • 基于 pino-roll 的日志文件轮转(每日/每小时)
  • 开发环境 pino-pretty 彩色输出
  • 支持字段脱敏(redact)、自定义日志级别、自定义序列化器
  • 安全模式:日志写入失败时不抛出异常
  • 可配置日志时间戳时区(IANA 时区名或 UTC)

导入

CJS 和 ESM:

javascript
// 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');

从主入口:

javascript
// 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 内部实现细节。所有日志实例(loggercoreLoggererrorLogger)均实现此接口。支持六个日志级别和子日志器创建。

| 方法 | 签名 | 说明 |
| 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 | 创建带额外上下文绑定的子日志器 |

示例

javascript
// 标准 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
示例

javascript
// 在框架启动时内部调用
loadLog();

参见app.ElectronEgg 生命周期、getLoggers

getLoggers()

说明:获取日志实例集合(PinoLoggers)。如果日志尚未加载,自动触发加载。返回原始 pino 实例,而非 Proxy 包装版本。
参数:无
返回值PinoLoggers — 包含三个 pino.Logger 实例的对象:{ logger, coreLogger, errorLogger }
示例

javascript
const loggers = getLoggers();
// 访问原始 pino 实例
loggers.logger.info('Direct pino call');
loggers.coreLogger.debug('Core debug message');
loggers.errorLogger.error('Error message');

参见loadLogloggercoreLogger

createLog(config)

说明:创建自定义日志实例集合。合并默认配置和用户配置,为每个日志文件创建独立的 pino 实例。适用于需要与默认日志系统不同设置的独立日志系统。
参数:| 参数 | 类型 | 必填 | 说明 |
| config | Partial<LoggerConfig> | 否 | 自定义日志配置(覆盖系统配置) |
返回值PinoLoggers — 包含三个 pino.Logger 实例的对象:{ logger, coreLogger, errorLogger }
示例

javascript
// 使用自定义配置创建日志
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 实例
示例

javascript
// 多种调用风格
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');

参见EeLoggercoreLoggergetLoggers

coreLogger

说明:框架核心日志实例(Proxy 包装)。记录框架内部运行时信息到 ee-core.log(可通过 coreLogName 配置)。实现 EeLogger 接口。从 ee-core/log 和主 ee-core 入口均可导出。
参数:无(这是预创建的单例实例)
返回值EeLogger — 框架核心日志 Proxy 实例
示例

javascript
coreLogger.debug('[config] Loading configuration...');
coreLogger.info('[controller] Registered: example');
coreLogger.error('[socket] Connection failed');

参见EeLoggerloggergetLoggers

errorLogger

说明:错误日志实例(Proxy 包装,仅 error/fatal 级别)。仅记录 error 级别及以上到 ee-error.log(可通过 errorLogName 配置)。日志级别固定为 error,不受全局配置级别影响。实现 EeLogger 接口。注意:errorLogger 仅通过 ee-core/log 模块导入可用,不从主 ee-core 入口导出。
参数:无(这是预创建的单例实例)
返回值EeLogger — 错误日志 Proxy 实例
示例

javascript
// 仅记录 error 和 fatal 消息
const { errorLogger } = require('ee-core/log');
errorLogger.error('Critical failure occurred');
errorLogger.fatal('Unrecoverable error');

参见EeLoggerloggergetLoggers