no idea- added loki and other stuff to market-data-gateway, also added config lib
This commit is contained in:
parent
b957fb99aa
commit
1b71fc87ab
72 changed files with 6178 additions and 153 deletions
|
|
@ -1,6 +1,20 @@
|
|||
/**
|
||||
* Logger utility with consistent formatting and log levels
|
||||
* Supports console and Loki logging
|
||||
*/
|
||||
import { loggingConfig } from '@stock-bot/config';
|
||||
import { LokiClient } from './lokiClient';
|
||||
|
||||
// Singleton Loki client
|
||||
let lokiClient: LokiClient | null = null;
|
||||
|
||||
function getLokiClient(): LokiClient {
|
||||
if (!lokiClient) {
|
||||
lokiClient = new LokiClient(loggingConfig);
|
||||
}
|
||||
return lokiClient;
|
||||
}
|
||||
|
||||
export class Logger {
|
||||
constructor(private serviceName: string, private level: LogLevel = LogLevel.INFO) {}
|
||||
|
||||
|
|
@ -26,22 +40,51 @@ export class Logger {
|
|||
const timestamp = new Date().toISOString();
|
||||
const levelStr = LogLevel[level].padEnd(5);
|
||||
|
||||
const logMessage = `[${timestamp}] [${levelStr}] [${this.serviceName}] ${message}`;
|
||||
const formattedArgs = args.length ? this.formatArgs(args) : '';
|
||||
const fullMessage = `${message}${formattedArgs}`;
|
||||
const logMessage = `[${timestamp}] [${levelStr}] [${this.serviceName}] ${fullMessage}`;
|
||||
|
||||
switch (level) {
|
||||
case LogLevel.ERROR:
|
||||
console.error(logMessage, ...args);
|
||||
break;
|
||||
case LogLevel.WARN:
|
||||
console.warn(logMessage, ...args);
|
||||
break;
|
||||
case LogLevel.INFO:
|
||||
console.info(logMessage, ...args);
|
||||
break;
|
||||
case LogLevel.DEBUG:
|
||||
default:
|
||||
console.debug(logMessage, ...args);
|
||||
break;
|
||||
// Console logging
|
||||
if (loggingConfig.console) {
|
||||
switch (level) {
|
||||
case LogLevel.ERROR:
|
||||
console.error(logMessage);
|
||||
break;
|
||||
case LogLevel.WARN:
|
||||
console.warn(logMessage);
|
||||
break;
|
||||
case LogLevel.INFO:
|
||||
console.info(logMessage);
|
||||
break;
|
||||
case LogLevel.DEBUG:
|
||||
default:
|
||||
console.debug(logMessage);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Loki logging
|
||||
try {
|
||||
const loki = getLokiClient();
|
||||
loki.log(LogLevel[level].toLowerCase(), fullMessage, this.serviceName);
|
||||
} catch (error) {
|
||||
console.error('Failed to send log to Loki:', error);
|
||||
}
|
||||
}
|
||||
|
||||
private formatArgs(args: any[]): string {
|
||||
try {
|
||||
return args.map(arg => {
|
||||
if (arg instanceof Error) {
|
||||
return ` ${arg.message}\n${arg.stack}`;
|
||||
} else if (typeof arg === 'object') {
|
||||
return ` ${JSON.stringify(arg)}`;
|
||||
} else {
|
||||
return ` ${arg}`;
|
||||
}
|
||||
}).join('');
|
||||
} catch (error) {
|
||||
return ` [Error formatting log arguments: ${error}]`;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue