Skip to content

Commit 11f5711

Browse files
authored
fix: audit dir and compatible with old configurations (#107)
* fix: audit dir * fix: case * docs: update
1 parent 3245d3a commit 11f5711

File tree

8 files changed

+342
-28
lines changed

8 files changed

+342
-28
lines changed

BREAKING-3.md

+8-1
Original file line numberDiff line numberDiff line change
@@ -171,4 +171,11 @@ const newLoggerConfig = formatLegacyLoggerOptions({
171171

172172
~~注意,这个方法只能转换老的配置,如果配置中同时包含新老配置,则新配置不会有任何变化。~~
173173

174-
当前版本已经可以同时支持新老配置,不需要转换了,如果新配置和老配置同时存在,老配置会忽略,你可以使用 `formatLegacyLoggerOptions` 方法测试转换后的结果。
174+
当前版本已经可以同时支持新老配置,不需要自行转换了,如可以使用 `formatLegacyLoggerOptions` 方法测试转换后的结果。
175+
176+
转换逻辑如下:
177+
178+
* 1、如果都是新配置,则不做任何处理
179+
* 2、如果配置中包含 `enableXXXX` 或者 `disableXXXX`,则会优先处理,即使存在 transports 的配置
180+
* 3、当新老配置同时存在时,老配置会被忽略,比如 dir 和 transports 中的 dir,则 transports 中的 dir 优先级更高
181+
* 4、转换完成后,如果 transports 中缺少必要的配置,比如 file/error/json 中缺少 dir 和 fileLogName,则会移除这个 Transport

src/factory.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import {
22
ContextLoggerOptions,
33
ILogger,
4+
LegacyLoggerOptions,
45
LoggerFactoryOptions,
56
LoggerOptions,
67
} from './interface';
@@ -15,7 +16,10 @@ export class LoggerFactory extends Map<string, ILogger> {
1516
super();
1617
}
1718

18-
createLogger(name: string, options: LoggerOptions): ILogger {
19+
createLogger(
20+
name: string,
21+
options: LoggerOptions & LegacyLoggerOptions
22+
): ILogger {
1923
if (!this.has(name)) {
2024
debug('[logger]: Create logger "%s" with options %j', name, options);
2125
const logger = new MidwayLogger(

src/index.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {
33
ConsoleTransportOptions,
44
FileTransportOptions,
55
ILogger,
6+
LegacyLoggerOptions,
67
LoggerOptions,
78
} from './interface';
89
import { MidwayLogger } from './logger';
@@ -22,7 +23,7 @@ export const clearAllLoggers = () => {
2223
};
2324
export const createLogger = <T = ILogger>(
2425
name: string,
25-
options: LoggerOptions = {}
26+
options: LoggerOptions & LegacyLoggerOptions = {}
2627
): T => {
2728
return loggers.createLogger(name, options) as T;
2829
};

src/interface.ts

+45
Original file line numberDiff line numberDiff line change
@@ -187,14 +187,17 @@ export interface LegacyLoggerOptions {
187187
level?: LoggerLevel;
188188
/**
189189
* level for console logger
190+
* @deprecated
190191
*/
191192
consoleLevel?: LoggerLevel;
192193
/**
193194
* level for file logger
195+
* @deprecated
194196
*/
195197
fileLevel?: LoggerLevel;
196198
/**
197199
* level for json logger
200+
* @deprecated
198201
*/
199202
jsonLevel?: LoggerLevel;
200203
/**
@@ -207,18 +210,22 @@ export interface LegacyLoggerOptions {
207210
contextFormat?: LoggerFormat;
208211
/**
209212
* format for json logger
213+
* @deprecated
210214
*/
211215
jsonFormat?: LoggerFormat;
212216
/**
213217
* The directory where file logger will be output
218+
* @deprecated
214219
*/
215220
dir?: string;
216221
/**
217222
* The directory where error logger will be output, if not set, use dir to instead.
223+
* @deprecated
218224
*/
219225
errorDir?: string;
220226
/**
221227
* The directory where json logger will be output, if not set, use dir to instead.
228+
* @deprecated
222229
*/
223230
jsonDir?: string;
224231
/**
@@ -227,46 +234,57 @@ export interface LegacyLoggerOptions {
227234
aliasName?: string;
228235
/**
229236
* Output log name for file logger
237+
* @deprecated
230238
*/
231239
fileLogName?: string;
232240
/**
233241
* Output log name for error logger
242+
* @deprecated
234243
*/
235244
errorLogName?: string;
236245
/**
237246
* Output log name for json logger
247+
* @deprecated
238248
*/
239249
jsonLogName?: string;
240250
/**
241251
* Enable console transport, default is true
252+
* @deprecated
242253
*/
243254
enableConsole?: boolean;
244255
/**
245256
* Enable console transport, default is true
257+
* @deprecated
246258
*/
247259
enableFile?: boolean;
248260
/**
249261
* Enable console transport, default is true
262+
* @deprecated
250263
*/
251264
enableError?: boolean;
252265
/**
253266
* Enable json transport, default is false
267+
* @deprecated
254268
*/
255269
enableJSON?: boolean;
256270
/**
257271
* disable symlink for file, error and json logger
272+
* @deprecated
258273
*/
259274
disableSymlink?: boolean;
260275
/**
261276
* disable symlink for file logger
277+
* @deprecated
262278
*/
263279
disableFileSymlink?: boolean;
264280
/**
265281
* disable symlink for error logger
282+
* @deprecated
266283
*/
267284
disableErrorSymlink?: boolean;
268285
/**
269286
* disable symlink for json logger
287+
* @deprecated
270288
*/
271289
disableJSONSymlink?: boolean;
272290
/**
@@ -276,18 +294,22 @@ export interface LegacyLoggerOptions {
276294
* If using the units, add 'k', 'm', or 'g' as the suffix.
277295
* The units need to directly follow the number.
278296
* default is 200m
297+
* @deprecated
279298
*/
280299
maxSize?: string;
281300
/**
282301
* max file size for file logger
302+
* @deprecated
283303
*/
284304
fileMaxSize?: string;
285305
/**
286306
* max file size for error logger
307+
* @deprecated
287308
*/
288309
errMaxSize?: string;
289310
/**
290311
* max file size for json logger
312+
* @deprecated
291313
*/
292314
jsonMaxSize?: string;
293315
/**
@@ -298,34 +320,52 @@ export interface LegacyLoggerOptions {
298320
* It won't delete any file not contained in it.
299321
* It can be a number of files or number of days
300322
* default is 31d
323+
* @deprecated
301324
*/
302325
maxFiles?: number | string;
326+
/**
327+
* max files for file logger
328+
* @deprecated
329+
*/
303330
fileMaxFiles?: number | string;
331+
/**
332+
* max files for error logger
333+
* @deprecated
334+
*/
304335
errMaxFiles?: number | string;
336+
/**
337+
* max files for json logger
338+
* @deprecated
339+
*/
305340
jsonMaxFiles?: number | string;
306341
/**
307342
* end of line string for file and error logger
308343
*/
309344
eol?: string;
310345
/**
311346
* end of line string for json logger
347+
* @deprecated
312348
*/
313349
jsonEol?: string;
314350
/**
315351
* A boolean to define whether or not to gzip archived log files.
316352
* for file, error and json logger
353+
* @deprecated
317354
*/
318355
zippedArchive?: boolean;
319356
/**
320357
* gzip options for file logger
358+
* @deprecated
321359
*/
322360
fileZippedArchive?: boolean;
323361
/**
324362
* gzip options for error logger
363+
* @deprecated
325364
*/
326365
errZippedArchive?: boolean;
327366
/**
328367
* gzip options for json logger
368+
* @deprecated
329369
*/
330370
jsonZippedArchive?: boolean;
331371
/**
@@ -334,22 +374,27 @@ export interface LegacyLoggerOptions {
334374
* For example, if your datePattern is simply 'HH' you will end up with 24 log files that are picked up and appended to every day.
335375
* default: 'YYYY-MM-DD'
336376
* for file, error and json logger
377+
* @deprecated
337378
*/
338379
datePattern?: string;
339380
/**
340381
* date pattern for file logger
382+
* @deprecated
341383
*/
342384
fileDatePattern?: string;
343385
/**
344386
* date pattern for error logger
387+
* @deprecated
345388
*/
346389
errDatePattern?: string;
347390
/**
348391
* date pattern for json logger
392+
* @deprecated
349393
*/
350394
jsonDatePattern?: string;
351395
/**
352396
* A directory of the audit file with absolute path.
397+
* @deprecated
353398
*/
354399
auditFileDir?: string;
355400
/**

src/logger.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {
33
ContextLoggerOptions,
44
ILogger,
55
ITransport,
6+
LegacyLoggerOptions,
67
LoggerLevel,
78
LoggerOptions,
89
LogMeta,
@@ -25,7 +26,7 @@ export class MidwayLogger implements ILogger {
2526
private closeHandlers: Array<() => void> = [];
2627
protected options: LoggerOptions;
2728

28-
constructor(options: LoggerOptions = {}) {
29+
constructor(options: LoggerOptions & LegacyLoggerOptions = {}) {
2930
options = formatLegacyLoggerOptions(options);
3031
this.options = options;
3132
this.options.level = this.options.level || 'silly';

src/transport/file.ts

+11-3
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,22 @@ export class FileTransport
5757
zippedArchive: false,
5858
} as Omit<StreamOptions, 'filename'>;
5959

60+
if (!this.options.auditFileDir) {
61+
options.auditFileDir = this.options.dir;
62+
}
63+
64+
if (!path.isAbsolute(this.options.auditFileDir)) {
65+
options.auditFileDir = path.join(this.options.dir, options.auditFileDir);
66+
}
67+
6068
this.logStream = FileStreamRotatorManager.getStream({
6169
...defaultStreamOptions,
6270
filename: path.join(this.options.dir, this.options.fileLogName),
63-
size: getMaxSize(options.maxSize || '200m'),
71+
size: getMaxSize(this.options.maxSize || '200m'),
6472
symlinkName: this.options.fileLogName,
6573
auditFile: path.join(
66-
options.auditFileDir || this.options.dir,
67-
'.' + hash(options) + '-audit.json'
74+
options.auditFileDir,
75+
'.' + hash(this.options) + '-audit.json'
6876
),
6977
...options,
7078
});

0 commit comments

Comments
 (0)