aegis-auth
Version:
A credentials-based auth solution for Next.js (and other Node projects) with IP rate-limiting, account lockouts, and sessions in DB.
73 lines • 2.29 kB
JavaScript
import { LogLevel } from "../types";
export class ConsoleLogger {
constructor(level) {
this.logLevel = LogLevel.Info;
if (level) {
this.logLevel = level;
}
}
debug(message, context) {
if (this.shouldLog(LogLevel.Debug)) {
this.logWithLevel(LogLevel.Debug, message, context);
}
}
info(message, context) {
if (this.shouldLog(LogLevel.Info)) {
this.logWithLevel(LogLevel.Info, message, context);
}
}
warn(message, context) {
if (this.shouldLog(LogLevel.Warn)) {
this.logWithLevel(LogLevel.Warn, message, context);
}
}
error(message, context) {
if (this.shouldLog(LogLevel.Error)) {
this.logWithLevel(LogLevel.Error, message, context);
}
}
securityEvent(eventName, context) {
if (this.shouldLog(LogLevel.Security)) {
this.logWithLevel(LogLevel.Security, eventName, context);
}
}
shouldLog(level) {
const currentLevelValue = this.getLogLevelValue(this.logLevel);
const messageLevelValue = this.getLogLevelValue(level);
return messageLevelValue >= currentLevelValue;
}
getLogLevelValue(level) {
switch (level) {
case LogLevel.Debug:
return 1;
case LogLevel.Info:
return 2;
case LogLevel.Warn:
return 3;
case LogLevel.Error:
return 4;
case LogLevel.Security:
return 5; // Security events are most important
default:
return 2; // Info level by default if unknown
}
}
logWithLevel(level, message, context) {
let logMessage = `[AegisAuth - ${level.toUpperCase()}] ${message}`;
if (context) {
logMessage += ` - Context: ${JSON.stringify(context)}`;
}
switch (level) {
case LogLevel.Error:
console.error(logMessage);
break;
case LogLevel.Warn:
console.warn(logMessage);
break;
default:
console.log(logMessage);
break;
}
}
}
//# sourceMappingURL=logger.js.map