|
| 1 | +# 会計freee logger |
| 2 | + |
| 3 | +出力をマスキングするためのloggerです。 |
| 4 | + |
| 5 | +## できること |
| 6 | + |
| 7 | +- 下記のメソッドを提供します。 |
| 8 | + - debug |
| 9 | + - info |
| 10 | + - warn |
| 11 | + - error |
| 12 | + - fatal |
| 13 | +- 下記キーワードがloggerの引数に含まれる時はマスキングします。 |
| 14 | + - RAW_POST_DATA |
| 15 | + - password |
| 16 | + - card_number |
| 17 | + - cvc |
| 18 | + - my_number |
| 19 | + - token |
| 20 | + - secret |
| 21 | + - Authorization |
| 22 | + - payee_code |
| 23 | + - email |
| 24 | + - phone |
| 25 | + - street_name |
| 26 | + - contact_name |
| 27 | + - first_name |
| 28 | + - last_name |
| 29 | + - given_name |
| 30 | + - family_name |
| 31 | + - display_name |
| 32 | + - transfer_name |
| 33 | + - expire_month |
| 34 | + - expire_year |
| 35 | + - wallet_keys |
| 36 | + - wallet_login_key |
| 37 | + - wallet_login_secrets |
| 38 | + - question |
| 39 | + - answer |
| 40 | + - approvalcode |
| 41 | + - approval_code |
| 42 | + - identificationnumber |
| 43 | + - identification_number |
| 44 | + - application_uid |
| 45 | + - application_secret |
| 46 | + - credentials |
| 47 | + - common_key |
| 48 | + - nonce |
| 49 | + - certificate |
| 50 | + - passphrase |
| 51 | + - crt_file |
| 52 | + - crt_pass |
| 53 | + - amount |
| 54 | + - balance |
| 55 | + - Signature |
| 56 | + - AccessKey |
| 57 | + - assertion |
| 58 | + - accessToken |
| 59 | + - refreshToken |
| 60 | + |
| 61 | +## できないこと |
| 62 | +- コンソール以外へのログ出力 |
| 63 | + |
| 64 | +## このloggerについて |
| 65 | + |
| 66 | +本 loggerは、β版のステータスとなっており、制限およびバグがある可能性があります。また、このステータスの記載が更新されるまでは、インターフェイスに変更が入る可能性がありますので、ご利用の際はご留意ください。 |
| 67 | + |
| 68 | + |
| 69 | +本 logger を利用する前に下記をご確認ください。 |
| 70 | + |
| 71 | +- node上で動作すること |
| 72 | + |
| 73 | + |
| 74 | +### インストール |
| 75 | + |
| 76 | +該当のプロジェクトディレクトリで以下のコマンドを実行してください。 |
| 77 | + |
| 78 | +`npm install freee-logger` |
| 79 | + |
| 80 | +### 開発 |
| 81 | + |
| 82 | +- リリースファイル作成時 |
| 83 | + - lib/index.d.ts, lib/index.js, lib/index.js.mapが更新されます。 |
| 84 | + |
| 85 | +``` |
| 86 | +
|
| 87 | +npm run build |
| 88 | +
|
| 89 | +``` |
| 90 | + |
| 91 | +- ローカルでの修正、動作確認時 |
| 92 | + |
| 93 | +``` |
| 94 | +npm run build |
| 95 | +
|
| 96 | +``` |
| 97 | + |
| 98 | + |
| 99 | +- eslintチェック |
| 100 | + |
| 101 | +``` |
| 102 | +npm run lint |
| 103 | +
|
| 104 | +``` |
| 105 | + |
| 106 | +- eslint fix |
| 107 | + - 自動修正可能なファイルは修正されます。 |
| 108 | + |
| 109 | +``` |
| 110 | +npm run lint_fix |
| 111 | +
|
| 112 | +``` |
| 113 | + |
| 114 | + |
| 115 | +### サンプル |
| 116 | + |
| 117 | + |
| 118 | +- デフォルトログ出力 |
| 119 | + |
| 120 | +``` |
| 121 | +const logger = getLogger('logger'); |
| 122 | +const maskingData = { |
| 123 | + password: 'pass', |
| 124 | + test_1: { accessToken: 'test' }, |
| 125 | + test2_1: { test2_2: { card_number: 'card_number' } }, |
| 126 | + test3_1: { |
| 127 | + common_key: 'common_key', |
| 128 | + test3_2: { |
| 129 | + payee_code: 'payee_code', |
| 130 | + test3_3: { |
| 131 | + street_name: 'street_name', |
| 132 | + test3_4: { |
| 133 | + AccessKey: 'AccessKey', // eslint-disable-line @typescript-eslint/naming-convention |
| 134 | + test3_5: { |
| 135 | + first_name: 'first_name', |
| 136 | + test3_6: { |
| 137 | + last_name: 'last_name', |
| 138 | + test3_7: { |
| 139 | + expire_year: 'expire_year' |
| 140 | + } |
| 141 | + } |
| 142 | + } |
| 143 | + } |
| 144 | + } |
| 145 | + } |
| 146 | + }, |
| 147 | + 'test.test': 'test.test' |
| 148 | +}; |
| 149 | +logger.debug(maskingData); |
| 150 | +
|
| 151 | +
|
| 152 | +# キーワードがマスキングされて出力されます。 |
| 153 | +[2021-04-26T15:36:33.098] [DEBUG] logger - {"password":"****","test_1":{"accessToken":"****"},"test2_1":{"test2_2":{"card_number":"***********"}},"test3_1":{"common_key":"**********","test3_2":{"payee_code":"**********","test3_3":{"street_name":"***********","test3_4":{"AccessKey":"*********","test3_5":{"first_name":"too deep","test3_6":"too deep"}}}}},"test.test":"test.test"} |
| 154 | +
|
| 155 | +``` |
| 156 | + |
| 157 | +- マスキングキーワードを変更して、ログ出力 |
| 158 | + - 下記ではキーワードを```test2_1```, ```test.test```のみに変更しています。 |
| 159 | + |
| 160 | +``` |
| 161 | +const maskingFields = ['test2_1', 'test.test']; |
| 162 | +const logger = getLogger('masking', maskingFields); |
| 163 | +const maskingData = { |
| 164 | + password: 'pass', |
| 165 | + test_1: { accessToken: 'test' }, |
| 166 | + test2_1: { test2_2: { card_number: 'card_number' } }, |
| 167 | + test3_1: { |
| 168 | + common_key: 'common_key', |
| 169 | + test3_2: { |
| 170 | + payee_code: 'payee_code', |
| 171 | + test3_3: { |
| 172 | + street_name: 'street_name', |
| 173 | + test3_4: { |
| 174 | + AccessKey: 'AccessKey', // eslint-disable-line @typescript-eslint/naming-convention |
| 175 | + test3_5: { |
| 176 | + first_name: 'first_name', |
| 177 | + test3_6: { |
| 178 | + last_name: 'last_name', |
| 179 | + test3_7: { |
| 180 | + expire_year: 'expire_year' |
| 181 | + } |
| 182 | + } |
| 183 | + } |
| 184 | + } |
| 185 | + } |
| 186 | + } |
| 187 | + }, |
| 188 | + 'test.test': 'test.test' |
| 189 | +}; |
| 190 | +logger.debug(maskingData); |
| 191 | +
|
| 192 | +
|
| 193 | +# 指定したキーワードがマスキングされて出力されます。 |
| 194 | +[2021-04-26T15:31:19.035] [DEBUG] masking - {"password":"pass","test_1":{"accessToken":"test"},"test2_1":"***************","test3_1":{"common_key":"common_key","test3_2":{"payee_code":"payee_code","test3_3":{"street_name":"street_name","test3_4":{"AccessKey":"AccessKey","test3_5":{"first_name":"too deep","test3_6":"too deep"}}}}},"test.test":"*********"} |
| 195 | +
|
| 196 | +
|
| 197 | +``` |
| 198 | + |
| 199 | + |
| 200 | +- マスキングの深さ(デフォルト5)を変更 |
| 201 | + - getLoggerの第3引数に深さを指定できます。 |
| 202 | + - 第3引数のマスキングキーワードをデフォルトのままにする場合はundefinedを指定します。 |
| 203 | + |
| 204 | +``` |
| 205 | +const maxDepth = 6; |
| 206 | +const logger = getLogger('masking', undefined, maxDepth); |
| 207 | +const maskingData = { |
| 208 | + password: 'pass', |
| 209 | + test_1: { accessToken: 'test' }, |
| 210 | + test2_1: { test2_2: { card_number: 'card_number' } }, |
| 211 | + test3_1: { |
| 212 | + common_key: 'common_key', |
| 213 | + test3_2: { |
| 214 | + payee_code: 'payee_code', |
| 215 | + test3_3: { |
| 216 | + street_name: 'street_name', |
| 217 | + test3_4: { |
| 218 | + AccessKey: 'AccessKey', // eslint-disable-line @typescript-eslint/naming-convention |
| 219 | + test3_5: { |
| 220 | + first_name: 'first_name', |
| 221 | + test3_6: { |
| 222 | + last_name: 'last_name', |
| 223 | + test3_7: { |
| 224 | + expire_year: 'expire_year' |
| 225 | + } |
| 226 | + } |
| 227 | + } |
| 228 | + } |
| 229 | + } |
| 230 | + } |
| 231 | + }, |
| 232 | + 'test.test': 'test.test' |
| 233 | +}; |
| 234 | +logger.debug(maskingData); |
| 235 | +
|
| 236 | +
|
| 237 | +# 指定した改装までマスキングされ、以降は切り落とされます。 |
| 238 | +[2021-04-26T15:28:42.563] [DEBUG] masking - {"password":"****","test_1":{"accessToken":"****"},"test2_1":{"test2_2":{"card_number":"***********"}},"test3_1":{"common_key":"**********","test3_2":{"payee_code":"**********","test3_3":{"street_name":"***********","test3_4":{"AccessKey":"*********","test3_5":{"first_name":"**********","test3_6":{"last_name":"too deep","test3_7":"too deep"}}}}}},"test.test":"test.test"} |
| 239 | +
|
| 240 | +``` |
| 241 | + |
| 242 | + |
| 243 | +## ライセンス |
| 244 | + |
| 245 | +ライセンスについては下記をご参照ください。 |
| 246 | + |
| 247 | +[MIT License](./LICENSE) |
0 commit comments