Skip to content

Commit

Permalink
feat: log groups
Browse files Browse the repository at this point in the history
  • Loading branch information
akdasa committed May 23, 2023
1 parent 2282ac3 commit 56833e5
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 17 deletions.
34 changes: 33 additions & 1 deletion lib/core/Logs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,25 @@ export enum LogLevel {
/**
* A log record. This is the data that is passed to the transports.
*/
export interface LogRecord {
export interface MessageLogRecord {
type: 'log'
level: LogLevel
context: string
message: string
timestamp: number
data?: unknown
}

export interface StartGroupLogRecord {
type: 'start-group'
label: string
}

export interface EndGroupLogRecord {
type: 'end-group'
}

export type LogRecord = MessageLogRecord | StartGroupLogRecord | EndGroupLogRecord

/**
* A transport is a class that is responsible for actually logging the data.
Expand Down Expand Up @@ -64,13 +75,34 @@ export class Logger {
private context: string
) {}

/**
* Start a new group of logs.
* @param label Label of the group
*/
public startGroup(label: string) {
Logs.log({
type: 'start-group',
label
})
}

/**
* End the current group of logs.
*/
public endGroup() {
Logs.log({
type: 'end-group'
})
}

/**
* Logs a message.
* @param level Log level
* @param message Message to log
*/
public log(level: LogLevel, message: string, data?: unknown) {
Logs.log({
type: 'log',
level,
context: this.context,
message,
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@akdasa-studios/framework",
"version": "0.5.2",
"version": "0.5.3",
"description": "Framework to build every app",
"main": "dist/index.js",
"typings": "dist/index.d.ts",
Expand Down
55 changes: 42 additions & 13 deletions tests/core/Logs.spec.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { LogRecord, Logs, LogTransport, Logger, LogLevel } from '@lib/core'
import { LogRecord, Logs, LogTransport, Logger, LogLevel, MessageLogRecord } from '@lib/core'


class MockTransport implements LogTransport {
Expand All @@ -17,13 +17,14 @@ describe('LogsController', () => {

Logs.register(transport)
logger.log(LogLevel.DEBUG, 'message', { test: 'test' })
const lastRecord = transport.lastRecord as MessageLogRecord

expect(transport.lastRecord).toBeDefined()
expect(transport.lastRecord?.context).toBe('test')
expect(transport.lastRecord?.message).toBe('message')
expect(transport.lastRecord?.level).toBe(LogLevel.DEBUG)
expect(transport.lastRecord?.timestamp).toBeDefined()
expect(transport.lastRecord?.data).toEqual({ test: 'test' })
expect(lastRecord).toBeDefined()
expect(lastRecord.context).toBe('test')
expect(lastRecord.message).toBe('message')
expect(lastRecord.level).toBe(LogLevel.DEBUG)
expect(lastRecord.timestamp).toBeDefined()
expect(lastRecord.data).toEqual({ test: 'test' })
})
})
})
Expand All @@ -36,32 +37,60 @@ describe('Logger', () => {
describe('.log()', () => {
it('log a message', () => {
logger.log(LogLevel.DEBUG, 'message')
expect(transport.lastRecord?.level).toBe(LogLevel.DEBUG)
const lastRecord = transport.lastRecord as MessageLogRecord
expect(lastRecord.type).toBe('log')
expect(lastRecord.level).toBe(LogLevel.DEBUG)
})

it('debug level', () => {
logger.debug('message')
expect(transport.lastRecord?.level).toBe(LogLevel.DEBUG)
const lastRecord = transport.lastRecord as MessageLogRecord
expect(lastRecord.type).toBe('log')
expect(lastRecord.level).toBe(LogLevel.DEBUG)
})

it('info level', () => {
logger.info('message')
expect(transport.lastRecord?.level).toBe(LogLevel.INFO)
const lastRecord = transport.lastRecord as MessageLogRecord
expect(lastRecord.type).toBe('log')
expect(lastRecord.level).toBe(LogLevel.INFO)
})

it('warn level', () => {
logger.warn('message')
expect(transport.lastRecord?.level).toBe(LogLevel.WARN)
const lastRecord = transport.lastRecord as MessageLogRecord
expect(lastRecord.type).toBe('log')
expect(lastRecord.level).toBe(LogLevel.WARN)
})

it('error level', () => {
logger.error('message')
expect(transport.lastRecord?.level).toBe(LogLevel.ERROR)
const lastRecord = transport.lastRecord as MessageLogRecord
expect(lastRecord.type).toBe('log')
expect(lastRecord.level).toBe(LogLevel.ERROR)
})

it('fatal level', () => {
logger.fatal('message')
expect(transport.lastRecord?.level).toBe(LogLevel.FATAL)
const lastRecord = transport.lastRecord as MessageLogRecord
expect(lastRecord.type).toBe('log')
expect(lastRecord.level).toBe(LogLevel.FATAL)
})
})

describe('.startGroup()', () => {
it('start a group', () => {
logger.startGroup('group')
const lastRecord = transport.lastRecord as MessageLogRecord
expect(lastRecord.type).toBe('start-group')
})
})

describe('.endGroup()', () => {
it('end a group', () => {
logger.endGroup()
const lastRecord = transport.lastRecord as MessageLogRecord
expect(lastRecord.type).toBe('end-group')
})
})
})

0 comments on commit 56833e5

Please sign in to comment.