koa2搭配log4js实现日志监控|8月更文挑战

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: koa2搭配log4js实现日志监控|8月更文挑战

安装node环境


因为此框架是基于node.js的,安装node是必须的进行的第一步,这里不再详细介绍

  • 当前环境


网络异常,图片无法展示
|


安装koa(我们使用淘宝镜像进行安装)


# 全局安装koa脚手架
cnpm install koa-generator -g
# 创建新项目
koa2 my_server
# 打开新建的项目
cd my_server
# 安装依赖
yarn
复制代码


安装完成后,执行npm dev,浏览器输入localhost:3000,展示如下页面,即koa2环境搭建成功


  • 控制台


网络异常,图片无法展示
|


  • 浏览器

网络异常,图片无法展示
|


入口文件在 bin/www 里面


安装logjs插件


npm的log4js文档地址

网络异常,图片无法展示
|


安装log4js


npm install log4js
# 或者
yarn add log4js
复制代码


配置log4js


网络异常,图片无法展示
|


创建一个utils文件夹,创建log4j.js


注释都在代码上面,有啥问题欢迎骚扰我


/**
 * 日志存储
 * @auther 何小玍。
 * @time 2021/07/28 22:11
 */
const log4j = require('log4js')
const levels = {
    'trace'     : log4j.levels.TRACE,
    'debug'     : log4j.levels.DEBUG,
    'info'      : log4j.levels.INFO,
    'warn'      : log4j.levels.WARN,
    'error'     : log4j.levels.ERROR,
    'fatal'     : log4j.levels.FATAL
}
// log4j配置
log4j.configure({
    appenders: {
        console: { type: 'console' },
        info: {
            type: 'file',
            filename: 'logs/all-logs.log'
        },
        error: {
            type: 'dateFile',
            filename: 'logs/log',
            pattern: 'yyyy-MM-dd.log',
            alwaysIncludePattern: true      // 设置文件名称为 filename + pattern
        }
    },
    categories: {
        default: {
            appenders: [ 'console' ],
            level: 'debug'
        },
        info: {
            appenders: [ 'info', 'console' ],
            level: 'info'
        },
        error: {
            appenders: [ 'error', 'console' ],
            level: 'error'
        }
    }
})
/**
 * 日志输出 level为bug
 * @param { string } content
 */
exports.debug = ( content ) => {
    let logger = log4j.getLogger('debug')
    logger.level = levels.debug
    logger.debug(content)
}
/**
 * 日志输出 level为info
 * @param { string } content
 */
 exports.info = ( content ) => {
    let logger = log4j.getLogger('info')
    logger.level = levels.info
    logger.info(content)
}
/**
 * 日志输出 level为error
 * @param { string } content
 */
 exports.error = ( content ) => {
    let logger = log4j.getLogger('error')
    logger.level = levels.error
    logger.error(content)
}
复制代码


定义util.js文件,做通用工具函数库


/**
 * 通用函数封装
 * @auther 何小玍。
 * @time 2021/07/28 22:07
 */
const log4j = require('./log4j')
const CODE = {
    SUCCESS: 200,               // 成功
    PARAM_ERROR: 10001,         // 参数错误
    USER_ACCOUNT_ERROR: 20001,  // 账号或密码错误
    USER_LOGIN_ERROR: 30001,    // 用户未登录
    BUSINESS_ERROR: 40001,      // 业务请求失败
    AUTH_ERROR: 50001,          // 认证失败或TOKEN过期
}
module.exports = {
    /**
     * 分页结构封装
     * @param { number } pageNum        每页数量
     * @param { number } pageSize       当前页码
     */
    pager({ pageNum = 1, pageSize = 1 }) {
        pageNum *= 1
        pageSize *= 1
        const skipIndex = (pageNum - 1) * pageSize      // 当前所翻页数
        return {
            page: {
                pageNum,
                pageSize
            },
            skipIndex
        }
    },
    // 成功回调
    success(data = '', msg = '', code = CODE.SUCCESS) {
        log4j.debug(data)
        return { code, data, msg }
    },
    // 失败回调
    fail(data = '', msg = '', code = CODE>BUSINESS_ERROR) {
        log4j.debug(msg)
        return { code, data, msg }
    },
    // 把状态码暴露全局
    CODE
}
复制代码


至此,log4j的封装已完成,就可以直接调用了


在app.js里面加入两句话,实时打印get请求和post请求


// logger  中间件
app.use(async (ctx, next) => {
  log4j.info(`get: ${ JSON.stringify(ctx.request.query) }`)         // 监听get请求
  log4j.info(`params: ${ JSON.stringify(ctx.request.body) }`)       // 监听post请求
  const start = new Date()
  await next()
  const ms = new Date() - start
  console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)
})
复制代码


然后运行npm dev, 在浏览器打开localhost:3000,就能看到项目自动生成一个log文件夹,里面有着日志信息


网络异常,图片无法展示
|

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
21天前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
164 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
2月前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
247 3
|
22天前
|
JSON 监控 JavaScript
Node.js-API 限流与日志优化
Node.js-API 限流与日志优化
|
2月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1648 14
|
2月前
|
Python
log日志学习
【10月更文挑战第9天】 python处理log打印模块log的使用和介绍
35 0
|
2月前
|
数据可视化
Tensorboard可视化学习笔记(一):如何可视化通过网页查看log日志
关于如何使用TensorBoard进行数据可视化的教程,包括TensorBoard的安装、配置环境变量、将数据写入TensorBoard、启动TensorBoard以及如何通过网页查看日志文件。
218 0
|
2月前
|
存储 分布式计算 NoSQL
大数据-136 - ClickHouse 集群 表引擎详解1 - 日志、Log、Memory、Merge
大数据-136 - ClickHouse 集群 表引擎详解1 - 日志、Log、Memory、Merge
42 0
|
2月前
|
缓存 Linux 编译器
【C++】CentOS环境搭建-安装log4cplus日志组件包及报错解决方案
通过上述步骤,您应该能够在CentOS环境中成功安装并使用log4cplus日志组件。面对任何安装或使用过程中出现的问题,仔细检查错误信息,对照提供的解决方案进行调整,通常都能找到合适的解决之道。log4cplus的强大功能将为您的项目提供灵活、高效的日志管理方案,助力软件开发与维护。
59 0
|
3月前
|
Java
日志框架log4j打印异常堆栈信息携带traceId,方便接口异常排查
日常项目运行日志,异常栈打印是不带traceId,导致排查问题查找异常栈很麻烦。
|
3月前
|
存储 监控 数据可视化
SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
【9月更文挑战第2天】SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
162 9