@@ -12,6 +12,7 @@ import {
12
12
ILogger ,
13
13
IPicGo
14
14
} from '../types'
15
+ import { forceNumber } from '../utils/common'
15
16
16
17
export class Logger implements ILogger {
17
18
private readonly level = {
@@ -36,11 +37,50 @@ export class Logger implements ILogger {
36
37
this . logLevel = this . ctx . getConfig ( 'settings.logLevel' )
37
38
this . logPath = this . ctx . getConfig < Undefinable < string > > ( 'settings.logPath' ) || path . join ( this . ctx . baseDir , './picgo.log' )
38
39
setTimeout ( ( ) => {
40
+ // fix log file is too large, now the log file's default size is 10 MB
41
+ try {
42
+ const result = this . checkLogFileIsLarge ( this . logPath )
43
+ if ( result . isLarge ) {
44
+ const warningMsg = `Log file is too large (> ${ ( result . logFileSizeLimit ! ) / 1024 / 1024 || '10' } MB), recreate log file`
45
+ console . log ( chalk . yellow ( '[PicGo WARN]:' ) , warningMsg )
46
+ this . recreateLogFile ( this . logPath )
47
+ msg . unshift ( warningMsg )
48
+ }
49
+ } catch ( e ) {
50
+ // why???
51
+ console . error ( '[PicGo Error] on checking log file size' , e )
52
+ }
39
53
this . handleWriteLog ( this . logPath , type , ...msg )
40
54
} , 0 )
41
55
}
42
56
}
43
57
58
+ private checkLogFileIsLarge ( logPath : string ) : {
59
+ isLarge : boolean
60
+ logFileSize ?: number
61
+ logFileSizeLimit ?: number
62
+ } {
63
+ if ( fs . existsSync ( logPath ) ) {
64
+ const logFileSize = fs . statSync ( logPath ) . size
65
+ const logFileSizeLimit = forceNumber ( this . ctx . getConfig < Undefinable < number > > ( 'settings.logFileSizeLimit' ) || 10 ) * 1024 * 1024 // 10 MB default
66
+ return {
67
+ isLarge : logFileSize > logFileSizeLimit ,
68
+ logFileSize,
69
+ logFileSizeLimit
70
+ }
71
+ }
72
+ return {
73
+ isLarge : false
74
+ }
75
+ }
76
+
77
+ private recreateLogFile ( logPath : string ) : void {
78
+ if ( fs . existsSync ( logPath ) ) {
79
+ fs . unlinkSync ( logPath )
80
+ fs . createFileSync ( logPath )
81
+ }
82
+ }
83
+
44
84
private handleWriteLog ( logPath : string , type : string , ...msg : ILogArgvTypeWithError [ ] ) : void {
45
85
try {
46
86
if ( this . checkLogLevel ( type , this . logLevel ) ) {
@@ -60,7 +100,7 @@ export class Logger implements ILogger {
60
100
fs . appendFileSync ( logPath , log )
61
101
}
62
102
} catch ( e ) {
63
- console . log ( e )
103
+ console . error ( '[PicGo Error] on writing log file' , e )
64
104
}
65
105
}
66
106
0 commit comments