@nm-logger/logger 1.2.2 → 1.2.3

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/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # @nm-logger/logger v1.2.2
1
+ # @nm-logger/logger v1.2.3
2
2
 
3
3
  Minimal JSON logger for Express:
4
4
 
@@ -12,7 +12,8 @@ Minimal JSON logger for Express:
12
12
  - S3: one JSON file per day per category, append (read+merge+put)
13
13
  - Previous day's local folder is removed when the date changes
14
14
  - `employee_id` taken from `req.user.employee_id || req.user.emp_code || req.user.id`
15
- - `baseDir` can be absolute (e.g. `/home/VE/hiveLogs`)
15
+ - `baseDir` can be absolute (e.g. `/home/logs`)
16
+
16
17
 
17
18
  Basic usage:
18
19
 
@@ -25,17 +26,23 @@ const nm_logger = new Logger(
25
26
  accessKeyId: process.env.AWS_ACCESS_KEY_ID,
26
27
  secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
27
28
  region: "us-east-1",
28
- bucket: "nmhive"
29
+ bucket: "bucket-name"
29
30
  },
30
31
  {
31
- baseDir: "/home/logger/logs",
32
+ baseDir: "/home/logs",
32
33
  uploadIntervalMs: 60_000,
33
34
  maskFields: ["aadhaar", "pan"]
34
35
  }
35
36
  );
36
37
 
38
+ Folder permission
39
+
40
+ - mkdir -p /home/logs
41
+ - chmod -R 777 /home/logs
42
+
37
43
  app.use(nm_logger.requestLoggerMiddleware());
38
44
  app.use("/api", routes);
39
45
  app.use(nm_logger.expressMiddleware());
40
46
  nm_logger.attachAxiosLogger(axios);
41
- ```
47
+
48
+ ```
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@nm-logger/logger","version":"1.2.2","description":"Express JSON logger with daily success/error/external logs, S3 append uploads, and configurable baseDir.","main":"index.js","types":"index.d.ts","license":"MIT","dependencies":{"@aws-sdk/client-s3":"^3.600.0","fs-extra":"^11.1.1"}}
1
+ {"name":"@nm-logger/logger","version":"1.2.3","description":"Express JSON logger with daily success/error/external logs, S3 append uploads, and configurable baseDir.","main":"index.js","types":"index.d.ts","license":"MIT","dependencies":{"@aws-sdk/client-s3":"^3.600.0","fs-extra":"^11.1.1"}}
package/src/Logger.js CHANGED
@@ -1,7 +1,7 @@
1
1
  const LogWriter=require("./LogWriter");const Queue=require("./Queue");const S3Uploader=require("./S3Uploader");const DailyWatcher=require("./DailyWatcher");const{getApiType,maskSensitive}=require("./utils");const fs=require("fs-extra");const path=require("path");
2
- class Logger{constructor(s3cfg={},opt={}){let dir="logs";try{if(opt.baseDir){const r=path.resolve(opt.baseDir);fs.ensureDirSync(r);dir=r;}}catch(e){console.error("[@nm-logger] Invalid baseDir, fallback to ./logs",e.message);}this.baseDir=dir;this.logWriter=new LogWriter(this.baseDir);this.queue=new Queue();this.s3=new S3Uploader(s3cfg);this.maskFields=(opt.maskFields||[]).map(x=>String(x).toLowerCase());new DailyWatcher(this.baseDir,this.queue,this.s3,{uploadIntervalMs:opt.uploadIntervalMs||60000});}
2
+ class Logger{constructor(s3cfg={},opt={}){let dir=null;try{if(opt.baseDir){const resolved=path.resolve(opt.baseDir);const parent=path.dirname(resolved);fs.ensureDirSync(parent);fs.ensureDirSync(resolved);dir=resolved;console.log("[nm-logger] ✔ Using baseDir:",dir);}}catch(e){console.error("[nm-logger] baseDir INVALID:",e.message);}if(!dir){dir=path.resolve("logs");fs.ensureDirSync(dir);console.error("[nm-logger] ⚠ Falling back to:",dir);}this.baseDir=dir;this.logWriter=new LogWriter(this.baseDir);this.queue=new Queue();this.s3=new S3Uploader(s3cfg);this.maskFields=(opt.maskFields||[]).map(x=>String(x).toLowerCase());new DailyWatcher(this.baseDir,this.queue,this.s3,{uploadIntervalMs:opt.uploadIntervalMs||60000});}
3
3
  mask(v){return maskSensitive(v,this.maskFields);}
4
- buildBaseLog(req,employee_id=""){const url=req&&req.originalUrl||"";const body=req&&req.body||{};const params={params:req&&req.params||{},query:req&&req.query||{}};const mBody=this.mask(body);const mParams=this.mask(params);const method=(req&&req.method||"").toUpperCase();const emp=employee_id||(req&&req.user&&(req.user.employee_id||req.user.emp_code||req.user.id))||"";return{url,body:JSON.stringify(mBody||{}),params:JSON.stringify(mParams||{}),type:getApiType(url),method,error:"",employee_id:emp};}
4
+ buildBaseLog(req,employee_id=""){const url=req&&req.originalUrl||"";const body=req&&req.body||{};const params={params:req&&req.params||{},query:req&&req.query||{}};const mBody=this.mask(body);const mParams=this.mask(params);const method=(req&&req.method||"").toUpperCase();const emp=employee_id||req?.employee_id||(req&&req.user&&(req.user.employee_id||req.user.emp_code||req.user.id))||"";return{url,body:JSON.stringify(mBody||{}),params:JSON.stringify(mParams||{}),type:getApiType(url),method,error:"",employee_id:emp};}
5
5
  async logError(err,req,employee_id=""){const base=this.buildBaseLog(req||{},employee_id);const d={...base,error:err&&err.message?err.message:String(err||"")};await this.logWriter.writeLog(d,"error");}
6
6
  async logRequest(req,employee_id=""){const d=this.buildBaseLog(req,employee_id);await this.logWriter.writeLog(d,"success");}
7
7
  async logExternalApi({url,method,data,params,error,employeeId}){const mb=this.mask(data||{});const mp=this.mask(params||{});const d={url:url||"",body:JSON.stringify(mb||{}),params:JSON.stringify(mp||{}),type:"external_api",method:(method||"").toUpperCase(),error:error||"",employee_id:employeeId||""};await this.logWriter.writeLog(d,"external");}