Skip to content

Commit 2c57faf

Browse files
committed
Disable file logs by default; lazy-init transport
Set file logging off by default and defer creation of the File transport until file logging is enabled. Store logPath and fileLogLevel (with fileTransportAdded flag) so the file transport can be added later with the correct filename and level. Remove the eager File transport from the constructor, update setFileAndConsoleLogLevel to persist fileLogLevel, and add the transport in setFileLogEnabled(true). Improve _log to only format messages when needed and notify subscribers once. Replace some direct logger.* calls with wrapper methods for consistent handling when deleting/reading old log files.
1 parent 8b0d186 commit 2c57faf

1 file changed

Lines changed: 31 additions & 21 deletions

File tree

  • packages/napcat-core/helper

packages/napcat-core/helper/log.ts

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,17 @@ class Subscription {
5959
export const logSubscription = new Subscription();
6060

6161
export class LogWrapper implements ILogWrapper {
62-
fileLogEnabled = true;
62+
fileLogEnabled = false;
6363
consoleLogEnabled = true;
6464
logger: winston.Logger;
6565

66+
private logPath: string;
67+
private fileTransportAdded = false;
68+
private fileLogLevel: string = LogLevel.DEBUG;
69+
6670
constructor (logDir: string) {
6771
const filename = `${getFormattedTimestamp()}.log`;
68-
const logPath = path.join(logDir, filename);
72+
this.logPath = path.join(logDir, filename);
6973

7074
this.logger = winston.createLogger({
7175
level: 'debug',
@@ -77,12 +81,6 @@ export class LogWrapper implements ILogWrapper {
7781
})
7882
),
7983
transports: [
80-
new transports.File({
81-
filename: logPath,
82-
level: 'debug',
83-
maxsize: 5 * 1024 * 1024, // 5MB
84-
maxFiles: 5,
85-
}),
8684
new transports.Console({
8785
format: format.combine(
8886
format.colorize(),
@@ -107,7 +105,7 @@ export class LogWrapper implements ILogWrapper {
107105
this.deleteOldLogFile(filePath, oneWeekAgo);
108106
});
109107
}).catch((err) => {
110-
this.logger.error('Failed to read log directory', err);
108+
this.logError('Failed to read log directory', err);
111109
});
112110
}
113111

@@ -117,21 +115,22 @@ export class LogWrapper implements ILogWrapper {
117115
fs.unlink(filePath).catch((err) => {
118116
if (err) {
119117
if (err.code === 'ENOENT') {
120-
this.logger.warn(`File already deleted: ${filePath}`);
118+
this.logWarn(`File already deleted: ${filePath}`);
121119
} else {
122-
this.logger.error('Failed to delete old log file', err);
120+
this.logError('Failed to delete old log file', err);
123121
}
124122
} else {
125-
this.logger.info(`Deleted old log file: ${filePath}`);
123+
this.log(`Deleted old log file: ${filePath}`);
126124
}
127125
});
128126
}
129127
}).catch((err) => {
130-
this.logger.error('Failed to get file stats', err);
128+
this.logError('Failed to get file stats', err);
131129
});
132130
}
133131

134132
setFileAndConsoleLogLevel (fileLogLevel: LogLevel, consoleLogLevel: LogLevel) {
133+
this.fileLogLevel = fileLogLevel;
135134
this.logger.transports.forEach((transport) => {
136135
if (transport instanceof transports.File) {
137136
transport.level = fileLogLevel;
@@ -148,6 +147,15 @@ export class LogWrapper implements ILogWrapper {
148147

149148
setFileLogEnabled (isEnabled: boolean) {
150149
this.fileLogEnabled = isEnabled;
150+
if (isEnabled && !this.fileTransportAdded) {
151+
this.fileTransportAdded = true;
152+
this.logger.add(new transports.File({
153+
filename: this.logPath,
154+
level: this.fileLogLevel,
155+
maxsize: 5 * 1024 * 1024, // 5MB
156+
maxFiles: 5,
157+
}));
158+
}
151159
this.logger.transports.forEach((transport) => {
152160
if (transport instanceof transports.File) {
153161
transport.silent = !isEnabled;
@@ -178,14 +186,16 @@ export class LogWrapper implements ILogWrapper {
178186
}
179187

180188
_log (level: LogLevel, ...args: any[]) {
181-
const message = this.formatMsg(args);
182-
if (this.consoleLogEnabled && this.fileLogEnabled) {
183-
this.logger.log(level, message);
184-
} else if (this.consoleLogEnabled) {
185-
this.logger.log(level, message);
186-
} else if (this.fileLogEnabled) {
187-
// eslint-disable-next-line no-control-regex
188-
this.logger.log(level, message.replace(/\x1B[@-_][0-?]*[ -/]*[@-~]/g, ''));
189+
if (this.consoleLogEnabled || this.fileLogEnabled) {
190+
const message = this.formatMsg(args);
191+
if (this.consoleLogEnabled && this.fileLogEnabled) {
192+
this.logger.log(level, message);
193+
} else if (this.consoleLogEnabled) {
194+
this.logger.log(level, message);
195+
} else if (this.fileLogEnabled) {
196+
// eslint-disable-next-line no-control-regex
197+
this.logger.log(level, message.replace(/\x1B[@-_][0-?]*[ -/]*[@-~]/g, ''));
198+
}
189199
}
190200
logSubscription.notify(JSON.stringify({ level, message }));
191201
}

0 commit comments

Comments
 (0)