Skip to content

refactor(logger): use LogLevelThreshold constant inside Logger class #3133

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Sep 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 19 additions & 34 deletions packages/logger/src/Logger.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import type {
import type { Context, Handler } from 'aws-lambda';
import merge from 'lodash.merge';
import { EnvironmentVariablesService } from './config/EnvironmentVariablesService.js';
import { LogJsonIndent } from './constants.js';
import { LogJsonIndent, LogLevelThreshold } from './constants.js';
import type { LogFormatter } from './formatter/LogFormatter.js';
import type { LogItem } from './formatter/LogItem.js';
import { PowertoolsLogFormatter } from './formatter/PowertoolsLogFormatter.js';
Expand All @@ -23,7 +23,6 @@ import type {
LogItemExtraInput,
LogItemMessage,
LogLevel,
LogLevelThresholds,
LoggerInterface,
} from './types/Logger.js';
import type { PowertoolsLogData } from './types/logKeys.js';
Expand Down Expand Up @@ -120,21 +119,7 @@ class Logger extends Utility implements LoggerInterface {
/**
* Log level used internally by the current instance of Logger.
*/
private logLevel = 12;
/**
* Log level thresholds used internally by the current instance of Logger.
*
* The levels are in ascending order from the most verbose to the least verbose (no logs).
*/
private readonly logLevelThresholds: LogLevelThresholds = {
TRACE: 6,
DEBUG: 8,
INFO: 12,
WARN: 16,
ERROR: 20,
CRITICAL: 24,
SILENT: 28,
};
private logLevel: number = LogLevelThreshold.INFO;
/**
* Persistent log attributes that will be logged in all log items.
*/
Expand Down Expand Up @@ -170,7 +155,7 @@ class Logger extends Utility implements LoggerInterface {
*
* We keep this value to be able to reset the log level to the initial value when the sample rate is refreshed.
*/
#initialLogLevel = this.logLevelThresholds.INFO;
#initialLogLevel: number = LogLevelThreshold.INFO;
/**
* Replacer function used to serialize the log items.
*/
Expand Down Expand Up @@ -298,7 +283,7 @@ class Logger extends Utility implements LoggerInterface {
input: LogItemMessage,
...extraInput: LogItemExtraInput
): void {
this.processLogItem(this.logLevelThresholds.CRITICAL, input, extraInput);
this.processLogItem(LogLevelThreshold.CRITICAL, input, extraInput);
}

/**
Expand All @@ -308,7 +293,7 @@ class Logger extends Utility implements LoggerInterface {
* @param extraInput - The extra input to log.
*/
public debug(input: LogItemMessage, ...extraInput: LogItemExtraInput): void {
this.processLogItem(this.logLevelThresholds.DEBUG, input, extraInput);
this.processLogItem(LogLevelThreshold.DEBUG, input, extraInput);
}

/**
Expand All @@ -318,7 +303,7 @@ class Logger extends Utility implements LoggerInterface {
* @param extraInput - The extra input to log.
*/
public error(input: LogItemMessage, ...extraInput: LogItemExtraInput): void {
this.processLogItem(this.logLevelThresholds.ERROR, input, extraInput);
this.processLogItem(LogLevelThreshold.ERROR, input, extraInput);
}

/**
Expand Down Expand Up @@ -354,7 +339,7 @@ class Logger extends Utility implements LoggerInterface {
* @param extraInput - The extra input to log.
*/
public info(input: LogItemMessage, ...extraInput: LogItemExtraInput): void {
this.processLogItem(this.logLevelThresholds.INFO, input, extraInput);
this.processLogItem(LogLevelThreshold.INFO, input, extraInput);
}

/**
Expand Down Expand Up @@ -561,7 +546,7 @@ class Logger extends Utility implements LoggerInterface {
public setLogLevel(logLevel: LogLevel): void {
if (this.awsLogLevelShortCircuit(logLevel)) return;
if (this.isValidLogLevel(logLevel)) {
this.logLevel = this.logLevelThresholds[logLevel];
this.logLevel = LogLevelThreshold[logLevel];
} else {
throw new Error(`Invalid log level: ${logLevel}`);
}
Expand Down Expand Up @@ -599,7 +584,7 @@ class Logger extends Utility implements LoggerInterface {
* @param extraInput - The extra input to log.
*/
public trace(input: LogItemMessage, ...extraInput: LogItemExtraInput): void {
this.processLogItem(this.logLevelThresholds.TRACE, input, extraInput);
this.processLogItem(LogLevelThreshold.TRACE, input, extraInput);
}

/**
Expand All @@ -609,7 +594,7 @@ class Logger extends Utility implements LoggerInterface {
* @param extraInput - The extra input to log.
*/
public warn(input: LogItemMessage, ...extraInput: LogItemExtraInput): void {
this.processLogItem(this.logLevelThresholds.WARN, input, extraInput);
this.processLogItem(LogLevelThreshold.WARN, input, extraInput);
}

/**
Expand Down Expand Up @@ -684,11 +669,11 @@ class Logger extends Utility implements LoggerInterface {
private awsLogLevelShortCircuit(selectedLogLevel?: string): boolean {
const awsLogLevel = this.getEnvVarsService().getAwsLogLevel();
if (this.isValidLogLevel(awsLogLevel)) {
this.logLevel = this.logLevelThresholds[awsLogLevel];
this.logLevel = LogLevelThreshold[awsLogLevel];

if (
this.isValidLogLevel(selectedLogLevel) &&
this.logLevel > this.logLevelThresholds[selectedLogLevel]
this.logLevel > LogLevelThreshold[selectedLogLevel]
) {
this.warn(
`Current log level (${selectedLogLevel}) does not match AWS Lambda Advanced Logging Controls minimum log level (${awsLogLevel}). This can lead to data loss, consider adjusting them.`
Expand Down Expand Up @@ -800,7 +785,7 @@ class Logger extends Utility implements LoggerInterface {
*/
private getLogLevelNameFromNumber(logLevel: number): Uppercase<LogLevel> {
let found: Uppercase<LogLevel> | undefined;
for (const [key, value] of Object.entries(this.logLevelThresholds)) {
for (const [key, value] of Object.entries(LogLevelThreshold)) {
if (value === logLevel) {
found = key as Uppercase<LogLevel>;
break;
Expand All @@ -826,7 +811,7 @@ class Logger extends Utility implements LoggerInterface {
private isValidLogLevel(
logLevel?: LogLevel | string
): logLevel is Uppercase<LogLevel> {
return typeof logLevel === 'string' && logLevel in this.logLevelThresholds;
return typeof logLevel === 'string' && logLevel in LogLevelThreshold;
}

/**
Expand Down Expand Up @@ -854,7 +839,7 @@ class Logger extends Utility implements LoggerInterface {
log.prepareForPrint();

const consoleMethod =
logLevel === this.logLevelThresholds.CRITICAL
logLevel === LogLevelThreshold.CRITICAL
? 'error'
: (this.getLogLevelNameFromNumber(logLevel).toLowerCase() as keyof Omit<
LogFunction,
Expand Down Expand Up @@ -947,7 +932,7 @@ class Logger extends Utility implements LoggerInterface {
if (this.awsLogLevelShortCircuit(constructorLogLevel)) return;

if (this.isValidLogLevel(constructorLogLevel)) {
this.logLevel = this.logLevelThresholds[constructorLogLevel];
this.logLevel = LogLevelThreshold[constructorLogLevel];
this.#initialLogLevel = this.logLevel;

return;
Expand All @@ -956,14 +941,14 @@ class Logger extends Utility implements LoggerInterface {
?.getLogLevel()
?.toUpperCase();
if (this.isValidLogLevel(customConfigValue)) {
this.logLevel = this.logLevelThresholds[customConfigValue];
this.logLevel = LogLevelThreshold[customConfigValue];
this.#initialLogLevel = this.logLevel;

return;
}
const envVarsValue = this.getEnvVarsService()?.getLogLevel()?.toUpperCase();
if (this.isValidLogLevel(envVarsValue)) {
this.logLevel = this.logLevelThresholds[envVarsValue];
this.logLevel = LogLevelThreshold[envVarsValue];
this.#initialLogLevel = this.logLevel;

return;
Expand All @@ -990,7 +975,7 @@ class Logger extends Utility implements LoggerInterface {
this.powertoolsLogData.sampleRateValue = value;

if (
this.logLevel > this.logLevelThresholds.DEBUG &&
this.logLevel > LogLevelThreshold.DEBUG &&
value &&
randomInt(0, 100) / 100 <= value
) {
Expand Down
10 changes: 0 additions & 10 deletions packages/logger/src/types/Logger.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,6 @@ type LogLevel =
| (typeof LogLevelList)[keyof typeof LogLevelList]
| Lowercase<(typeof LogLevelList)[keyof typeof LogLevelList]>;

/**
* Type definition for the log level thresholds.
*
* Each log level has a corresponding number that represents its severity.
*/
type LogLevelThresholds = {
[key in Uppercase<LogLevel>]: number;
};

/**
* Type definition for a function that logs messages at different levels to the console.
*/
Expand Down Expand Up @@ -215,7 +206,6 @@ type LoggerInterface = {

export type {
Environment,
LogLevelThresholds,
LogAttributes,
LogLevel,
LogFunction,
Expand Down
1 change: 0 additions & 1 deletion packages/logger/src/types/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
export type {
Environment,
LogLevelThresholds,
LogAttributes,
LogLevel,
LogItemMessage,
Expand Down