1
0
mirror of https://github.com/mortdeus/legacy-cc.git synced 2026-09-24 21:05:05 +00:00
Files
mortdeus_legacy-cc/2_copy trading bot(node) using gRPC/utils/logger.js
cryptoking1106 086ec82844 init
2025-09-18 18:12:50 -03:00

175 lines
4.3 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import winston from 'winston';
import DailyRotateFile from 'winston-daily-rotate-file';
import chalk from 'chalk';
import { config } from '../config.js';
// Custom format for console output
const consoleFormat = winston.format.combine(
winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
winston.format.printf(({ timestamp, level, message, ...meta }) => {
const levelColors = {
error: chalk.red,
warn: chalk.yellow,
info: chalk.blue,
debug: chalk.gray,
success: chalk.green,
trade: chalk.cyan,
profit: chalk.green,
loss: chalk.red,
};
const levelIcon = {
error: '❌',
warn: '⚠️',
info: 'ℹ️',
debug: '🔍',
success: '✅',
trade: '💰',
profit: '📈',
loss: '📉',
};
const color = levelColors[level] || chalk.white;
const icon = levelIcon[level] || '📝';
return `${chalk.gray(timestamp)} ${icon} ${color(level.toUpperCase())}: ${message}`;
})
);
// File format for logging to files
const fileFormat = winston.format.combine(
winston.format.timestamp(),
winston.format.errors({ stack: true }),
winston.format.json()
);
// Create logger instance
const logger = winston.createLogger({
level: config.logging.level,
format: fileFormat,
defaultMeta: { service: 'solana-trading-bot' },
transports: [
// Daily rotate file transport
new DailyRotateFile({
filename: config.logging.logFilePath.replace('.log', '-%DATE%.log'),
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d',
level: 'info',
}),
// Error log file
new DailyRotateFile({
filename: config.logging.logFilePath.replace('.log', '-error-%DATE%.log'),
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '20m',
maxFiles: '30d',
level: 'error',
}),
],
});
// Add console transport if not in production
if (config.logging.debug || process.env.NODE_ENV !== 'production') {
logger.add(new winston.transports.Console({
format: consoleFormat,
level: config.logging.debug ? 'debug' : 'info',
}));
}
// Custom logging methods
export const logTrade = (message, meta = {}) => {
logger.log('trade', message, meta);
};
export const logProfit = (message, meta = {}) => {
logger.log('profit', message, meta);
};
export const logLoss = (message, meta = {}) => {
logger.log('loss', message, meta);
};
export const logSuccess = (message, meta = {}) => {
logger.log('success', message, meta);
};
// Performance logging
export const logPerformance = (operation, duration, meta = {}) => {
logger.info(`Performance: ${operation} took ${duration}ms`, {
operation,
duration,
...meta,
});
};
// Trade execution logging
export const logTradeExecution = (tradeType, tokenMint, amount, price, meta = {}) => {
logger.info(`Trade Execution: ${tradeType} ${tokenMint}`, {
tradeType,
tokenMint,
amount,
price,
timestamp: new Date().toISOString(),
...meta,
});
};
// Error logging with context
export const logError = (error, context = '', meta = {}) => {
logger.error(`Error in ${context}: ${error.message}`, {
error: error.stack,
context,
timestamp: new Date().toISOString(),
...meta,
});
};
// Wallet balance logging
export const logBalance = (balance, token = 'SOL') => {
logger.info(`Wallet Balance: ${balance} ${token}`);
};
// Position logging
export const logPosition = (action, mint, details, meta = {}) => {
logger.info(`Position ${action}: ${mint}`, {
action,
mint,
details,
timestamp: new Date().toISOString(),
...meta,
});
};
// Configuration logging
export const logConfig = (configSection, values) => {
logger.debug(`Configuration ${configSection}:`, values);
};
// API request logging
export const logApiRequest = (method, endpoint, params = {}) => {
logger.debug(`API Request: ${method} ${endpoint}`, {
method,
endpoint,
params,
timestamp: new Date().toISOString(),
});
};
// API response logging
export const logApiResponse = (method, endpoint, status, duration, meta = {}) => {
logger.debug(`API Response: ${method} ${endpoint}`, {
method,
endpoint,
status,
duration,
timestamp: new Date().toISOString(),
...meta,
});
};
// Export the main logger
export default logger;