Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
"sequelize": "^6.37.3",
"sqlite3": "^5.1.7",
"uuid": "^10.0.0",
"winston": "^3.15.0",
"zod": "^3.23.8"
},
"devDependencies": {
Expand Down
7 changes: 4 additions & 3 deletions src/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import appConfig from '@src/config/app';
import CommandNotFoundException from '@src/core/domains/console/exceptions/CommandNotFoundException';
import CommandBootService from '@src/core/domains/console/service/CommandBootService';
import Kernel, { KernelOptions } from '@src/core/Kernel';
import { App } from '@src/core/services/App';

(async () => {
try {
Expand All @@ -16,22 +17,22 @@ import Kernel, { KernelOptions } from '@src/core/Kernel';
*/
await Kernel.boot(appConfig, options);

console.log('[App]: Started');
App.container('logger').info('[App]: Started');

/**
* Execute commands
*/
await cmdBoot.boot(args);

}
}
catch (err) {

// We can safetly ignore CommandNotFoundExceptions
if(err instanceof CommandNotFoundException) {
return;
}

console.error('[App]: Failed to start', err);
App.container('logger').error('[App]: Failed to start', err);
throw err;
}
})();
2 changes: 1 addition & 1 deletion src/app/commands/ExampleCommand.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ export default class ExampleCommand extends BaseCommand {
signature: string = 'app:example';

async execute() {
console.log('Hello world!')
// Handle the logic
}

}
5 changes: 3 additions & 2 deletions src/app/events/listeners/ExampleListener.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@ import EventListener from "@src/core/domains/events/services/EventListener";

export class ExampleListener extends EventListener<{userId: string}> {

// eslint-disable-next-line no-unused-vars
handle = async (payload: { userId: string}) => {
console.log('[ExampleListener]', payload.userId)
// Handle the logic
}

}
1 change: 0 additions & 1 deletion src/core/actions/health.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ export default async (req: Request, res: Response) => {
}
}
catch (error) {
console.error(error)
// If there is an error, send the error response
responseError(req, res, error as Error)
return;
Expand Down
8 changes: 2 additions & 6 deletions src/core/base/Provider.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { IProvider } from "@src/core/interfaces/IProvider";
import { App } from "@src/core/services/App";

/**
* Base class for providers
Expand Down Expand Up @@ -45,12 +46,7 @@ export default abstract class BaseProvider implements IProvider {
* @param {...any[]} args - Additional arguments to log
*/
protected log(message: string, ...args: any[]): void {
const str = `[Provider] ${message}`;
if(args.length > 0) {
console.log(str, ...args);
return;
}
console.log(`[Provider] ${message}`);
App.container('logger').info(message, ...args);
}

/**
Expand Down
4 changes: 2 additions & 2 deletions src/core/domains/console/commands/WorkerCommand.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ export default class WorkerCommand extends BaseCommand {
const worker = Worker.getInstance()
worker.setDriver(driver)

console.log('Running worker...', worker.options)
App.container('logger').console('Running worker...', worker.options)

await worker.work();

Expand All @@ -35,7 +35,7 @@ export default class WorkerCommand extends BaseCommand {

setInterval(async () => {
await worker.work()
console.log('Running worker again in ' + worker.options.runAfterSeconds.toString() + ' seconds')
App.container('logger').console('Running worker again in ' + worker.options.runAfterSeconds.toString() + ' seconds')
}, worker.options.runAfterSeconds * 1000)
}

Expand Down
3 changes: 2 additions & 1 deletion src/core/domains/database/base/BaseDocumentManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { IHasManyOptions } from "@src/core/domains/database/interfaces/relations
import BelongsTo from "@src/core/domains/database/relationships/BelongsTo";
import HasMany from "@src/core/domains/database/relationships/HasMany";
import DocumentValidator from "@src/core/domains/database/validator/DocumentValidator";
import { App } from "@src/core/services/App";

/**
* Abstract base class for document management operations
Expand Down Expand Up @@ -131,7 +132,7 @@ abstract class BaseDocumentManager<Query extends IDocumentManager = IDocumentMan
}
catch (err) {
if(err instanceof Error && err?.message) {
console.log(`Database error(${this.driver.connectionName}): `, err.message, err.stack)
App.container('logger').error(`Database error(${this.driver.connectionName}): `, err.message, err.stack)
}
throw err
}
Expand Down
6 changes: 3 additions & 3 deletions src/core/domains/events/services/EventDispatcher.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@ import { App } from "@src/core/services/App";


export default class EventDispatcher extends Singleton implements IEventDispatcher {

/**
* Handle the dispatched event
* @param event
*/
public async dispatch<Payload extends IEventPayload>(event: IEvent<Payload>) {
console.log(`[EventDispatcher:dispatch] Event '${event.name}' with driver '${event.driver}'`)
App.container('logger').info(`[EventDispatcher:dispatch] Event '${event.name}' with driver '${event.driver}'`)

const driverOptions = this.getDriverOptionsFromEvent(event)
const driverCtor = driverOptions.driver
Expand All @@ -36,5 +36,5 @@ export default class EventDispatcher extends Singleton implements IEventDispatch

return driver
}

}
20 changes: 10 additions & 10 deletions src/core/domains/events/services/Worker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ export default class Worker extends Singleton {
*/
setDriver(driver: string) {
this.options = this.getOptions(driver)
this.log(`Driver set to '${driver}'`,)
this.logToConsole(`Driver set to '${driver}'`,)
}

/**
Expand All @@ -57,21 +57,21 @@ export default class Worker extends Singleton {
// Fetch the current list of queued results
const workerResults: WorkerModel[] = await worker.getWorkerResults(this.options.queueName)

this.log('collection: ' + new this.options.workerModelCtor().table)
this.log(`${workerResults.length} queued items with queue name '${this.options.queueName}'`)
this.logToConsole('collection: ' + new this.options.workerModelCtor().table)
this.logToConsole(`${workerResults.length} queued items with queue name '${this.options.queueName}'`)

for(const workerModel of workerResults) {
// We set the model here to pass it to the failedWorkerModel method,
// but allowing the worker to continue processing
model = workerModel

try {
console.log('Worker processing model', model.getId()?.toString())
App.container('logger').console('Worker processing model', model.getId()?.toString())
await worker.processWorkerModel(model)
}
catch (err) {
if(!(err instanceof Error)) {
console.error(err)
App.container('logger').error(err)
return;
}

Expand Down Expand Up @@ -124,7 +124,7 @@ export default class Worker extends Singleton {
// Delete record as it was a success
await model.delete();

this.log(`Processed: ${eventName}`)
this.logToConsole(`Processed: ${eventName}`)
}

/**
Expand All @@ -141,7 +141,7 @@ export default class Worker extends Singleton {
const currentAttempt = (model.getAttribute('attempt') ?? 0)
const nextCurrentAttempt = currentAttempt + 1

this.log(`Failed ${model.getAttribute('eventName')} attempts ${currentAttempt + 1} out of ${retries}, ID: ${model.getId()?.toString()}`)
this.logToConsole(`Failed ${model.getAttribute('eventName')} attempts ${currentAttempt + 1} out of ${retries}, ID: ${model.getId()?.toString()}`)

// If reached max, move to failed collection
if(nextCurrentAttempt >= retries) {
Expand All @@ -160,7 +160,7 @@ export default class Worker extends Singleton {
* @param err
*/
async moveFailedWorkerModel(model: WorkerModel, err: Error) {
this.log('Moved to failed')
this.logToConsole('Moved to failed')

const failedWorkerModel = (new FailedWorkerModelFactory).create(
this.options.failedCollection,
Expand All @@ -183,8 +183,8 @@ export default class Worker extends Singleton {
* Logs a message to the console
* @param message The message to log
*/
protected log(message: string) {
console.log('[Worker]: ', message)
protected logToConsole(message: string) {
App.container('logger').console('[Worker]: ', message)
}

}
Expand Down
3 changes: 2 additions & 1 deletion src/core/domains/express/middleware/basicLoggerMiddleware.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import { BaseRequest } from '@src/core/domains/express/types/BaseRequest.t';
import { App } from '@src/core/services/App';
import { NextFunction, Response } from 'express';


export const basicLoggerMiddleware = () => async (req: BaseRequest, res: Response, next: NextFunction): Promise<void> => {
console.log('New request: ', `${req.method} ${req.url}`, 'Headers: ', req.headers);
App.container('logger').info('New request: ', `${req.method} ${req.url}`, 'Headers: ', req.headers);
next();
};
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ const requestContextLoggerMiddleware = () => (req: BaseRequest, res: Response, n
}

res.once('finish', () => {
console.log('requestContext: ', App.container('requestContext').getRequestContext())
console.log('ipContext: ', App.container('requestContext').getIpContext())
App.container('logger').info('requestContext: ', App.container('requestContext').getRequestContext())
App.container('logger').info('ipContext: ', App.container('requestContext').getIpContext())
})

next()
Expand Down
3 changes: 2 additions & 1 deletion src/core/domains/express/requests/responseError.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ export default (req: Request , res: Response, err: Error, code: number = 500) =>
return;
}

console.error(err)
App.container('logger').error(err)

res.status(code).send({ error: `${err.message}` })
}
2 changes: 1 addition & 1 deletion src/core/domains/express/services/ExpressService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@ export default class ExpressService extends Service<IExpressConfig> implements I
}
}

