1+ import { Injectable , LoggerService } from '@nestjs/common' ;
2+ import { createLogger , Logger } from 'winston' ;
3+
4+ import { loggerConfig } from './config/logger.config' ;
5+
6+ @Injectable ( )
7+ export class LoggingService implements LoggerService {
8+ private readonly logger : Logger = createLogger ( loggerConfig ) ;
9+
10+ log ( message : unknown , context ?: string ) : void {
11+ this . logger . info ( message , { context } ) ;
12+ }
13+
14+ error (
15+ message : unknown ,
16+ trace ?: string ,
17+ context ?: string ,
18+ ) : void {
19+ this . logger . error ( message , {
20+ trace,
21+ context,
22+ } ) ;
23+ }
24+
25+ warn ( message : unknown , context ?: string ) : void {
26+ this . logger . warn ( message , { context } ) ;
27+ }
28+
29+ debug ( message : unknown , context ?: string ) : void {
30+ this . logger . debug ( message , { context } ) ;
31+ }
32+
33+ verbose (
34+ message : unknown ,
35+ context ?: string ,
36+ ) : void {
37+ this . logger . verbose ( message , { context } ) ;
38+ }
39+
40+ metric (
41+ name : string ,
42+ value : number ,
43+ metadata ?: Record < string , unknown > ,
44+ ) {
45+ this . logger . info ( {
46+ type : 'metric' ,
47+ name,
48+ value,
49+ metadata,
50+ timestamp : new Date ( ) . toISOString ( ) ,
51+ } ) ;
52+ }
53+
54+ audit (
55+ action : string ,
56+ metadata ?: Record < string , unknown > ,
57+ ) {
58+ this . logger . info ( {
59+ type : 'audit' ,
60+ action,
61+ metadata,
62+ timestamp : new Date ( ) . toISOString ( ) ,
63+ } ) ;
64+ }
65+
66+ exception (
67+ error : Error ,
68+ metadata ?: Record < string , unknown > ,
69+ ) {
70+ this . logger . error ( {
71+ type : 'exception' ,
72+ name : error . name ,
73+ message : error . message ,
74+ stack : error . stack ,
75+ metadata,
76+ timestamp : new Date ( ) . toISOString ( ) ,
77+ } ) ;
78+ }
79+
80+ health ( ) {
81+ return {
82+ logger : 'healthy' ,
83+ level : process . env . LOG_LEVEL ?? 'info' ,
84+ timestamp : new Date ( ) . toISOString ( ) ,
85+ } ;
86+ }
87+ }
0 commit comments