@hemia/logger
Version:
Logger estructurado con soporte para trazabilidad, MongoDB y DI con tsyringe.
2 lines (1 loc) • 4.09 kB
JavaScript
import"reflect-metadata";import{injectable as e}from"tsyringe";import{NoSQLRepository as r}from"@hemia/db-manager";import{Schema as t}from"mongoose";var i,n;"function"==typeof SuppressedError&&SuppressedError,function(e){e.INFO="info",e.WARNING="warning",e.ERROR="error",e.DEBUG="debug",e.LOG="log"}(i||(i={})),function(e){e.logs="logs",e.InfoLogs="info_logs",e.ErrorLogs="error_logs",e.WarningLogs="warnings_logs",e.DebugLogs="debug_logs"}(n||(n={}));const o={[i.LOG]:n.logs,[i.INFO]:n.InfoLogs,[i.WARNING]:n.WarningLogs,[i.ERROR]:n.ErrorLogs,[i.DEBUG]:n.DebugLogs};let a=class{constructor(e){this.repository=e}async save(e,r,t,i={}){if(!this.repository)throw new Error("Logger no inicializado. Llama a Logger primero.");const n={logLevel:e,timestamp:(new Date).toISOString(),message:r,traceId:t,...i};return await this.repository.create(n)}async log(e,r,t,i){return await this.save(e,r,t,i)}async error(e,r,t){return await this.save(i.ERROR,e,r,t)}async warning(e,r,t){return await this.save(i.WARNING,e,r,t)}async info(e,r,t){return await this.save(i.INFO,e,r,t)}async debug(e,r,t){return await this.save(i.DEBUG,e,r,t)}async find(e,r){return await this.repository.find(e,r)}async findOne(e){return await this.repository.findOne(e)}async getById(e){return await this.repository.findById(e)}async update(e,r,t){return await this.repository.update(e,r,t)}async delete(e,r){return await this.repository.delete(e,r)}};a=function(e,r,t,i){var n,o=arguments.length,a=o<3?r:null===i?i=Object.getOwnPropertyDescriptor(r,t):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,r,t,i);else for(var d=e.length-1;d>=0;d--)(n=e[d])&&(a=(o<3?n(a):o>3?n(r,t,a):n(r,t))||a);return o>3&&a&&Object.defineProperty(r,t,a),a}([e(),function(e,r){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,r)}("design:paramtypes",[r])],a);const d=new t({name:{type:String,required:!0},version:{type:String,required:!0}},{_id:!1}),s=new t({name:{type:String,required:!0}},{_id:!1}),p=new t({error:{type:String,required:!1},details:{type:String,required:!1},data:{type:t.Types.Mixed}},{_id:!1}),u=new t({headers:{type:Map,required:!0},body:{type:t.Types.Mixed,required:!0}},{_id:!1}),y=new t({statusCode:{type:Number,required:!0},headers:{type:Map},body:{type:p}},{_id:!1}),g=new t({id:{type:String,required:!0},role:{type:String,required:!0},ip:{type:String,required:!0}},{_id:!1}),c=new t({requestId:{type:String,required:!1},method:{type:String,required:!1},url:{type:String,required:!1},request:{type:u,required:!1},user:{type:g}},{_id:!1}),q=new t({rss:{type:Number,required:!0},heapTotal:{type:Number,required:!0},heapUsed:{type:Number,required:!0}},{_id:!1}),m=new t({traceId:{type:String,required:!1},spanId:{type:String,required:!1},operation:{type:String},elapsedTimeMs:{type:Number},memoryUsage:{type:q,required:!1},additionalInfo:{type:t.Types.Mixed,required:!1}},{_id:!1}),l=new t({user:{type:Number,required:!0},system:{type:Number,required:!0}},{_id:!1}),f=new t({hostname:{type:String,required:!0},ip:{type:String,required:!0},platform:{type:String,required:!0},arch:{type:String,required:!0},cpuUsage:{type:l}},{_id:!1}),w=new t({stage:{type:String,required:!0},message:{type:String,required:!0},timestamp:{type:Number,default:Date.now}},{_id:!1}),S=new t({projectId:{type:String,required:!0,index:!0},traceId:{type:String,required:!0,unique:!0,index:!0},logLevel:{type:String,enum:i,required:!0,index:!0},timestamp:{type:String,required:!0,index:-1},message:{type:String,required:!0},application:{type:d,required:!1},environment:{type:s,required:!1},requestContext:{type:c,required:!1},responseContext:{type:y,required:!1},stackTrace:{type:[w],required:!1},errorCode:{type:String,required:!1},context:{type:m,required:!1},host:{type:f,required:!1},duration:{type:Number,required:!1}});S.index({logLevel:1,timestamp:-1}),S.index({"trace.function":1},{partialFilterExpression:{logLevel:"ERROR"}}),S.index({errorCode:1}),S.index({"context.requestId":1});export{i as LogLevel,S as LogModelSchema,a as Logger,o as logLevelToCollection};