အသုံးပြုပုံ
Property injection သာ အသုံးပြုရပါသည် — logger decorator များကို constructor parameter ပေါ်တွင် မထားရပါ။ Host class သည် DI က စီမံသော class ဖြစ်ရမည်ဖြစ်ပြီး၊ @Service သို့မဟုတ် module တွင် မှတ်ပုံတင်ထားသော @Controller ဖြစ်ရပါသည်။
- အရေးကြီးသော လုပ်ဆောင်ချက်များနှင့် lifecycle ဖြစ်ရပ်များကို log ရေးရပါသည် (seed ကျော်ခြင်း/ပြီးစီးခြင်း၊ job စတင်/ပြီးဆုံးခြင်း၊ uninstall ရှင်းလင်းမှု)
- Debug လုပ်ရန် လုံလောက်သော context (id၊ plugin အမည်) ထည့်ရပါသည် — secret ပါသော request body အပြည့်ကို မရေးရပါ
- စကားဝှက်၊ token၊ API key နှင့် အခြား ထိခိုက်လွယ်သော အချက်အလက်များကို မ log ရေးရပါ
- ကိုယ်ပိုင် console wrapper မရေးဘဲ @InjectBuiltinLogger ကို ဦးစားပေးရပါသည်
- အသုံးပြုသူမြင်ရသော admin လုပ်ဆောင်ချက်များအတွက် @AuditLogMiddleware နှင့် တွဲသုံးရပါသည် — logger သည် လုပ်ငန်းစဉ်/runtime စစ်ဆေးရန် ဖြစ်ပါသည်
1import { InjectBuiltinLogger, Service } from "@quan-erp/shared-backend-core";
2import type { Loggable } from "@quan-erp/shared-backend-core";
3
4@Service()
5export class OrderService {
6 @InjectBuiltinLogger()
7 logger: Loggable;
8
9 async create() {
10 this.logger.log("Creating order");
11 // …
12 this.logger.log("Order created");
13 }
14}1import {
2 InjectBuiltinLogger,
3 OnInit,
4 Service,
5} from "@quan-erp/shared-backend-core";
6import type { Loggable } from "@quan-erp/shared-backend-core";
7
8@Service()
9export class SeedService {
10 @InjectBuiltinLogger()
11 logger: Loggable;
12
13 @OnInit()
14 async init() {
15 if (alreadySeeded) {
16 this.logger.log("Seeding skipped (already initialized)");
17 return;
18 }
19 // … seed …
20 this.logger.log("Module seeded successfully");
21 }
22}Builtin logger
@InjectBuiltinLogger() သည် @InjectLogger(BuiltinLogger) ၏ တိုတောင်းသော ပုံစံဖြစ်ပါသည်။ Property ကို Loggable သို့မဟုတ် BuiltinLogger အဖြစ် ကြေညာရပါသည်။ Service နှင့် controller နှစ်မျိုးလုံးတွင် အလုပ်လုပ်ပါသည်။
- @InjectBuiltinLogger() — platform BuiltinLogger ကို inject လုပ်ပါသည်
- @quan-erp/shared-backend-core မှ import လုပ်ရပါသည်
- Message များကို တိုတောင်း၍ ရှာဖွေရလွယ်ကူအောင် ရေးရပါသည် (plugin/job အမည် ထည့်ပါ)
1import {
2 BuiltinLogger,
3 InjectBuiltinLogger,
4 InjectLogger,
5 Service,
6} from "@quan-erp/shared-backend-core";
7import type { Loggable } from "@quan-erp/shared-backend-core";
8
9@Service()
10export class OrderService {
11 @InjectBuiltinLogger()
12 logger: Loggable;
13
14 // equivalent
15 @InjectLogger(BuiltinLogger)
16 builtinLogger: BuiltinLogger;
17}ကိုယ်ပိုင် logger ဖန်တီးခြင်း
Loggable ကို implement လုပ်ပြီး @Service() တပ်ကာ plugin ၏ @Module providers တွင် စာရင်းသွင်းရပါသည်။ ထို့နောက် @InjectLogger(YourLogger) ဖြင့် inject လုပ်ရပါသည်။ စိတ်ကြိုက် ပုံစံ သို့မဟုတ် sink မလိုအပ်သ၍ BuiltinLogger ကိုသာ ဦးစားပေးရပါသည်။
- ၁။ Loggable ကို implement လုပ်သော @Service() class ရေးရပါသည် (log / error / …)
- ၂။ ထို class ကို @Module({ providers: [...] }) ထဲတွင် ထည့်ရပါသည်
- ၃။ Property @InjectLogger(MyPluginLogger) ဖြင့် inject လုပ်ရပါသည် — constructor injection မသုံးရပါ
1import { Service } from "@quan-erp/shared-backend-core";
2import type { Loggable } from "@quan-erp/shared-backend-core";
3
4@Service()
5export class MyPluginLogger implements Loggable {
6 private prefix = "[my-plugin]";
7
8 log(message: string, ...args: unknown[]) {
9 console.log(this.prefix, message, ...args);
10 }
11
12 error(message: string, ...args: unknown[]) {
13 console.error(this.prefix, message, ...args);
14 }
15
16 warn(message: string, ...args: unknown[]) {
17 console.warn(this.prefix, message, ...args);
18 }
19}1import { Module } from "@quan-erp/shared-backend-core";
2import { OrderController } from "./order.controller.js";
3import { OrderService } from "./order.service.js";
4import { MyPluginLogger } from "./my-plugin.logger.js";
5
6@Module({
7 name: "my-plugin",
8 providers: [OrderService, MyPluginLogger],
9 controllers: [OrderController],
10 entities: [],
11})
12export class MyPluginModule {}1import { InjectLogger, Service } from "@quan-erp/shared-backend-core";
2import { MyPluginLogger } from "./my-plugin.logger.js";
3
4@Service()
5export class OrderService {
6 @InjectLogger(MyPluginLogger)
7 logger: MyPluginLogger;
8
9 async create(orderId: string) {
10 this.logger.log(`Creating order ${orderId}`);
11 try {
12 // …
13 this.logger.log(`Order ${orderId} created`);
14 } catch (err) {
15 this.logger.error(`Failed to create order ${orderId}`, err);
16 throw err;
17 }
18 }
19}