console.log(str)
App.container('logger').info(str)
}

}
3 changes: 2 additions & 1 deletion src/core/domains/express/services/QueryFilters.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import Singleton from "@src/core/base/Singleton";
import { SearchOptions } from "@src/core/domains/express/interfaces/IRouteResourceOptions";
import { App } from "@src/core/services/App";
import { Request } from "express";

class QueryFilters extends Singleton {
Expand Down Expand Up @@ -33,7 +34,7 @@ class QueryFilters extends Singleton {
}

catch (err) {
console.error(err)
App.container('logger').error(err)
}

return this;
Expand Down
1 change: 0 additions & 1 deletion src/core/domains/express/services/RequestContextCleaner.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,6 @@ class RequestContextCleaner extends Singleton {

// If the context is empty, remove it from the store
if(context.size === 0) {
console.log('Removed ipContext', ip)
context.delete(ip)
}
}
Expand Down
14 changes: 14 additions & 0 deletions src/core/domains/logger/interfaces/ILoggerService.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
/* eslint-disable no-unused-vars */
import winston from "winston";

export interface ILoggerService
{
getLogger(): winston.Logger;

info(...args: any[]): void;
warn(...args: any[]): void;
error(...args: any[]): void;
debug(...args: any[]): void;
verbose(...args: any[]): void;
console(...args: any[]): void;
}
22 changes: 22 additions & 0 deletions src/core/domains/logger/providers/LoggerProvider.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import BaseProvider from "@src/core/base/Provider";
import LoggerService from "@src/core/domains/logger/services/LoggerService";
import { App } from "@src/core/services/App";

class LoggerProvider extends BaseProvider {

async register(): Promise<void> {

const loggerService = new LoggerService();

// We will boot the logger here to provide it early for other providers
loggerService.boot();

App.setContainer('logger', loggerService);

}

async boot(): Promise<void> {}

}

export default LoggerProvider
Loading