Skip to content

Commit

Permalink
fix: remove array type for label and remove verbose level (#795)
Browse files Browse the repository at this point in the history
  • Loading branch information
czy88840616 committed Jan 8, 2021
1 parent 5ee1cf4 commit 622163c
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 16 deletions.
19 changes: 13 additions & 6 deletions packages/logger/src/format.ts
@@ -1,19 +1,25 @@
import { format } from 'winston';
import { inspect, types } from 'util';
import { IMidwayLogger } from './interface';
const { LEVEL, MESSAGE, SPLAT } = require('triple-beam');

export const displayCommonMessage = format((info, opts: {
uppercaseLevel?: boolean;
defaultMeta?: {[key: string]: any};
defaultLabel?: string;
defaultMeta?: object;
target?: IMidwayLogger;
}) => {
if (!info.pid) {
info.pid = process.pid;
}

if (!info.LEVEL && opts.uppercaseLevel) {
if (!info.LEVEL) {
info.LEVEL = info.level.toUpperCase();
}

if (!info.defaultLabel) {
info.defaultLabel = opts.defaultLabel || opts.target?.getDefaultLabel() || '';
}

if (info instanceof Error) {
// 参数只是 error 的情况
return Object.assign({
Expand All @@ -25,7 +31,8 @@ export const displayCommonMessage = format((info, opts: {
stack: info.stack,
pid: info.pid,
LEVEL: info.LEVEL,
}, opts.defaultMeta);
defaultLabel: info.defaultLabel,
}, (opts.defaultMeta || opts.target?.getDefaultMeta() || {}));
}

// 处理数组,Map,Set 的 message
Expand All @@ -49,7 +56,7 @@ export const displayCommonMessage = format((info, opts: {
}
}

return Object.assign(info, opts.defaultMeta);
return Object.assign(info, (opts.defaultMeta || opts.target?.getDefaultMeta() || {}));
});

function joinLoggerLabel(labelSplit, ...labels) {
Expand All @@ -71,7 +78,7 @@ export const displayLabels = format((info, opts) => {
opts.labelSplit = opts.labelSplit || ':';
info.labelText = joinLoggerLabel(
opts.labelSplit,
...opts.defaultLabels,
info.defaultLabel,
...[].concat(info.label)
);
return info;
Expand Down
6 changes: 5 additions & 1 deletion packages/logger/src/interface.ts
Expand Up @@ -15,9 +15,13 @@ export interface IMidwayLogger extends ILogger {
disableError();
enableError();
updateLevel(level: LoggerLevel);
updateDefaultLabel(defaultLabel: string);
updateDefaultMeta(defaultMeta: object);
getDefaultLabel(): string;
getDefaultMeta(): object;
}

export type LoggerLevel = 'silly' | 'debug' | 'verbose' | 'info' | 'warn' | 'error';
export type LoggerLevel = 'silly' | 'debug' | 'info' | 'warn' | 'error';

export interface LoggerOptions {
format?: logform.Format;
Expand Down
36 changes: 27 additions & 9 deletions packages/logger/src/logger.ts
@@ -1,6 +1,6 @@
import { createLogger, transports, Logger, format } from 'winston';
import * as DailyRotateFileTransport from 'winston-daily-rotate-file';
import { DelegateLoggerOptions, LoggerLevel, LoggerOptions } from './interface';
import { DelegateLoggerOptions, LoggerLevel, LoggerOptions, IMidwayLogger } from './interface';
import { DelegateTransport, EmptyTransport } from './transport';
import { displayLabels, displayCommonMessage } from './format';
import * as os from 'os';
Expand All @@ -12,12 +12,13 @@ export const EmptyLogger: Logger = createLogger().constructor as Logger;
/**
* base logger with console transport and file transport
*/
export class MidwayBaseLogger extends EmptyLogger {
export class MidwayBaseLogger extends EmptyLogger implements IMidwayLogger {
consoleTransport;
fileTransport;
errTransport;
loggerOptions: LoggerOptions;
labels = [];
defaultLabel: string = '';
defaultMetadata: object = {};

constructor(options: LoggerOptions = {}) {
super(options);
Expand All @@ -28,7 +29,11 @@ export class MidwayBaseLogger extends EmptyLogger {
}
this.loggerOptions = options;
if (this.loggerOptions.defaultLabel) {
this.labels.push(this.loggerOptions.defaultLabel);
this.defaultLabel = this.loggerOptions.defaultLabel;
}

if (this.loggerOptions.defaultMeta) {
this.defaultMetadata = this.loggerOptions.defaultMeta;
}

if(this.loggerOptions.format) {
Expand Down Expand Up @@ -120,16 +125,21 @@ export class MidwayBaseLogger extends EmptyLogger {
this.fileTransport.level = level;
}

updateDefaultLabel(defaultLabel: string) {
this.defaultLabel = defaultLabel;
}

updateDefaultMeta(defaultMetadata: object) {
this.defaultMetadata = defaultMetadata;
}

getDefaultLoggerConfigure() {
return {
format: format.combine(
displayCommonMessage({
uppercaseLevel: true,
defaultMeta: this.loggerOptions.defaultMeta,
}),
displayLabels({
defaultLabels: this.labels,
target: this,
}),
displayLabels(),
format.timestamp({
format: 'YYYY-MM-DD HH:mm:ss,SSS',
}),
Expand All @@ -143,6 +153,14 @@ export class MidwayBaseLogger extends EmptyLogger {
),
};
}

getDefaultLabel(): string {
return this.defaultLabel;
}

getDefaultMeta(): object {
return this.defaultMetadata;
}
}

/**
Expand Down
12 changes: 12 additions & 0 deletions packages/logger/test/index.test.ts
Expand Up @@ -260,9 +260,18 @@ describe('/test/index.test.ts', () => {
logger.error('first message', new Error('my error'), {
group: 'bbb'
});

logger.updateDefaultMeta({
name: 'my-another-site',
group: 'my-another-group'
});

logger.error('second message', new Error('my error'));

await sleep();
expect(fileExists(join(logsDir, 'test-logger.log'))).toBeTruthy();
expect(includeContent(join(logsDir, 'test-logger.log'), 'bbb.my-site error first message my error')).toBeTruthy();
expect(includeContent(join(logsDir, 'test-logger.log'), 'my-another-group.my-another-site error second message Error: my error')).toBeTruthy();

const customFormatLogger = createLogger<IMidwayLogger>('testLogger1', {
dir: logsDir,
Expand Down Expand Up @@ -330,10 +339,13 @@ describe('/test/index.test.ts', () => {
});

logger.error('test console error');
logger.updateDefaultLabel('sandbox');
logger.info('test change label');

await sleep();
expect(fileExists(join(logsDir, 'test-logger.log'))).toBeTruthy();
expect(includeContent(join(logsDir, 'test-logger.log'), '[main label] test console error')).toBeTruthy();
expect(includeContent(join(logsDir, 'test-logger.log'), '[sandbox] test change label')).toBeTruthy();
await removeFileOrDir(logsDir);
});

Expand Down

0 comments on commit 622163c

Please sign in to comment.