Commit 9c2eeb66 authored by huhao's avatar huhao

😄

parents
.vscode
node_modules/
\ No newline at end of file
const util = require('util');
const dateFormat = require('date-format');
const ALY = require('aliyun-sdk');
function level(loggingEvent) {
return loggingEvent.level.levelStr;
}
function message(loggingEvent) {
return util.format(...loggingEvent.data);
}
function location(loggingEvent) {
if (loggingEvent.callStack) {
return `${loggingEvent.categoryName} ${loggingEvent.functionName}(${loggingEvent.fileName}:${loggingEvent.lineNumber}:${loggingEvent.columnNumber})`;
}
return loggingEvent.categoryName === 'default' ? undefined : loggingEvent.categoryName;
}
function time(loggingEvent, timeFormat, timezoneOffset) {
return dateFormat(timeFormat, loggingEvent.startTime);
}
module.exports.configure = function (config, layouts) {
if (!config.accessKeyId ||
!config.secretAccessKey ||
!config.endpoint ||
!config.apiVersion ||
!config.projectName ||
!config.logStoreName) {
console.error('config error');
return;
}
const layout = config.layout ?
layouts.layout(config.layout.type, config.layout) :
layouts.layout;
const timeFormat = config.timeFormat || dateFormat.ISO8601_WITH_TZ_OFFSET_FORMAT;
const sls = new ALY.SLS(config);
const { projectName, logStoreName, topic } = config;
const appender = function (loggingEvent) {
appender.queue.push({
time: Math.floor(loggingEvent.startTime.getTime() / 1000), //单位秒
contents: [{
key: 'level',
value: level(loggingEvent)
}, {
key: 'time',
value: time(loggingEvent, timeFormat)
}, {
key: 'message',
value: message(loggingEvent)
}, {
key: 'location',
value: location(loggingEvent)
}, {
key: 'log',
value: layout(loggingEvent)
}]
});
};
appender.queue = [];
appender.flushing = false;
appender.flushTime = Date.now();
appender.flushError = null;
appender.flushQueue = [];
appender.batchSize = config.batchSize || 4096;
appender.lingerMs = config.lingerMs || 2000;
appender.flush = function (size) {
if (appender.flushing) {
return;
}
if (!appender.flushError) {
appender.flushQueue = appender.queue.splice(0, appender.batchSize);
}
if (appender.flushQueue.length > 0) {
appender.flushing = true;
sls.putLogs({
projectName,
logStoreName,
logGroup: {
logs: appender.flushQueue,
topic
}
}, (err, data) => {
appender.flushError = err;
appender.flushTime = Date.now();
appender.flushing = false;
if (size === undefined) {
size = appender.batchSize;
}
if (!err && appender.queue.length > size) {
appender.flush();
}
});
}
};
const flushId = setInterval(() => {
if (appender.queue.length > appender.batchSize) {
appender.flush();
}
if (Date.now() > appender.flushTime + appender.lingerMs) {
appender.flush();
}
}, 1000);
appender.shutdown = function (done) {
clearInterval(flushId);
appender.flush(0);
if (done) {
done();
}
};
return appender;
};
\ No newline at end of file
module.exports = require('./aliyun-sls-appender');
\ No newline at end of file
{
"appenders": {
"console": {
"type": "console"
},
"sls": {
"type": "aliyun-sls-appender",
"layout": {
"type": "pattern",
"pattern": "%d %p %c %m%n%s"
},
"accessKeyId": "",
"secretAccessKey": "",
"endpoint": "http://cn-hangzhou.log.aliyuncs.com",
"apiVersion": "2015-06-01",
"projectName": "",
"logStoreName": "",
"topic": ""
}
},
"categories": {
"default": {
"appenders": [
"console",
"sls"
],
"level": "WARN",
"enableCallStack": true
}
}
}
\ No newline at end of file
{
"name": "log4js-aliyun-sls",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@protobufjs/aspromise": {
"version": "1.1.2",
"resolved": "https://registry.npm.taobao.org/@protobufjs/aspromise/download/@protobufjs/aspromise-1.1.2.tgz",
"integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78="
},
"@protobufjs/base64": {
"version": "1.1.2",
"resolved": "https://registry.npm.taobao.org/@protobufjs/base64/download/@protobufjs/base64-1.1.2.tgz",
"integrity": "sha1-TIVzDlm5ofHzSQR9vyQpYDS7JzU="
},
"@protobufjs/codegen": {
"version": "2.0.4",
"resolved": "https://registry.npm.taobao.org/@protobufjs/codegen/download/@protobufjs/codegen-2.0.4.tgz",
"integrity": "sha1-fvN/DQEPsCitGtWXIuUG2SYoFcs="
},
"@protobufjs/eventemitter": {
"version": "1.1.0",
"resolved": "https://registry.npm.taobao.org/@protobufjs/eventemitter/download/@protobufjs/eventemitter-1.1.0.tgz",
"integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A="
},
"@protobufjs/fetch": {
"version": "1.1.0",
"resolved": "https://registry.npm.taobao.org/@protobufjs/fetch/download/@protobufjs/fetch-1.1.0.tgz",
"integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=",
"requires": {
"@protobufjs/aspromise": "^1.1.1",
"@protobufjs/inquire": "^1.1.0"
}
},
"@protobufjs/float": {
"version": "1.0.2",
"resolved": "https://registry.npm.taobao.org/@protobufjs/float/download/@protobufjs/float-1.0.2.tgz",
"integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E="
},
"@protobufjs/inquire": {
"version": "1.1.0",
"resolved": "https://registry.npm.taobao.org/@protobufjs/inquire/download/@protobufjs/inquire-1.1.0.tgz",
"integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik="
},
"@protobufjs/path": {
"version": "1.1.2",
"resolved": "https://registry.npm.taobao.org/@protobufjs/path/download/@protobufjs/path-1.1.2.tgz",
"integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0="
},
"@protobufjs/pool": {
"version": "1.1.0",
"resolved": "https://registry.npm.taobao.org/@protobufjs/pool/download/@protobufjs/pool-1.1.0.tgz",
"integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q="
},
"@protobufjs/utf8": {
"version": "1.1.0",
"resolved": "https://registry.npm.taobao.org/@protobufjs/utf8/download/@protobufjs/utf8-1.1.0.tgz",
"integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA="
},
"@types/long": {
"version": "4.0.1",
"resolved": "https://registry.npm.taobao.org/@types/long/download/@types/long-4.0.1.tgz",
"integrity": "sha1-RZxl+hhn2v5qjzIsTFFpVmPMVek="
},
"@types/node": {
"version": "10.17.17",
"resolved": "https://registry.npm.taobao.org/@types/node/download/@types/node-10.17.17.tgz?cache=0&sync_timestamp=1585118009210&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-10.17.17.tgz",
"integrity": "sha1-ehgxY6nm/3INhlAtsjukqt5Zmbg="
},
"aliyun-sdk": {
"version": "1.12.3",
"resolved": "https://registry.npm.taobao.org/aliyun-sdk/download/aliyun-sdk-1.12.3.tgz",
"integrity": "sha1-JRRk3VssTis2zqAPyLQBtbb3Dsc=",
"requires": {
"node_memcached": "1.1.3",
"pomelo-protobuf": "^0.4.0",
"protobufjs": ">=5.0.3",
"xml2js": "0.4.4",
"xmlbuilder": "^13.0.2"
}
},
"date-format": {
"version": "3.0.0",
"resolved": "https://registry.npm.taobao.org/date-format/download/date-format-3.0.0.tgz",
"integrity": "sha1-64eANlx9KxURB4+0keZHl4DzrZU="
},
"debug": {
"version": "4.1.1",
"resolved": "http://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz",
"integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=",
"requires": {
"ms": "^2.1.1"
}
},
"flatted": {
"version": "2.0.1",
"resolved": "https://registry.npm.taobao.org/flatted/download/flatted-2.0.1.tgz",
"integrity": "sha1-aeV8qo8OrLwoHS4stFjUb9tEngg="
},
"fs-extra": {
"version": "8.1.0",
"resolved": "https://registry.npm.taobao.org/fs-extra/download/fs-extra-8.1.0.tgz",
"integrity": "sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA=",
"requires": {
"graceful-fs": "^4.2.0",
"jsonfile": "^4.0.0",
"universalify": "^0.1.0"
}
},
"graceful-fs": {
"version": "4.2.3",
"resolved": "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.3.tgz",
"integrity": "sha1-ShL/G2A3bvCYYsIJPt2Qgyi+hCM="
},
"jsonfile": {
"version": "4.0.0",
"resolved": "https://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz",
"integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
"requires": {
"graceful-fs": "^4.1.6"
}
},
"log4js": {
"version": "6.1.2",
"resolved": "https://registry.npm.taobao.org/log4js/download/log4js-6.1.2.tgz?cache=0&sync_timestamp=1581378918424&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flog4js%2Fdownload%2Flog4js-6.1.2.tgz",
"integrity": "sha1-BGiOH0uAgMEnt9zLDbHHWcuyXcQ=",
"requires": {
"date-format": "^3.0.0",
"debug": "^4.1.1",
"flatted": "^2.0.1",
"rfdc": "^1.1.4",
"streamroller": "^2.2.3"
}
},
"long": {
"version": "4.0.0",
"resolved": "https://registry.npm.taobao.org/long/download/long-4.0.0.tgz",
"integrity": "sha1-mntxz7fTYaGU6lVSQckvdGjVvyg="
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz",
"integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk="
},
"node_memcached": {
"version": "1.1.3",
"resolved": "https://registry.npm.taobao.org/node_memcached/download/node_memcached-1.1.3.tgz",
"integrity": "sha1-icFSr4itKIF/ANiRyZBFHV1xLqg=",
"requires": {
"debug": "^2.1.0"
},
"dependencies": {
"debug": {
"version": "2.6.9",
"resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz",
"integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
"requires": {
"ms": "2.0.0"
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
}
}
},
"pomelo-protobuf": {
"version": "0.4.0",
"resolved": "https://registry.npm.taobao.org/pomelo-protobuf/download/pomelo-protobuf-0.4.0.tgz",
"integrity": "sha1-5F6aCkRusYZn4MbhPutT1Hrdvag="
},
"protobufjs": {
"version": "6.8.9",
"resolved": "https://registry.npm.taobao.org/protobufjs/download/protobufjs-6.8.9.tgz",
"integrity": "sha1-CxrbzaqYPTacPZEIqXyBTtwDB1Q=",
"requires": {
"@protobufjs/aspromise": "^1.1.2",
"@protobufjs/base64": "^1.1.2",
"@protobufjs/codegen": "^2.0.4",
"@protobufjs/eventemitter": "^1.1.0",
"@protobufjs/fetch": "^1.1.0",
"@protobufjs/float": "^1.0.2",
"@protobufjs/inquire": "^1.1.0",
"@protobufjs/path": "^1.1.2",
"@protobufjs/pool": "^1.1.0",
"@protobufjs/utf8": "^1.1.0",
"@types/long": "^4.0.0",
"@types/node": "^10.1.0",
"long": "^4.0.0"
}
},
"rfdc": {
"version": "1.1.4",
"resolved": "https://registry.npm.taobao.org/rfdc/download/rfdc-1.1.4.tgz",
"integrity": "sha1-unLME2egzNnPgahws7WL060H+MI="
},
"sax": {
"version": "0.6.1",
"resolved": "http://registry.npm.taobao.org/sax/download/sax-0.6.1.tgz",
"integrity": "sha1-VjsZx8HeiS4Jv8Ty/DDjwn8JUrk="
},
"streamroller": {
"version": "2.2.3",
"resolved": "https://registry.npm.taobao.org/streamroller/download/streamroller-2.2.3.tgz",
"integrity": "sha1-uVyfrUTi6JAF0kIUFIaztJYsLSg=",
"requires": {
"date-format": "^2.1.0",
"debug": "^4.1.1",
"fs-extra": "^8.1.0"
},
"dependencies": {
"date-format": {
"version": "2.1.0",
"resolved": "https://registry.npm.taobao.org/date-format/download/date-format-2.1.0.tgz",
"integrity": "sha1-MdW16iEc9f12TNOLr50DPffhJc8="
}
}
},
"universalify": {
"version": "0.1.2",
"resolved": "https://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz?cache=0&sync_timestamp=1583531006552&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funiversalify%2Fdownload%2Funiversalify-0.1.2.tgz",
"integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY="
},
"xml2js": {
"version": "0.4.4",
"resolved": "https://registry.npm.taobao.org/xml2js/download/xml2js-0.4.4.tgz?cache=0&sync_timestamp=1576776179444&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fxml2js%2Fdownload%2Fxml2js-0.4.4.tgz",
"integrity": "sha1-MREBAAMAiuGSQOuhdJe1fHKcVV0=",
"requires": {
"sax": "0.6.x",
"xmlbuilder": ">=1.0.0"
}
},
"xmlbuilder": {
"version": "13.0.2",
"resolved": "https://registry.npm.taobao.org/xmlbuilder/download/xmlbuilder-13.0.2.tgz?cache=0&sync_timestamp=1585220198684&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fxmlbuilder%2Fdownload%2Fxmlbuilder-13.0.2.tgz",
"integrity": "sha1-Aq4zYUtqBH0cMrU4nB/ayyvOR6c="
}
}
}
{
"name": "log4js-aliyun-sls",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "node test.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"aliyun-sdk": "^1.12.3",
"log4js": "^6.1.2"
}
}
const log4js = require('log4js');
log4js.configure(require('./log4js.json'));
const logger = log4js.getLogger("aliyun-sls-appender-test");
logger.trace('Entering cheese testing');
logger.debug('Got cheese.');
logger.info();
logger.warn('Cheese is quite smelly.');
logger.error('Cheese is too ripe!', new Error("aa"));
logger.fatal('Cheese was breeding ground for listeria.');
log4js.shutdown(() => { console.log('log4js shutdown'); })
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment