| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- /*
- * @Author: 白雾茫茫丶<baiwumm.com>
- * @Date: 2024-08-29 16:41:59
- * @LastEditors: 白雾茫茫丶<baiwumm.com>
- * @LastEditTime: 2024-08-30 11:28:50
- * @Description: winston 日志
- */
- import chalk from 'chalk'; // 用于颜色化输出
- import { createLogger, format, transports } from 'winston';
- import DailyRotateFile from 'winston-daily-rotate-file';
- // 定义日志级别颜色
- const levelsColors = {
- error: 'red',
- warn: 'yellow',
- info: 'green',
- debug: 'blue',
- verbose: 'cyan',
- };
- const winstonLogger = createLogger({
- format: format.combine(format.timestamp(), format.errors({ stack: true }), format.splat(), format.json()),
- defaultMeta: { service: 'log-service' },
- transports: [
- new DailyRotateFile({
- filename: 'logs/errors/error-%DATE%.log', // 日志名称,占位符 %DATE% 取值为 datePattern 值。
- datePattern: 'YYYY-MM-DD', // 日志轮换的频率,此处表示每天。
- zippedArchive: true, // 是否通过压缩的方式归档被轮换的日志文件。
- maxSize: '20m', // 设置日志文件的最大大小,m 表示 mb 。
- maxFiles: '14d', // 保留日志文件的最大天数,此处表示自动删除超过 14 天的日志文件。
- level: 'error', // 日志类型,此处表示只记录错误日志。
- }),
- new DailyRotateFile({
- filename: 'logs/warnings/warning-%DATE%.log',
- datePattern: 'YYYY-MM-DD',
- zippedArchive: true,
- maxSize: '20m',
- maxFiles: '14d',
- level: 'warn',
- }),
- new DailyRotateFile({
- filename: 'logs/app/app-%DATE%.log',
- datePattern: 'YYYY-MM-DD',
- zippedArchive: true,
- maxSize: '20m',
- maxFiles: '14d',
- }),
- new transports.Console({
- format: format.combine(
- format.colorize({
- colors: levelsColors,
- }),
- format.simple(),
- format.printf((info) => {
- // 直接使用 info.level 获取日志级别,避免使用 symbol 作为索引
- const level = info.level as keyof typeof levelsColors;
- const color = levelsColors[level] || 'white';
- const chalkColor = chalk[color] || ((text: string) => text);
- const message = `${chalkColor(info.timestamp)} ${chalkColor(level)}: ${info.message}`;
- return message;
- }),
- ),
- level: 'debug',
- }),
- ],
- });
- export default winstonLogger;
|