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

This commit is contained in:
まっちゃとーにゅ 2024-01-08 20:26:39 +09:00 committed by GitHub
parent 02cd74d2dc
commit 2fb3924075
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
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'); const themeColor = chalk.hex('#86b300');
function greet() { function greet() {
if (!envOption.quiet) { if (!envOption.quiet && !envOption.logJson) {
//#region Misskey logo //#region Misskey logo
const v = `v${meta.version}`; const v = `v${meta.version}`;
console.log(themeColor(' _____ _ _ ')); console.log(themeColor(' _____ _ _ '));
@ -46,7 +46,7 @@ function greet() {
} }
bootLogger.info('Welcome to Misskey!'); 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, noDaemons: false,
disableClustering: false, disableClustering: false,
verbose: false, verbose: false,
logJson: false,
withLogTime: false, withLogTime: false,
quiet: false, quiet: false,
}; };

View file

@ -41,7 +41,7 @@ export default class Logger {
@bindThis @bindThis
private log(level: Level, message: string, data?: Record<string, any> | null, important = false, subContexts: Context[] = [], store = true): void { 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 (!this.store) store = false;
if (level === 'debug') store = false; if (level === 'debug') store = false;
@ -50,6 +50,19 @@ export default class Logger {
return; 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 time = dateFormat(new Date(), 'HH:mm:ss');
const worker = cluster.isPrimary ? '*' : cluster.worker!.id; const worker = cluster.isPrimary ? '*' : cluster.worker!.id;
const l = const l =