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

简介: 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日志并进行多维度分析。
相关文章
|
3天前
|
XML Java Maven
Springboot整合与使用log4j2日志框架【详解版】
该文介绍了如何在Spring Boot中切换默认的LogBack日志系统至Log4j2。首先,需要在Maven依赖中排除`spring-boot-starter-logging`并引入`spring-boot-starter-log4j2`。其次,创建`log4j2-spring.xml`配置文件放在`src/main/resources`下,配置包括控制台和文件的日志输出、日志格式和文件切分策略。此外,可通过在不同环境的`application.yml`中指定不同的log4j2配置文件。最后,文章提到通过示例代码解释了日志格式中的各种占位符含义。
|
3天前
|
运维 监控 Go
Golang深入浅出之-Go语言中的日志记录:log与logrus库
【4月更文挑战第27天】本文比较了Go语言中标准库`log`与第三方库`logrus`的日志功能。`log`简单但不支持日志级别配置和多样化格式,而`logrus`提供更丰富的功能,如日志级别控制、自定义格式和钩子。文章指出了使用`logrus`时可能遇到的问题,如全局logger滥用、日志级别设置不当和过度依赖字段,并给出了避免错误的建议,强调理解日志级别、合理利用结构化日志、模块化日志管理和定期审查日志配置的重要性。通过这些实践,开发者能提高应用监控和故障排查能力。
8 1
|
4天前
|
弹性计算 运维 Shell
|
11天前
|
Java
log4j异常日志过滤规则配置
log4j异常日志过滤规则配置
16 0
|
14天前
|
SQL 存储 监控
SLS 查询新范式:使用 SPL 对日志进行交互式探索
像 Unix 命令一样支持多级管道级联,像加工预览一样实时处理查询结果,更便捷的交互,更丰富的算子,更灵活的探索半结构化日志,快来试试使用 SPL 语言查询日志数据吧~
|
15天前
|
Apache
web服务器(Apache)访问日志(access_log)详细解释
web服务器(Apache)访问日志(access_log)详细解释
|
21天前
|
Java Spring
日志精准记录:Spring与Log4j完美整合的实战指南
日志精准记录:Spring与Log4j完美整合的实战指南
18 0
日志精准记录:Spring与Log4j完美整合的实战指南
|
23天前
|
运维 安全 Ubuntu
`/var/log/syslog` 和 `/var/log/messages` 日志详解
`/var/log/syslog` 和 `/var/log/messages` 是Linux系统的日志文件,分别在Debian和Red Hat系发行版中记录系统事件和错误。它们包含时间戳、日志级别、PID及消息内容,由`rsyslog`等守护进程管理。常用命令如`tail`和`grep`用于查看和搜索日志。日志级别从低到高包括`debug`到`emerg`,表示不同严重程度的信息。注意保护日志文件的安全,防止未授权访问,并定期使用`logrotate`进行文件轮转以管理磁盘空间。
29 1
|
23天前
|
安全 Unix Linux
`/var/log/wtmp` 和 `/var/run/utmp`日志详解
`/var/log/wtmp` 和 `/var/run/utmp` 是Unix/Linux系统中记录用户登录信息的关键文件。`wtmp` 文件存储所有登录和注销事件,供 `last` 命令显示登录历史,而 `utmp` 文件实时更新,记录当前登录用户信息,可由 `who` 或 `w` 命令解析展示。两者皆为root用户访问,系统重启可能清空,且常受安全措施保护,用于系统管理和安全审计。
36 1
|
23天前
|
监控 安全 Unix
/var/log/faillog日志详解
【4月更文挑战第8天】`/var/log/faillog`是Unix和Linux系统中记录登录失败尝试的日志文件,帮助管理员检测恶意登录和错误密码尝试。每行包含用户名、登录终端、时间戳和失败次数。高失败次数可能暗示密码破解尝试,管理员应密切关注并采取安全措施。启用和配置此功能可能需使用`pam_faillock`。然而,`/var/log/faillog`仅是安全策略的一部分,应结合强密码、系统更新、访问限制和多日志监控以增强安全性。
19 1
/var/log/faillog日志详解