82 lines
2.5 KiB
TypeScript
82 lines
2.5 KiB
TypeScript
import type { LogLevel } from '@core/automation/application/ports/LoggerLogLevel';
|
|
|
|
export type LogEnvironment = 'development' | 'production' | 'test';
|
|
|
|
export interface LoggingEnvironmentConfig {
|
|
level: LogLevel;
|
|
prettyPrint: boolean;
|
|
fileOutput: boolean;
|
|
filePath?: string;
|
|
maxFiles?: number;
|
|
maxFileSize?: string;
|
|
}
|
|
|
|
/**
|
|
* Load logging configuration from environment variables.
|
|
*
|
|
* Environment variables:
|
|
* - NODE_ENV: 'development' | 'production' | 'test' (default: 'development')
|
|
* - LOG_LEVEL: Override log level (optional)
|
|
* - LOG_FILE_PATH: Path for log files in production (default: './logs/gridpilot')
|
|
* - LOG_MAX_FILES: Max rotated files to keep (default: 7)
|
|
* - LOG_MAX_SIZE: Max file size before rotation (default: '10m')
|
|
*
|
|
* @returns LoggingEnvironmentConfig with parsed environment values
|
|
*/
|
|
export function loadLoggingConfig(): LoggingEnvironmentConfig {
|
|
const envValue = process.env.NODE_ENV;
|
|
const environment = isValidLogEnvironment(envValue) ? envValue : 'development';
|
|
|
|
const defaults = getDefaultsForEnvironment(environment);
|
|
|
|
const levelOverride = process.env.LOG_LEVEL;
|
|
const level = isValidLogLevel(levelOverride) ? levelOverride : defaults.level;
|
|
|
|
return {
|
|
level,
|
|
prettyPrint: defaults.prettyPrint,
|
|
fileOutput: defaults.fileOutput,
|
|
filePath: process.env.LOG_FILE_PATH || './logs/gridpilot',
|
|
maxFiles: parseIntSafe(process.env.LOG_MAX_FILES, 7),
|
|
maxFileSize: process.env.LOG_MAX_SIZE || '10m',
|
|
};
|
|
}
|
|
|
|
function getDefaultsForEnvironment(env: LogEnvironment): LoggingEnvironmentConfig {
|
|
switch (env) {
|
|
case 'development':
|
|
return {
|
|
level: 'debug',
|
|
prettyPrint: true,
|
|
fileOutput: false,
|
|
};
|
|
case 'production':
|
|
return {
|
|
level: 'info',
|
|
prettyPrint: false,
|
|
fileOutput: true,
|
|
};
|
|
case 'test':
|
|
return {
|
|
level: 'warn',
|
|
prettyPrint: false,
|
|
fileOutput: false,
|
|
};
|
|
}
|
|
}
|
|
|
|
function isValidLogEnvironment(value: string | undefined): value is LogEnvironment {
|
|
return value === 'development' || value === 'production' || value === 'test';
|
|
}
|
|
|
|
function isValidLogLevel(value: string | undefined): value is LogLevel {
|
|
return value === 'debug' || value === 'info' || value === 'warn' || value === 'error' || value === 'fatal';
|
|
}
|
|
|
|
function parseIntSafe(value: string | undefined, defaultValue: number): number {
|
|
if (value === undefined || value === '') {
|
|
return defaultValue;
|
|
}
|
|
const parsed = parseInt(value, 10);
|
|
return isNaN(parsed) ? defaultValue : parsed;
|
|
} |