阅读量:337
安装依赖
npm install morgan mysql
配置Morgan
const express = require('express');
const morgan = require('morgan');
const mysql = require('mysql');
// 创建MySQL连接
const connection = mysql.createConnection({
host: 'localhost',
user: 'user',
password: 'password',
database: 'logs'
});
connection.connect();
// 配置Morgan
morgan.token('response-time', (req, res) => {
return res.headers['x-response-time'];
});
const morganFormat = ':method :url :status :res[content-length] - :response-time ms - :log';
app.use(morgan(morganFormat, {
stream: {
write: message => {
const logEntry = message.trim();
connection.query('INSERT INTO logs (method, url, status, response_time) VALUES (?, ?, ?, ?)', [logEntry.method, logEntry.url, logEntry.status, logEntry.response_time], (error, results) => {
if (error) throw error;
});
}
}
}));
app.get('/', (req, res) => {
res.send('Hello, world!');
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
3. 使用Pino和PostgreSQL
Pino是一个高性能的日志库,可以与PostgreSQL集成来存储日志数据。
安装依赖
npm install pino pg
配置Pino
const pino = require('pino');
const { Pool } = require('pg');
// 创建PostgreSQL连接池
const pool = new Pool({
user: 'user',
host: 'localhost',
database: 'logs',
password: 'password',
port: 5432,
});
// 配置Pino
const logger = pino({
level: 'info',
transport: {
target: 'pino-pretty',
options: {
colorize: true
}
}
});
// 自定义传输器
class PgTransport {
constructor(options) {
this.pool = options.pool;
}
write(record, callback) {
const { level, msg, timestamp } = record;
this.pool.query('INSERT INTO logs (level, message, timestamp) VALUES ($1, $2, $3)', [level, msg, timestamp], (error, results) => {
if (error) return callback(error);
callback();
});
}
}
// 使用自定义传输器
logger.add(new PgTransport({ pool }));
// 使用日志记录器
logger.info('Hello, world!');
总结
以上示例展示了如何使用不同的日志库(Winston、Morgan、Pino)与不同的数据库(MongoDB、MySQL、PostgreSQL)集成。你可以根据自己的需求选择合适的日志库和数据库,并根据示例进行配置。