非egg应用获取不到error logs
kekobin opened this issue · 4 comments
背景:这边部署了3.0版本,eggjs项目应用监控都能正常监控到错误日志。但别的团队非egg项目接入后一直项目有生成错误日志文件,也是按照规范做配置,但是没有在监控平台展示出来。后来写了个demo,确实是没有。大概示例如下:
1.业务代码启动xprofiler:
require('xprofiler').start({
log_dir: path.resolve(__dirname, '../logs/xprofiler'),
log_interval: undefined,
check_throw: true
});
2.配置xtransit
// config.js
const path = require('path');
module.exports = {
server: `ws://127.0.0.1:9090`, // 填写前一节中部署的 xtransit-server 地址
appId: 1, // 创建应用得到的应用 ID
appSecret: 'xxx', // 创建应用得到的应用 Secret
disks: [],
errors: [
path.resolve(__dirname, './logs/app-err-0.log')
],
packages: [path.resolve(__dirname, './package.json')],
logDir: path.resolve(__dirname, './logs/xprofiler'),
docker: false,
ipMode: false,
libMode: true,
errexp: /\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/i,
checkThrow: true,
logger: undefined
};
3.xtransit 启动文件
const xtransit = require('xtransit');
const config = require('./config');
xtransit.start(config);
4.pm2 启动脚本
{
"apps" : [{
"name" : "test",
"script" : "./server/index.js",
"args" : ["-d", "1"],
"log_date_format" : "YYYY-MM-DD HH:mm Z",
"watch": false,
"cwd" : "",
"error_file" : "F:/nuxt-test/logs/app-err-0.log",
"out_file" : "F:/nuxt-test/logs/app-0.log",
"instances": 1
},{
"name": "xtransit 进程",
"script": "./xtransit.js",
"exec_mode": "fork"
}]
}
启动后其他都是正常,估计 throw new Error了,log文件里也有错误了,就是在监控平台上没有。
打印了xprofiler-manager/controller/xtransit.js中的 handleLog 的error_log,一直都是空:
进一步调试代码,发现ErrorService一直都接受不到message:
所以很奇怪,不知道是哪里出问题了,上面的配置会根据egg项目下底层egg-xtransit里面对应的配置打印出来的。所以理论上来说,两种类型项目配置基本是一样的。难道是 手动 throw new Error不符合某种日志规范么?
看 xtransit
的配置属性的文档:https://www.yuque.com/hyj1991/easy-monitor/application#X9uMr
errexp: /\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/i, // 匹配错误日志起始的正则,默认为匹配到 YYYY-MM-DD HH:mm:ss 时间戳即认为是一条错误日志的起始
默认匹配 YYYY-MM-DD HH:mm:ss
,你的错误日志只有 YYYY-MM-DD HH:mm
,自己改成你想要的错误日志起始正则就行了
看
xtransit
的配置属性的文档:https://www.yuque.com/hyj1991/easy-monitor/application#X9uMrerrexp: /\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/i, // 匹配错误日志起始的正则,默认为匹配到 YYYY-MM-DD HH:mm:ss 时间戳即认为是一条错误日志的起始
默认匹配
YYYY-MM-DD HH:mm:ss
,你的错误日志只有YYYY-MM-DD HH:mm
,自己改成你想要的错误日志起始正则就行了
还真是这个问题,没太注意到这个细节。感谢!
@hyj1991 日志路径可以使用通配符方式匹配吗?我所在项目的日志文件名带随机数字,比如error-0.log,error-1.log,error-2.log这样。
我想用一条通配符规则来匹配这些日志,试过下面四种写法,但没有成功。
errors: ['/app/logs/error']
errors: ['/app/logs/error*']
errors: ['/app/logs/error*.log']
errors: ['/app/logs/error.log']
目前,只有明确写死日志文件名才有效,像这样:
errors: ['/app/logs/error-2.log']
请问,这种通配符匹配的方式easy-monitor支持吗?
@beforegolive 目前不支持通配符