immich/server/src/repositories/logger.repository.ts

50 lines
1.5 KiB
TypeScript
Raw Normal View History

2024-05-14 08:48:49 -04:00
import { ConsoleLogger, Injectable, Scope } from '@nestjs/common';
import { isLogLevelEnabled } from '@nestjs/common/services/utils/is-log-level-enabled.util';
import { ClsService } from 'nestjs-cls';
2024-09-27 10:28:42 -04:00
import { LogLevel } from 'src/enum';
import { ILoggerRepository } from 'src/interfaces/logger.interface';
import { LogColor } from 'src/utils/logger';
2024-05-14 08:48:49 -04:00
const LOG_LEVELS = [LogLevel.VERBOSE, LogLevel.DEBUG, LogLevel.LOG, LogLevel.WARN, LogLevel.ERROR, LogLevel.FATAL];
@Injectable({ scope: Scope.TRANSIENT })
2024-05-14 08:48:49 -04:00
export class LoggerRepository extends ConsoleLogger implements ILoggerRepository {
private static logLevels: LogLevel[] = [LogLevel.LOG, LogLevel.WARN, LogLevel.ERROR, LogLevel.FATAL];
constructor(private cls: ClsService) {
super(LoggerRepository.name);
}
private static appName?: string = undefined;
setAppName(name: string): void {
LoggerRepository.appName = name;
}
2024-05-14 08:48:49 -04:00
isLevelEnabled(level: LogLevel) {
return isLogLevelEnabled(level, LoggerRepository.logLevels);
}
setLogLevel(level: LogLevel | false): void {
LoggerRepository.logLevels = level ? LOG_LEVELS.slice(LOG_LEVELS.indexOf(level)) : [];
2024-05-14 08:48:49 -04:00
}
protected formatContext(context: string): string {
let prefix = LoggerRepository.appName || '';
if (context) {
prefix += (prefix ? ':' : '') + context;
}
const correlationId = this.cls?.getId();
if (correlationId) {
prefix += `~${correlationId}`;
}
if (!prefix) {
return '';
}
return LogColor.yellow(`[${prefix}]`) + ' ';
}
}