美文网首页
Node.js 接口记录日志Demo

Node.js 接口记录日志Demo

作者: Yoopard丶Jun | 来源:发表于2017-12-03 23:07 被阅读0次

参考地址

morgan-github
morgan-详细介绍

morganexpress默认的日志中间件,也可以脱离express,作为node.js的日志组件单独使用。

项目中应用场景

1.首先安装morgan以及file-stream-rotator

cnpm i morgan file-stream-rotator -S

2.其次Demo代码如下

logsModel.js

/**
 * 日志记录
 */
const mongoose = require('../common/db').mongoose;
const linkMongo = require('../common/db').linkMongo;

const schema = {
    ip: {type: String, required: false}, // 访问者的ip
    method: {type: String, required: false}, // 调用方法
    time: {type: Number, required: false}, // 响应时间
    code: {type: Number, required: false}, // 状态码
}

const collectionName = 'logs';
const LogSchema = mongoose.Schema(schema);
const Logs = linkMongo.model(collectionName, LogSchema);

module.exports = Logs;

app.js

/**
 * 简单Demo
 */
const restify = require('restify');
const redis = require('redis');
const morgan = require('morgan');

const server = restify.createServer({
    name: 'demo',
    version: '1.0.0'
});

//日志系统Demo
const FileStreamRotator = require('file-stream-rotator');
const fs = require('fs');
const path = require('path');
const logDirectory = path.join(__dirname, 'log');

fs.existsSync(logDirectory) || fs.mkdirSync(logDirectory)

let accessLogStream = FileStreamRotator.getStream({
    date_format: 'YYYYMMDD',
    filename: path.join(logDirectory, '日志-%DATE%.log'),
    frequency: 'daily',
    verbose: false
})

server.use(morgan(function (tokens, req, res) {
    //这里记录日志 可以选择响应时间大于1秒 或者状态码不是200的时候的数据
    const LogsModel = require('./models/logs');
    const data = {
        ip: '',
        method: tokens.method(req, res),
        time: tokens['response-time'](req, res),
        code: tokens.status(req, res),
    };

    LogsModel.create(data); // 这里可用于存入数据库

    return [
        `状态码: ${tokens.status(req, res)}`,
        `响应时间: ${tokens['response-time'](req, res)}ms`
    ].join(' ')
}, {stream: accessLogStream})); // 这里可以写入日志

server.use(restify.plugins.acceptParser(server.acceptable));
server.use(restify.plugins.queryParser());
server.use(restify.plugins.bodyParser());

server.listen('3000', '0.0.0.0', function () {
    console.log('本地端口监听:','3000');
});

const routes = require('./routes')(server);

这样一个简单的Demo完成了。

相关文章

  • Node.js 接口记录日志Demo

    参考地址 morgan-githubmorgan-详细介绍 morgan是express默认的日志中间件,也可以脱...

  • Python的日志模块2

    基本使用方法 调用函数 Logger 记录器,直接提供日志接口。Handler 处理器,将(记录器产生的)日志记录...

  • 使用SLF4J记录日志

    日志推荐 1、在使用日志时应该使用抽象层接口日志框架来记录日志,方便以后的扩展和更换日志框架; 2、日志...

  • python3 logging 自定义存储、存储格式

    自己写的Demo 支持多个handler处理日志记录 日志格式自定义 控制日志文件每行的最大字符数(120) 图中...

  • markdown 链接

    [TOC] 项目进度 日志 全局 日志 记录已经完成,采用了SLF4J接口,Log4J实现。配置了3个输出接口,控...

  • Ocelot中文文档-日志

    目前,Ocelot使用标准的日志记录接口ILoggerFactory/ILogger 。 在IOcelotL...

  • 玩玩Node.js

    最近用Node.js写了几个接口,记录一下。 登录接口,简单的校验密码并把登录用户信息返回。 获取post过来的参...

  • (4) spring-boot+logback+log4j2+M

    spring boot内部使用Commons Logging来记录日志,但也保留外部接口可以让一些日志框架来进行实...

  • Spring boot 配置Log4j2

    spring boot内部使用Commons Logging来记录日志,但也保留外部接口可以让一些日志框架来进行实...

  • servlet获取客户端真实ip

    背景 最近负责公司的接口日志的记录,日志中需要获取客户端的真实ip,单纯的我直接调用HttpServletRequ...

网友评论

      本文标题:Node.js 接口记录日志Demo

      本文链接:https://www.haomeiwen.com/subject/ewozbxtx.html