feat(logger): 添加 winston 日志系统
- 新增 src/lib/logger/ 模块 - 支持 dev/prod 环境不同输出格式 - createLogger() 创建带上下文的 logger - 更新 AGENTS.md 添加日志使用约定
This commit is contained in:
16
src/lib/logger/index.ts
Normal file
16
src/lib/logger/index.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
import { logger } from "./logger";
|
||||
|
||||
export { logger };
|
||||
|
||||
export function createLogger(context: string) {
|
||||
return {
|
||||
debug: (message: string, meta?: object) =>
|
||||
logger.debug(`[${context}] ${message}`, meta),
|
||||
info: (message: string, meta?: object) =>
|
||||
logger.info(`[${context}] ${message}`, meta),
|
||||
warn: (message: string, meta?: object) =>
|
||||
logger.warn(`[${context}] ${message}`, meta),
|
||||
error: (message: string, meta?: object) =>
|
||||
logger.error(`[${context}] ${message}`, meta),
|
||||
};
|
||||
}
|
||||
9
src/lib/logger/logger.ts
Normal file
9
src/lib/logger/logger.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import winston from "winston";
|
||||
import { devTransport, prodTransport } from "./transports";
|
||||
|
||||
const isDev = process.env.NODE_ENV !== "production";
|
||||
|
||||
export const logger = winston.createLogger({
|
||||
level: isDev ? "debug" : "info",
|
||||
transports: [isDev ? devTransport : prodTransport],
|
||||
});
|
||||
20
src/lib/logger/transports.ts
Normal file
20
src/lib/logger/transports.ts
Normal file
@@ -0,0 +1,20 @@
|
||||
import { transports, format } from "winston";
|
||||
|
||||
const { combine, timestamp, printf, colorize, json } = format;
|
||||
|
||||
const customFormat = printf(({ level, message, timestamp, ...metadata }) => {
|
||||
const metaStr = Object.keys(metadata).length ? JSON.stringify(metadata) : "";
|
||||
return `${timestamp} [${level}]: ${message} ${metaStr}`;
|
||||
});
|
||||
|
||||
export const devTransport = new transports.Console({
|
||||
format: combine(
|
||||
colorize(),
|
||||
timestamp({ format: "YYYY-MM-DD HH:mm:ss" }),
|
||||
customFormat
|
||||
),
|
||||
});
|
||||
|
||||
export const prodTransport = new transports.Console({
|
||||
format: combine(timestamp(), json()),
|
||||
});
|
||||
Reference in New Issue
Block a user