diff --git a/.gitignore b/.gitignore index fdd4145..f629ba6 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ config_*.json core.* coredump_* .nyc_output/ +.vscode diff --git a/.travis.yml b/.travis.yml index f7fd2ad..2a582f7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,4 +4,8 @@ node_js: - "6" - "8" - "10" -script: npm run ci +script: + - npm run ci + +before_install: + - ./install_alinode.sh diff --git a/install_alinode.sh b/install_alinode.sh new file mode 100755 index 0000000..188d841 --- /dev/null +++ b/install_alinode.sh @@ -0,0 +1,27 @@ +wget --no-check-certificate -O- https://raw.githubusercontent.com/aliyun-node/tnvm/master/install.sh | bash +source $HOME/.bash_profile +source $HOME/.bashrc +echo TRAVIS_NODE_VERSION = $TRAVIS_NODE_VERSION + +if [ $TRAVIS_NODE_VERSION -eq '6' ];then + tnvm install alinode-v2.9.0 + tnvm use alinode-v2.9.0 +elif [ $TRAVIS_NODE_VERSION -eq '8' ];then + tnvm install alinode-v3.16.0 + tnvm use alinode-v3.16.0 +elif [ $TRAVIS_NODE_VERSION -eq '10' ];then + tnvm install alinode-v4.13.2 + tnvm use alinode-v4.13.2 +else + tnvm install alinode-v6.4.4 + tnvm use alinode-v6.4.4 +fi + +tnvm current + +echo 'which node' +which node + +source $HOME/.bash_profile +source $HOME/.bashrc + diff --git a/lib/orders/error_log.js b/lib/orders/error_log.js index d9c06c9..ab251d0 100644 --- a/lib/orders/error_log.js +++ b/lib/orders/error_log.js @@ -3,6 +3,7 @@ var fs = require('fs'); var helper = require('../utils'); var Parser = require('../error_parser'); +var glob = require('glob'); var MAX_ERROR_COUNT = 20; // 一次最多抓获20个Error exports.logs = []; // 日志路径 @@ -11,10 +12,14 @@ var keyMap = new Map(); // 记录每个key实际对应的路径值 var map = new Map(); // 记录每个文件访问的位置 var parsers = new Map(); // 每个key都有一个parser -var getRealPath = function (filepath) { - return helper.resolveYYYYMMDDHH(filepath); +var getRealPath = function (filepath,callback) { + glob(filepath,callback); }; +// var a = function (err,file){ +// return file.map(path => helper.resolveYYYYMMDDHH(path)) +// } + var readFile = function (key, filepath, callback) { fs.stat(filepath, function (err, stats) { if (err) { @@ -63,20 +68,36 @@ var readFile = function (key, filepath, callback) { }; var readLog = function (key, callback) { - var currentPath = getRealPath(key); - var current = keyMap.get(key); - - if (currentPath !== current) { - keyMap.set(key, currentPath); // replace real path - readFile(key, current, function (err) { - if (err) { - return callback(err); + getRealPath(key,function(_err,files){ + var currentPaths = files.map(path => helper.resolveYYYYMMDDHH(path)); + var currents = keyMap.get(key); + + if (currentPaths.toString() !== currents.toString()) { + keyMap.set(key, currentPaths); // replace real path + currents.forEach(current => { + readFile(key, current, function (err) { + if (err) { + return callback(err); + } + if( currentPaths.length !== 0) { + currentPaths.forEach(path => { + readFile(key, path, callback); + }); + } else { + readFile(key, '', callback); + } + }); + }); + } else { + if( currentPaths.length !== 0) { + currentPaths.forEach(path => { + readFile(key, path, callback); + }); + }else{ + readFile(key, '', callback); } - readFile(key, currentPath, callback); - }); - } else { - readFile(key, currentPath, callback); - } + } + }); }; var readLogs = function (callback) { @@ -99,14 +120,20 @@ exports.init = function (config) { exports.logs = config.error_log; var logs = config.error_log; + var key; + var initCallBack = function(_err,files){ + var realPath = files.map(path => helper.resolveYYYYMMDDHH(path)); + realPath.forEach(path => { + if (fs.existsSync(path)) { + map.set(path, fs.statSync(path).size); + } + }); + keyMap.set(key, realPath); + }; for (var i = 0; i < logs.length; i++) { - var key = logs[i]; + key = logs[i]; parsers.set(key, new Parser(MAX_ERROR_COUNT)); - var realPath = getRealPath(key); - if (fs.existsSync(realPath)) { - map.set(realPath, fs.statSync(realPath).size); - } - keyMap.set(key, realPath); + getRealPath(key,initCallBack); } } }; diff --git a/test/orders/error_log.test.js b/test/orders/error_log.test.js index ae150b9..185f2e4 100644 --- a/test/orders/error_log.test.js +++ b/test/orders/error_log.test.js @@ -95,6 +95,21 @@ describe('/lib/orders/error_log.js', function () { }); }); + describe('wildcard match log', function () { + before(function () { + errorLog.init({ + error_log: [path.join(__dirname, '../logs', '*.log')] + }); + }); + + it('should ok', function (done) { + errorLog.run(function (err) { + expect(err).to.not.be.ok(); + done(); + }); + }); + }); + describe('when path is folder error logs', function () { before(function () { errorLog.init({