快捷请求和交易的审计记录员
目录
安装
npm i @dyihoon90/glogging
说明
光荣是大众的包裹 winston 伐木图书馆.
该库为下列使用案例提供方便方法:
- 结构化伐木
- 使用 Express 中间软件登录请求和响应
- 在函数、类和类方法中使用装饰器进行日志
通过在 Express 服务器中使用此库,您可以得到:
| 福利 | 用吗? |
|---|---|
| 在SG背景下编辑敏感数据 | 自动编辑 NRIC 敏感信息( S) |
| 标准化日志格式 | 标准 logger.info() |
| Express服务器的标准请求和响应记录 | 添加 光滑快取中间软件 将自动生成对收到的请求和发出的答复的日志 |
| 对函数、类、类方法进行无侵扰性记录( C) | 使用类方法装饰函数( C) 装饰器 将登录函数引用。 也可以登录函数返回的内容 |
使用 Express 服务器中的 Correlate 函数引用 trxId | 使用 enhanceReqWithTransactionAndTime 内 中间软件 应添加 trxId 请求. 传递请求对象为 第一个参数 在所有已装饰的函数中 & Glogger 装饰器将取取请求的上下文, 如 trxId。 。 。 . |
使用微服务对请求进行校正 trxId | 使用 enhanceReqWithTransactionAndTime 内 中间软件 应添加 trxId 请求.通过这个 trxId 到其它使用 Glogger 的 Express 服务器, 它们会输出相同的日志 w trxId |
GLogger 读取器
构造一个日志实例 。 和Winton做的一样.
构造器
const logger = new GLogger({ loggingMode: LoggingMode.LOCAL });
构建日志实例时, 不同环境有3种模式
| 模式 | 说明 |
|---|---|
| 当地 |
|
| 大卫 |
|
| 生产 |
|
要覆盖上面每个模式的默认行为, 您可以使用 overrideDefault
const logger = new GLogger({
loggingMode: LoggingMode.LOCAL,
overrideDefault: { alwaysWriteToConsole: true, consoleLogSectionSeparator: '' }
});
覆盖默认配置
| 配置 | 目的 |
|---|---|
| 总是写到控制台 | 无论环境如何,总是给控制台写信。 对AWS Lambda 有用 |
| 控制台日志区域分隔符 | 覆盖控制台日志的默认区域分隔符字符 。 默认为新行 “\n” 。 对 AWS Lambda 有用 |
实例方法
| 方法 | 目的 |
|---|---|
| 调试 | 创建级别调试的日志对象 |
| 资讯 | 创建级别信息的日志对象 |
| 警告( e) | 创建级别警告的日志对象 |
| 错误 | 创建级别错误的日志对象 |
| 切换VerboseModeOn | 切换调试模式以查看正在发送到以上日志方法的内容 |
| 添加后勤运输 | 添加一个 winton 日志传输来传输日志对象 |
实例属性
| 财产 | 目的 |
|---|---|
| 胜顿 | 显示下方的 Winton 日志对象 |
表示中间软件
这个库输出以下的快取中件. 见 中间dlware 示例 如何将这些中间软件放入您的快递服务器
| 中间软件 | 目的 |
|---|---|
| 增强交易和时间的Req | 用 req.reqStartTime InEpochMillis & req.uuid 增强请求(如果 req.uuid 不存在) |
| 反应错误 | 厂家创建错误日志中间软件。 记录器中间软件发生错误 logger.warn 当它从上一个中间软件收到错误对象时 |
| 响应 | 制造成功日志的中间软件。 成功日志中间软件 logger.info 当响应状态代码 < 400 |
Express Miderware将登录您的Express服务器所有收到的请求和发出的响应,其元数据如下:
| 元数据 | 全名 | 这是什么? | 示例 |
|---|---|---|---|
| trxId 函数 | 交易编号 | 随机生成的 uuidv4 在 Express 请求中添加了 enhanceReqWithTransactionAndTime 中间软件。 如果使用多个微服务, 可以通过ID来跟踪请求 | "e6c0ea38-f459-4f84-a9b6-873255e95896"(中文(简体) ) |
| trx 模块 | 交易模块 | 交易模块 | "用户" |
| trx Name | 交易名称 | 这将是装饰函数的名称 | 用户列表 |
| 文件Name | 文件名称 | 文件名称 | “服务/用户.服务.ts” |
| 用户键 | 用户键 | 这是用户的JWT. 您需要手动将已解码的 JWT 设置在 Express 请求的“ 用户” 属性下 . | { "iss": "issuer", "sub": "subject", "aud": "audience", "jti": "tokenid", "exp": 123, "iat": 456} |
| 时间 : | 以毫秒计的时间 | 请求从收到请求到发出答复的时间 | 61877 (英语) |
| tx 状态 | 交易状况 | 交易成功是由成功执行或返回已解约的函数决定的。 交易失败是定义函数丢出或返回被拒绝的许诺. | "失败"/"FAILURE" |
| 额外信息.url | 網址 | 完整 URL 路径 | '/列表?类型 [] = leave" |
| 额外信息.方法 | 方法 | HTTP 方法 | "GET" (GET) (英语) |
| 新增信息. 结果 | 结果 | 返回函数的结果 。 只有选项才登录 。 toogResult 设置为 true选项。 从已登录结果中添加对象属性以编辑的属性 | { aPublicValue: 'OK', 'aSecretValue': '[REDACTED]' |
| 额外信息. erroor | 错误 | 函数所抛出的错误, 只当状态为“ FAILURE ” 时 | 新的错误( 错误 ) ” |
Express服务的类、 方法与函数装饰器( Express/ Koa 服务器在框外的工作)
目的
光滑装饰器会为应用程序中的函数提供标准化的日志.
例如, 您的一条路由引用了一个函数, 该函数会调用您 DB 中的某个项, 然后返回这些系统的结果 .
您可以装饰让 DB 调用该函数获取丰富视图的函数引用, 包括您用户调用哪个 Express 路由来引用此函数, 交易ID, 请求用户的一些细节( 如果在请求中可用), 以及结果/ errors
在 Express / Koa 服务器中用于装饰功能的框外工作 .
元数据
正在登录的所有功能必须包含 IExpressRequest 对象作为第一个参数,即使函数本身不需要它.
你需要使用这个 enhanceReqWithTransactionAndTime 上一个 trxId 打开 timeTakenInMillis 工作的时候.
装饰器将使用下列元数据登录功能:
| 元数据 | 全名 | 这是什么? | 示例 |
|---|---|---|---|
| trxId 函数 | 交易编号 | 随机生成的 uuidv4 在 Express 请求中添加了 enhanceReqWithTransactionAndTime 中间软件。 如果使用多个微服务, 可以通过ID来跟踪请求 | "e6c0ea38-f459-4f84-a9b6-873255e95896"(中文(简体) ) |
| trx 模块 | 交易模块 | 交易模块 | "用户" |
| trx Name | 交易名称 | 这将是装饰函数的名称 | 用户列表 |
| 文件Name | 文件名称 | 文件名称 | “服务/用户.服务.ts” |
| 用户键 | 用户键 | 这是用户的JWT. 您需要手动将已解码的 JWT 设置在 Express 请求的“ 用户” 属性下 . | { "iss": "issuer", "sub": "subject", "aud": "audience", "jti": "tokenid", "exp": 123, "iat": 456} |
| 时间 : | 以毫秒计的时间 | 请求从收到请求到发出答复的时间 | 61877 (英语) |
| tx 状态 | 交易状况 | 交易成功是由成功执行或返回已解约的函数决定的。 交易失败是定义函数丢出或返回被拒绝的许诺. | "失败"/"FAILURE" |
| 额外信息.url | 網址 | 完整 URL 路径 | '/列表?类型 [] = leave" |
| 额外信息.方法 | 方法 | HTTP 方法 | "GET" (GET) (英语) |
| 新增信息. 结果 | 结果 | 返回函数的结果 。 只有选项才登录 。 toogResult 设置为 true选项。 从已登录结果中添加对象属性以编辑的属性 | { aPublicValue: 'OK', 'aSecretValue': '[REDACTED]' |
| 额外信息. erroor | 错误 | 函数所抛出的错误, 只当状态为“ FAILURE ” 时 | 新的错误( 错误 ) ” |
装饰者
光滑装饰器允许用户以标准化方式登录函数和类方法引用 w/o 丢弃 logger.info() 整个功能。 这让你的代码更干净,更容易读取.
此库输出以下装饰器 .
| 装饰厂 | 目的 |
|---|---|
| 日志分类 | 装饰除此之外的所有类方法 constructor |
| 逻辑方法 | 装饰类方法 |
| 日志函数 | 装饰原始函数 |
以上均为装饰厂. 为了创建装饰器,它们采用以下参数:
| 参数 | 解释 | 需要吗? | 示例 |
|---|---|---|---|
| 日志 | a GLogger 实例 | 所需经费 | 新建 GLogger () |
| 元数据 | 元数据,包括交易类别、交易模块、可选文件名( c) | 所需经费 | |
| 元数据.trx 类别 | 交易类别 | 所需经费 | TransactionCategory.TRANS |
| 元数据.trxModule | 交易模块 | 所需经费 | "用户" |
| 选项 | 可选选项参数 | 选项 | |
| 选项.toLogResult | 是否记录已装饰函数的返回值。 默认为假. | 选项 | true编号 :false |
| 选项.toLog SuccessTxn | 是否记录装饰函数的成功。 默认为真. | 选项 | true编号 :false |
| 选项. redacted Propertys | 若为 options.toLogResult 设置为正则,使用此数组获取函数返回值的属性。 既适用于有嵌入特性的物体,也适用于阵列内部的物体。 也可以通过整数来编辑数组中的特定项目 | 选项 | ['我的秘密财产',0] |
实例
参见实例文件夹供使用 .
或者你可以复制这个 repo 并运行:
npm i这么说吧,npm run example用于基准日志和装饰演示npm run example-server中间软件演示
解决问题
| 假设 | 决议 |
|---|---|
| 获取“ ” 交易ID | 所有正在登录的函数必须包含在请求对象中 IExpressRequest 作为其第一个参数,即使函数本身不需要它. |