logger.ts 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import winston from 'winston';
  2. import path from 'path';
  3. import { fileURLToPath } from 'url';
  4. import { config } from '../config/index.js';
  5. const __dirname = path.dirname(fileURLToPath(import.meta.url));
  6. const logsDir = path.join(__dirname, '../../logs');
  7. const logFormat = winston.format.combine(
  8. winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
  9. winston.format.errors({ stack: true }),
  10. winston.format.printf(({ timestamp, level, message, stack }) => {
  11. return `${timestamp} [${level.toUpperCase()}]: ${message}${stack ? '\n' + stack : ''}`;
  12. })
  13. );
  14. const transports: winston.transport[] = [
  15. new winston.transports.Console({
  16. format: winston.format.combine(
  17. winston.format.colorize(),
  18. logFormat
  19. ),
  20. }),
  21. ];
  22. // 生产环境添加文件日志
  23. if (config.env === 'production') {
  24. transports.push(
  25. new winston.transports.File({
  26. filename: path.join(logsDir, 'error.log'),
  27. level: 'error',
  28. format: logFormat,
  29. }),
  30. new winston.transports.File({
  31. filename: path.join(logsDir, 'combined.log'),
  32. format: logFormat,
  33. })
  34. );
  35. }
  36. export const logger = winston.createLogger({
  37. level: config.env === 'production' ? 'info' : 'debug',
  38. transports,
  39. });