@zxhy-npm/send-sls-logger 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.d.ts ADDED
@@ -0,0 +1,70 @@
1
+ import { WebTrackerBrowserOptions } from "@aliyun-sls/web-track-browser";
2
+
3
+ interface StringObject {
4
+ [name: string]: string | Function;
5
+ }
6
+
7
+ /** 对最终发送的日志进行兜底处理,只能在init中使用 */
8
+ type FormatResult = (result: any) => any;
9
+
10
+ interface initConfig {
11
+ debug?: boolean;
12
+ /** 日志默认值,可以配置字符串或者function,如果是function,每次发送日志都会执行,通常用于获取当前页面的url等 */
13
+ defaultData?: StringObject;
14
+ /** 设置关键字列表,用于排除一些日志,如果日志中包含配置的这些关键字,则不发送日志 */
15
+ defaultExclude?: string[];
16
+ options?: WebTrackerBrowserOptions;
17
+ /** 最大字符长度,如果关键字里包含token,则不进行截断 */
18
+ strMaxLength?: number;
19
+ /** 对最终发送的日志进行兜底处理,只能在init中使用 */
20
+ userFormatResult?: FormatResult;
21
+ }
22
+
23
+ export = slsLog;
24
+ export as namespace slsLog;
25
+
26
+ /**
27
+ * PC端sls日志组件,使用init初始化项目,填入 options(host、project、logstore);
28
+ * 在后续使用的时候,直接调用error|warn|log|into向sls发送日志
29
+ */
30
+ declare namespace slsLog {
31
+ /**
32
+ * @name 发送error日志
33
+ * 接收两个参数,
34
+ * @param log string | StringObject
35
+ * @param format 整理即将发送的,返回要发送的日志结果
36
+ * */
37
+ function error(str: string | StringObject, format?: FormatResult): void;
38
+ /**
39
+ * @name 发送警告日志
40
+ * 接收两个参数,
41
+ * @param log string | StringObject
42
+ * @param format 整理即将发送的,返回要发送的日志结果
43
+ * */
44
+ function warn(str: string | StringObject, format?: FormatResult): void;
45
+ /**
46
+ * @name 发送普通日志
47
+ * 接收两个参数,
48
+ * @param log string | StringObject
49
+ * @param format 整理即将发送的,返回要发送的日志结果
50
+ * */
51
+ function log(str: string | StringObject, format?: FormatResult): void;
52
+ /**
53
+ * @name 发送普通日志
54
+ * 接收两个参数,
55
+ * @param log string | StringObject
56
+ * @param format 整理即将发送的,返回要发送的日志结果
57
+ * */
58
+ function info(str: string | StringObject, format?: FormatResult): void;
59
+ /**
60
+ * @name 初始化init
61
+ * @description 可以多次调用,在发送日志之前,一定要初始化过 options(host、project、logstore) 内容
62
+ * @param debug 是否开启debug模式
63
+ * @param defaultData 日志默认值,可以配置字符串或者function,如果是function,每次发送日志都会执行,通常用于获取当前页面的url等
64
+ * @param defaultExclude 设置关键字列表,用于排除一些日志,如果日志中包含配置的这些关键字,则不发送日志
65
+ * @param options host、project、logstore
66
+ * @param strMaxLength 是否开启debug模式 最大字符长度,如果关键字里包含token,则不进行截断
67
+ * @param userFormatResult 对最终发送的日志进行兜底处理,只能在init中使用
68
+ */
69
+ function init(config: initConfig): void;
70
+ }
package/lib/index.js ADDED
@@ -0,0 +1,6 @@
1
+ import SlsTracker from "@aliyun-sls/web-track-browser";
2
+ import logger from "./init";
3
+
4
+ const init = logger.logInit(SlsTracker);
5
+
6
+ export default { ...logger, init };
package/lib/init.js ADDED
@@ -0,0 +1,131 @@
1
+ const opts = {
2
+ host: "", // 所在地域的服务入口。例如cn-hangzhou.log.aliyuncs.com
3
+ project: "", // Project名称。
4
+ logstore: "", // Logstore名称。
5
+ time: 5, // 发送日志的时间间隔,默认是10秒。
6
+ count: 10, // 发送日志的数量大小,默认是10条。
7
+ };
8
+ const defaultLogData = {};
9
+ const exclude = [];
10
+ let tracker;
11
+ let userFormatResult;
12
+ let debug;
13
+
14
+ const getType = (val) => {
15
+ return Object.prototype.toString.call(val).toLocaleLowerCase().slice(8, -1);
16
+ };
17
+
18
+ let maxLength = 200;
19
+ const formatDataMaxLength = (data) => {
20
+ if (getType(data) === "object") {
21
+ return Object.keys(data).reduce((curr, key) => {
22
+ curr[key] = /token/.test(key)
23
+ ? data[key]
24
+ : formatDataMaxLength(data[key]);
25
+ return curr;
26
+ }, {});
27
+ } else if (getType(data) === "array") {
28
+ return data.map((i) => formatDataMaxLength(i));
29
+ } else if (getType(data) === "string" && data.length > maxLength) {
30
+ return `${data.slice(0, maxLength)}...${data.length - maxLength}个字已忽略`;
31
+ } else {
32
+ return data;
33
+ }
34
+ };
35
+
36
+ const formatFunctionObj = (data) => {
37
+ if (getType(data) === "object") {
38
+ return Object.keys(data).reduce((curr, key) => {
39
+ curr[key] = formatFunctionObj(data[key]);
40
+ return curr;
41
+ }, {});
42
+ } else if (getType(data) === "array") {
43
+ return data.map((i) => formatFunctionObj(i));
44
+ } else if (getType(data) === "function") {
45
+ return data();
46
+ } else {
47
+ return data;
48
+ }
49
+ };
50
+ const formatLogData = (data, type = "log") => {
51
+ const result = { ...defaultLogData, type };
52
+ if (typeof data === "string") {
53
+ Object.assign(result, { data });
54
+ } else if (typeof data === "object") {
55
+ Object.assign(result, data);
56
+ }
57
+ return formatFunctionObj(result);
58
+ };
59
+
60
+ const send = (type) => {
61
+ return function (err, activeFormatResult) {
62
+ let data = {};
63
+ if (typeof err === "string") {
64
+ data.msg = err;
65
+ } else if (typeof err === "object") {
66
+ data = { ...err };
67
+ }
68
+
69
+ const result = formatLogData(data, type);
70
+ const isExcludeMsg = Object.keys(result).find((key) => {
71
+ return exclude.find((i) => new RegExp(i, "g").test(result[key]));
72
+ });
73
+
74
+ if (!opts.host || !opts.project || !opts.logstore) {
75
+ return console.warn("日志初始化需要配置options", result);
76
+ }
77
+ let formatResultObj = formatDataMaxLength(result);
78
+
79
+ if (getType(userFormatResult) === "function") {
80
+ formatResultObj = userFormatResult(formatResultObj) || formatResultObj;
81
+ }
82
+
83
+ if (getType(activeFormatResult) === "function") {
84
+ formatResultObj = activeFormatResult(formatResultObj) || formatResultObj;
85
+ }
86
+
87
+ if (isExcludeMsg) {
88
+ debug && console.log(`logger ${type}`, formatResultObj);
89
+ return;
90
+ }
91
+ tracker.send(formatResultObj);
92
+ };
93
+ };
94
+
95
+ const error = send("error");
96
+ const warn = send("warn");
97
+ const log = send("info");
98
+ const info = send("info");
99
+
100
+ const logInit = (Tracker) => {
101
+ return (config) => {
102
+ const {
103
+ defaultData = {},
104
+ defaultExclude = [],
105
+ options = {},
106
+ strMaxLength = maxLength,
107
+ debug: defaultDebug = debug,
108
+ userFormatResult: defaultUserFormatResult = userFormatResult,
109
+ } = config;
110
+
111
+ if (defaultDebug !== undefined) {
112
+ debug = defaultDebug;
113
+ }
114
+ userFormatResult = defaultUserFormatResult;
115
+ Object.assign(defaultLogData, defaultData);
116
+ Object.assign(opts, options);
117
+ if (options.host && options.logstore && options.project) {
118
+ tracker = new Tracker(opts);
119
+ }
120
+ maxLength = strMaxLength;
121
+ exclude.push(...defaultExclude);
122
+ };
123
+ };
124
+
125
+ export default {
126
+ error,
127
+ warn,
128
+ log,
129
+ info,
130
+ logInit,
131
+ };
package/lib/mini.d.ts ADDED
@@ -0,0 +1,71 @@
1
+ import { WebTrackerMiniOptions } from "@aliyun-sls/web-track-mini";
2
+ interface StringObject {
3
+ [name: string]: string | Function;
4
+ }
5
+
6
+ /** 对最终发送的日志进行兜底处理,只能在init中使用 */
7
+ type FormatResult = (result: any) => any;
8
+
9
+ /** init 可以多次调用,最好在初次,填入 options 内容 */
10
+ interface initConfig {
11
+ /** 是否开启debug模式 */
12
+ debug?: boolean;
13
+ /** 日志默认值,可以配置字符串或者function,如果是function,每次发送日志都会执行,通常用于获取当前页面的url等 */
14
+ defaultData?: StringObject;
15
+ /** 设置关键字列表,用于排除一些日志,如果日志中包含配置的这些关键字,则不发送日志 */
16
+ defaultExclude?: string[];
17
+ options?: WebTrackerMiniOptions;
18
+ /** 最大字符长度,如果关键字里包含token,则不进行截断 */
19
+ strMaxLength?: number;
20
+ /** 对最终发送的日志进行兜底处理,只能在init中使用 */
21
+ userFormatResult?: FormatResult;
22
+ }
23
+
24
+ export = miniLog;
25
+ export as namespace miniLog;
26
+
27
+ /**
28
+ * 小程序日志,使用init初始化项目,填入 options(host、project、logstore),init可以多次调用,填入defaultData等默认信息;
29
+ * 在后续使用的时候,直接调用error|warn|log|into向sls发送日志
30
+ */
31
+ declare namespace miniLog {
32
+ /**
33
+ * @name 发送error日志
34
+ * 接收两个参数,
35
+ * @param log string | StringObject
36
+ * @param format 整理即将发送的,返回要发送的日志结果
37
+ * */
38
+ function error(str: string | StringObject, format?: FormatResult): void;
39
+ /**
40
+ * @name 发送警告日志
41
+ * 接收两个参数,
42
+ * @param log string | StringObject
43
+ * @param format 整理即将发送的,返回要发送的日志结果
44
+ * */
45
+ function warn(str: string | StringObject, format?: FormatResult): void;
46
+ /**
47
+ * @name 发送普通日志
48
+ * 接收两个参数,
49
+ * @param log string | StringObject
50
+ * @param format 整理即将发送的,返回要发送的日志结果
51
+ * */
52
+ function log(str: string | StringObject, format?: FormatResult): void;
53
+ /**
54
+ * @name 发送普通日志
55
+ * 接收两个参数,
56
+ * @param log string | StringObject
57
+ * @param format 整理即将发送的,返回要发送的日志结果
58
+ * */
59
+ function info(str: string | StringObject, format?: FormatResult): void;
60
+ /**
61
+ * @name 初始化init
62
+ * @description 可以多次调用,在发送日志之前,一定要初始化过 options(host、project、logstore) 内容
63
+ * @param debug 是否开启debug模式
64
+ * @param defaultData 日志默认值,可以配置字符串或者function,如果是function,每次发送日志都会执行,通常用于获取当前页面的url等
65
+ * @param defaultExclude 设置关键字列表,用于排除一些日志,如果日志中包含配置的这些关键字,则不发送日志
66
+ * @param options host、project、logstore
67
+ * @param strMaxLength 是否开启debug模式 最大字符长度,如果关键字里包含token,则不进行截断
68
+ * @param userFormatResult 对最终发送的日志进行兜底处理,只能在init中使用
69
+ */
70
+ function init(config: initConfig): void;
71
+ }
package/lib/mini.js ADDED
@@ -0,0 +1,6 @@
1
+ import SlsMiniTracker from "@aliyun-sls/web-track-mini";
2
+ import logger from "./init";
3
+
4
+ const init = logger.logInit(SlsMiniTracker);
5
+
6
+ export default { ...logger, init };
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "@zxhy-npm/send-sls-logger",
3
+ "version": "0.0.1",
4
+ "description": "阿里云sls的logger发送",
5
+ "scripts": {
6
+ "test": "echo \"Error: no test specified\" && exit 1"
7
+ },
8
+ "files": [
9
+ "lib"
10
+ ],
11
+ "main": "lib/index.js",
12
+ "typings": "lib/index.d.ts",
13
+ "exports": {
14
+ ".": "./lib/index.js",
15
+ "./mini": "./lib/mini.js"
16
+ },
17
+ "keywords": [
18
+ "logger",
19
+ "sls"
20
+ ],
21
+ "publishConfig": {
22
+ "access": "public"
23
+ },
24
+ "author": "liukai",
25
+ "license": "ISC",
26
+ "dependencies": {
27
+ "@aliyun-sls/web-track-browser": "^0.0.3",
28
+ "@aliyun-sls/web-track-mini": "^0.0.2"
29
+ }
30
+ }
package/readme.md ADDED
@@ -0,0 +1,44 @@
1
+ ## PC 使用方式
2
+
3
+ ```javascript
4
+ import slsLog from "send-sls-logger";
5
+ slsLog.init({
6
+ defaultData: logDefaultData, // 默认带的数据
7
+ defaultExclude: ["模拟器", "ResizeObserver"], // 需要排除的数据
8
+ options: {
9
+ host: host, // 所在地域的服务入口。例如cn-hangzhou.log.aliyuncs.com
10
+ project: project, // Project名称。
11
+ logstore: logstore, // Logstore名称。
12
+ },
13
+ });
14
+ slsLog.error({ msg: "这是一条错误日志" });
15
+ slsLog.warn({ msg: "这是一条警告日志" });
16
+ slsLog.log({ msg: "这是一条默认日志" });
17
+ slsLog.info({ msg: "这是一条默认日志" });
18
+ ```
19
+
20
+ ## 小程序 使用方式
21
+
22
+ ```javascript
23
+ import miniLog from "send-sls-logger/lib/mini";
24
+ miniLog.init({
25
+ defaultData: logDefaultData, // 默认带的数据
26
+ defaultExclude: ["模拟器", "ResizeObserver"], // 需要排除的数据
27
+ options: {
28
+ host: host, // 所在地域的服务入口。例如cn-hangzhou.log.aliyuncs.com
29
+ project: project, // Project名称。
30
+ logstore: logstore, // Logstore名称。
31
+ },
32
+ });
33
+ miniLog.error({ msg: "这是一条错误日志" });
34
+ miniLog.warn({ msg: "这是一条警告日志" });
35
+ miniLog.log({ msg: "这是一条默认日志" });
36
+ miniLog.info({ msg: "这是一条默认日志" });
37
+ ```
38
+
39
+ ## 更新备注
40
+
41
+ 0.0.6 ---------- 2022-11-23 16:59:00
42
+ 更新内容: 增加 ts 解析器
43
+ 0.0.41 ---------- 2023-02-10 14:51:18
44
+ 更新内容: 增加使用说明