feat(logging): JSON形式の構造化ログでログを出力できるように (MisskeyIO#346)

This commit is contained in:
まっちゃとーにゅ 2024-01-08 20:26:39 +09:00 committed by tamaina
parent 18f13cea98
commit ec914d9f0c
3 changed files with 17 additions and 3 deletions

View File

@ -28,7 +28,7 @@ const bootLogger = logger.createSubLogger('boot', 'magenta', false);
const themeColor = chalk.hex('#86b300');
function greet() {
if (!envOption.quiet) {
if (!envOption.quiet && !envOption.logJson) {
//#region Misskey logo
const v = `v${meta.version}`;
console.log(themeColor(' _____ _ _ '));
@ -46,7 +46,7 @@ function greet() {
}
bootLogger.info('Welcome to Misskey!');
bootLogger.info(`Misskey v${meta.version}`, null, true);
bootLogger.info(`Misskey v${meta.version}`, { version: meta.version, hostname: os.hostname(), pid: process.pid }, true);
}
/**

View File

@ -9,6 +9,7 @@ const envOption = {
noDaemons: false,
disableClustering: false,
verbose: false,
logJson: false,
withLogTime: false,
quiet: false,
};

View File

@ -42,7 +42,7 @@ export default class Logger {
@bindThis
private log(level: Level, message: string, data?: Record<string, any> | null, important = false, subContexts: Context[] = [], store = true): void {
if (envOption.quiet) return;
if (envOption.quiet && !envOption.logJson) return;
if (!this.store) store = false;
if (level === 'debug') store = false;
@ -51,6 +51,19 @@ export default class Logger {
return;
}
if (envOption.logJson) {
console.log(JSON.stringify({
time: new Date().toISOString(),
level: level,
message: message,
data: data,
important: important,
context: [this.context].concat(subContexts).join('.'),
cluster: cluster.isPrimary ? 'primary' : `worker-${cluster.worker!.id}`,
}));
return;
}
const time = dateFormat(new Date(), 'HH:mm:ss');
const worker = cluster.isPrimary ? '*' : cluster.worker!.id;
const l =