1
+ const fs = require ( 'fs' ) ; // 添加这行代码
2
+ const winston = require ( 'winston' ) ;
3
+ const DailyRotateFile = require ( 'winston-daily-rotate-file' ) ;
4
+ const path = require ( 'path' ) ;
5
+
6
+ class Logger {
7
+ constructor ( options = { } ) {
8
+ // 默认配置
9
+ const defaultOptions = {
10
+ level : 'info' , // 默认日志级别
11
+ logDir : path . join ( __dirname , '../logs' ) , // 默认日志目录
12
+ filename : 'app-%DATE%.log' , // 默认日志文件名
13
+ datePattern : 'YYYY-MM-DD' , // 按天分割日志
14
+ maxSize : '20m' , // 每个文件最大 20MB
15
+ maxFiles : '14d' , // 保留最近 14 天的日志
16
+ format : winston . format . combine (
17
+ winston . format . timestamp ( ) , // 添加时间戳
18
+ winston . format . printf ( ( { level, message, timestamp } ) => {
19
+ return `${ timestamp } [${ level } ]: ${ message } ` ;
20
+ } )
21
+ ) ,
22
+ } ;
23
+
24
+ // 合并用户配置和默认配置
25
+ this . options = Object . assign ( { } , defaultOptions , options ) ;
26
+ // this.options = { ...defaultOptions, ...options };
27
+
28
+ // 确保日志目录存在
29
+ if ( ! fs . existsSync ( this . options . logDir ) ) {
30
+ fs . mkdirSync ( this . options . logDir , { recursive : true } ) ;
31
+ }
32
+
33
+ // 创建 Logger 实例
34
+ this . logger = winston . createLogger ( {
35
+ level : this . options . level ,
36
+ format : this . options . format ,
37
+ transports : [
38
+ new DailyRotateFile ( {
39
+ dirname : this . options . logDir ,
40
+ filename : this . options . filename ,
41
+ datePattern : this . options . datePattern ,
42
+ maxSize : this . options . maxSize ,
43
+ maxFiles : this . options . maxFiles ,
44
+ } ) ,
45
+ new winston . transports . Console ( { // 同时输出到控制台
46
+ format : winston . format . combine (
47
+ winston . format . colorize ( ) , // 控制台日志添加颜色
48
+ winston . format . simple ( ) // 简单格式
49
+ ) ,
50
+ } ) ,
51
+ ] ,
52
+ } ) ;
53
+ }
54
+
55
+ // 记录日志的方法
56
+ log ( level , message , meta = { } ) {
57
+ this . logger . log ( level , message , meta ) ;
58
+ }
59
+
60
+ // 快捷方法
61
+ info ( message , meta ) {
62
+ this . log ( 'info' , message , meta ) ;
63
+ }
64
+
65
+ warn ( message , meta ) {
66
+ this . log ( 'warn' , message , meta ) ;
67
+ }
68
+
69
+ error ( message , meta ) {
70
+ this . log ( 'error' , message , meta ) ;
71
+ }
72
+
73
+ debug ( message , meta ) {
74
+ this . log ( 'debug' , message , meta ) ;
75
+ }
76
+ }
77
+
78
+ // 导出工具类
79
+ module . exports = Logger ;
0 commit comments