在Linux环境下,使用JavaScript(Node.js)时,可以通过多种方式设置日志格式。以下是几种常见的方法:
console.log 和自定义格式最简单的方法是使用 console.log 并手动拼接字符串来定义日志格式。例如:
const timestamp = new Date().toISOString();
const logMessage = `[${timestamp}] [INFO] 这是一条日志信息`;
console.log(logMessage);
使用成熟的第三方日志库可以更灵活地管理日志格式、级别和输出。以下是一些流行的选择:
Winston 是一个功能强大的日志库,支持多种传输方式和格式化选项。
安装 Winston:
npm install winston
示例代码:
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.combine(
winston.format.timestamp({
format: 'YYYY-MM-DD HH:mm:ss'
}),
winston.format.printf(({ timestamp, level, message }) => {
return `[${timestamp}] [${level.toUpperCase()}] ${message}`;
})
),
transports: [
new winston.transports.Console(),
// 可以添加更多传输方式,如文件、HTTP等
// new winston.transports.File({ filename: 'error.log', level: 'error' })
// new winston.transports.File({ filename: 'combined.log' })
]
});
logger.info('这是一条信息日志');
logger.error('这是一条错误日志');
Pino 是一个高性能的日志库,适合需要高吞吐量的应用。
安装 Pino:
npm install pino
示例代码:
const pino = require('pino');
const logger = pino({
level: 'info',
transport: {
target: 'pino-pretty', // 可以使用 pino-pretty 在控制台美化输出
options: {
colorize: true
}
}
});
logger.info('这是一条信息日志');
logger.error('这是一条错误日志');
注意: 使用 pino-pretty 需要单独安装:
npm install pino-pretty
可以通过环境变量来动态设置日志格式,增强灵活性。例如,使用 Winston 结合环境变量:
const winston = require('winston');
const logFormat = process.env.LOG_FORMAT || 'combined';
const logger = winston.createLogger({
level: 'info',
format: winston.format.combine(
winston.format.timestamp({
format: 'YYYY-MM-DD HH:mm:ss'
}),
logFormat === 'simple'
? winston.format.simple()
: winston.format.printf(({ timestamp, level, message }) => {
return `[${timestamp}] [${level.toUpperCase()}] ${message}`;
})
),
transports: [
new winston.transports.Console()
]
});
logger.info('这是一条信息日志');
logger.error('这是一条错误日志');
然后,在运行脚本时设置环境变量:
LOG_FORMAT=simple node your_script.js
对于需要长期保存日志的应用,建议使用日志轮转工具,如 winston-daily-rotate-file。
安装依赖:
npm install winston winston-daily-rotate-file
示例代码:
const winston = require('winston');
const { createLogger, format, transports } = winston;
const DailyRotateFile = require('winston-daily-rotate-file');
const transport = new DailyRotateFile({
filename: 'application-%DATE%.log',
datePattern: 'YYYY-MM-DD-HH',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d'
});
const logger = createLogger({
level: 'info',
format: format.combine(
format.timestamp({
format: 'YYYY-MM-DD HH:mm:ss'
}),
format.printf(({ timestamp, level, message }) => {
return `[${timestamp}] [${level.toUpperCase()}] ${message}`;
})
),
transports: [
transport
]
});
logger.info('这是一条信息日志');
logger.error('这是一条错误日志');
根据项目需求选择合适的日志管理方案:
console.log 结合自定义格式。通过合理配置日志格式,可以更好地监控和调试应用,提升开发和运维效率。