mirror of
https://github.com/immich-app/immich.git
synced 2026-03-06 18:17:27 +03:00
47 lines
1.6 KiB
TypeScript
47 lines
1.6 KiB
TypeScript
import { ConsoleLogger, Injectable, Scope } from '@nestjs/common';
|
|
import { isLogLevelEnabled } from '@nestjs/common/services/utils/is-log-level-enabled.util';
|
|
import { ClsService } from 'nestjs-cls';
|
|
import { LogLevel } from 'src/config';
|
|
import { ILoggerRepository } from 'src/interfaces/logger.interface';
|
|
import { LogColor } from 'src/utils/logger-colors';
|
|
|
|
const LOG_LEVELS = [LogLevel.VERBOSE, LogLevel.DEBUG, LogLevel.LOG, LogLevel.WARN, LogLevel.ERROR, LogLevel.FATAL];
|
|
|
|
@Injectable({ scope: Scope.TRANSIENT })
|
|
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;
|
|
}
|
|
|
|
isLevelEnabled(level: LogLevel) {
|
|
return isLogLevelEnabled(level, LoggerRepository.logLevels);
|
|
}
|
|
|
|
setLogLevel(level: LogLevel): void {
|
|
LoggerRepository.logLevels = LOG_LEVELS.slice(LOG_LEVELS.indexOf(level));
|
|
}
|
|
|
|
protected formatContext(context: string): string {
|
|
let formattedContext = super.formatContext(context);
|
|
|
|
const correlationId = this.cls?.getId();
|
|
if (correlationId && this.isLevelEnabled(LogLevel.VERBOSE)) {
|
|
formattedContext += `[${correlationId}] `;
|
|
}
|
|
|
|
if (LoggerRepository.appName) {
|
|
formattedContext = LogColor.blue(`[${LoggerRepository.appName}] `) + formattedContext;
|
|
}
|
|
|
|
return formattedContext;
|
|
}
|
|
}
|