My custom logger implementation
import {
CloudWatchLogsClient,
CreateLogGroupCommand,
CreateLogStreamCommand,
DescribeLogGroupsCommand,
DescribeLogStreamsCommand,
PutLogEventsCommand,
PutRetentionPolicyCommand,
} from '@aws-sdk/client-cloudwatch-logs'
import { ConsoleLogger, Injectable } from '@nestjs/common'
import { ConfigService } from '@nestjs/config'
import { EnvironmentVariables } from 'apps/env.validation'
@Injectable()
export class CustomLoggerService extends ConsoleLogger {
private cloudWatchClient: CloudWatchLogsClient
private logGroupName: string
private logStreamName: string
private retentionInDays: number
private sequenceToken: string | undefined
constructor(private configService: ConfigService<EnvironmentVariables>) {
super()
const env = configService.get<string>('NODE_ENV')
this.logGroupName = `/my-app-name/${configService.get<string>('NODE_ENV')}`
this.logStreamName = env
this.retentionInDays = env === 'production' ? -1 : 7
if (env === 'production') {
this.cloudWatchClient = new CloudWatchLogsClient({
region: configService.get<string>('AWS_DEFAULT_REGION'),
})
this.setupLogGroup()
this.setupLogStream()
}
}
private async setupLogStream() {
// setting up the log stream
}
private async setupLogGroup() {
// setting up the log group
}