|
@@ -1,21 +1,58 @@
|
|
|
-// type x =
|
|
|
+import { store } from "@/store/store";
|
|
|
+import moment from "moment";
|
|
|
+import { omit } from "lodash-es";
|
|
|
+
|
|
|
type LogDetail = {
|
|
|
level?: "debug" | "log" | "warn" | "error";
|
|
|
/** channels. 往哪些渠道放日志? */
|
|
|
cnl?: ("console" | "local" | "server" | "bd")[];
|
|
|
- /** page url */
|
|
|
- pgu?: string;
|
|
|
- /** statck 错误信息的stack,单条信息也放此处 */
|
|
|
+ /** 操作的类型,方便在日志里面查找相同类型的操作 */
|
|
|
+ key?: string;
|
|
|
+ /** page name */
|
|
|
+ pgn?: string;
|
|
|
+ /** page url: AUTO => 自动从location.path获取 */
|
|
|
+ pgu?: "AUTO" | `/${string}`;
|
|
|
+ /** action 引发本次日志的操作 */
|
|
|
+ act?: string;
|
|
|
+ /** statck 错误信息的stack,单条错误信息也放此处 */
|
|
|
stk?: string;
|
|
|
/** detail 详细信息 */
|
|
|
dtl?: string;
|
|
|
- /** 扩展字段的集合。TODO: 消除这里的any */
|
|
|
+ /** api url */
|
|
|
+ aul?: string;
|
|
|
+ /** api status */
|
|
|
+ aus?: string;
|
|
|
+ /** error json */
|
|
|
+ ejn?: string;
|
|
|
+ /** 扩展字段的集合。TODO: 消除这里的any,提示不允许出去前面的字段 */
|
|
|
ext?: any;
|
|
|
};
|
|
|
-/** 记录重要日志到多个source */
|
|
|
+/** 记录重要日志到多个source
|
|
|
+ * 示例:
|
|
|
+ * @param detail.key - '本地人脸比对'
|
|
|
+ * @param detail.pgn - '登录页面' | '在线考试列表页面'
|
|
|
+ * @param detail.act - '点击登录按钮'
|
|
|
+ * @param detail.stk - error.stack
|
|
|
+ * @param detail.dtl - '第一次点击登录' | '第二次点击登录' // 方便查询
|
|
|
+ * @param detail.aul - '/api/login'
|
|
|
+ * @param detail.aus - '500'
|
|
|
+ * @param detail.ejn - JSON.stringify({a: 0})
|
|
|
+ * @param detail.ext - {UA: 'chrome 99'}
|
|
|
+ */
|
|
|
export default function (detail: LogDetail) {
|
|
|
- const newDetail = Object.assign({ level: "log" }, detail);
|
|
|
- if (newDetail.cnl?.includes("console")) {
|
|
|
+ const user = store.user;
|
|
|
+ const defaultFileds = {
|
|
|
+ level: "log",
|
|
|
+ uuidForEcs: localStorage.getItem("uuidForEcs"),
|
|
|
+ clientDate: moment().format("YYYY-MM-DD HH:mm:ss.SSS"),
|
|
|
+ ...(user?.id ? { userId: user.id } : {}),
|
|
|
+ };
|
|
|
+ const newDetail = Object.assign(
|
|
|
+ defaultFileds,
|
|
|
+ omit(detail, "ext"),
|
|
|
+ detail.ext
|
|
|
+ );
|
|
|
+ if (detail.cnl?.includes("console")) {
|
|
|
console.log(newDetail);
|
|
|
}
|
|
|
}
|