在Node.js应用程序中集成日志和错误追踪系统是确保应用程序稳定性和可维护性的关键步骤。以下是一些流行的日志和错误追踪系统的集成方法:
Winston是一个非常流行的Node.js日志库,支持多种传输方式(如文件、控制台、HTTP等)。
npm install winston
const winston = require('winston'); const logger = winston.createLogger({ level: 'info', format: winston.format.json(), transports: [ new winston.transports.File({ filename: 'error.log', level: 'error' }), new winston.transports.File({ filename: 'combined.log' }), new winston.transports.Console({ format: winston.format.simple() }) ] }); if (process.env.NODE_ENV !== 'production') { logger.add(new winston.transports.Console({ format: winston.format.simple() })); }
Sentry是一个强大的错误追踪平台,可以帮助你实时监控和解决问题。
npm install @sentry/node
const Sentry = require('@sentry/node'); Sentry.init({ dsn: 'YOUR_SENTRY_DSN', environment: process.env.NODE_ENV || 'development', release: 'YOUR_RELEASE_VERSION' }); process.on('uncaughtException', (event) => { Sentry.captureException(event); process.exit(1); }); process.on('unhandledRejection', (event) => { Sentry.captureException(event); });
你可以将Winston和Sentry结合起来,以便在日志中记录错误并发送到Sentry。
npm install winston @sentry/node
const winston = require('winston'); const Sentry = require('@sentry/node'); Sentry.init({ dsn: 'YOUR_SENTRY_DSN', environment: process.env.NODE_ENV || 'development', release: 'YOUR_RELEASE_VERSION' }); const logger = winston.createLogger({ level: 'info', format: winston.format.json(), transports: [ new winston.transports.File({ filename: 'error.log', level: 'error' }), new winston.transports.File({ filename: 'combined.log' }), new winston.transports.Console({ format: winston.format.simple() }) ] }); // 自定义Winston传输器以发送错误到Sentry class SentryTransport extends winston.Transport { constructor(opts) { super(opts); this.sentryClient = Sentry.Client(); } log(info, callback) { if (info.level === 'error') { this.sentryClient.captureException(new Error(info.message)); } callback(); } } logger.add(new SentryTransport({ level: 'error' })); process.on('uncaughtException', (event) => { logger.error(event); Sentry.captureException(event); process.exit(1); }); process.on('unhandledRejection', (event) => { logger.error(event); Sentry.captureException(event); });
通过集成Winston和Sentry,你可以有效地记录日志并追踪错误,从而提高应用程序的可靠性和可维护性。确保在生产环境中正确配置这些工具,并定期检查日志和错误报告,以便及时发现和解决问题。