Skip to content

Commit 4f17fef

Browse files
feat: add async support to logger methods and update README
1 parent ea39706 commit 4f17fef

File tree

12 files changed

+68
-119
lines changed

12 files changed

+68
-119
lines changed

.changeset/long-meals-cross.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
"@hyperse/logger-plugin-console": patch
3+
"@hyperse/logger-plugin-stdout": patch
4+
"@hyperse/logger": patch
5+
---
6+
7+
feat: add async support to logger methods

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
- **🎭 Multiple Output Formats**: Console, file, and custom output formats
3535
- **🔍 Debugging Tools**: Enhanced debugging capabilities with stack traces
3636
- **🔄 Plugin Context Merging**: Automatic merging and type inference of plugin contexts
37+
- **🔄 Async Support**: Built-in support for asynchronous operations
3738

3839
## 📦 Installation
3940

packages/logger-plugin-console/tests/console-plugin.spec.ts

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { createLogger, LogLevel } from '@hyperse/logger';
22
import { createConsolePlugin } from '../src/create-console-plugin.js';
3-
import { sleep } from './test-utils.js';
43

54
describe('createConsolePlugin', () => {
65
// @ts-ignore
@@ -22,9 +21,7 @@ describe('createConsolePlugin', () => {
2221
.use(createConsolePlugin({ disable: true }))
2322
.build();
2423

25-
logger.info('info message');
26-
27-
await sleep(100);
24+
await logger.info('info message');
2825

2926
expect(mockConsoleLog).not.toHaveBeenCalled();
3027
});
@@ -37,9 +34,7 @@ describe('createConsolePlugin', () => {
3734
.use(createConsolePlugin({ noColor: true }))
3835
.build();
3936

40-
logger.info('info message');
41-
42-
await sleep(100);
37+
await logger.info('info message');
4338

4439
expect(mockConsoleLog).toHaveBeenCalledTimes(1);
4540
const output = mockConsoleLog.mock.calls[0][0];
@@ -55,14 +50,12 @@ describe('createConsolePlugin', () => {
5550
.use(createConsolePlugin({ noColor: true }))
5651
.build();
5752

58-
logger.warn({
53+
await logger.warn({
5954
prefix: 'warn prefix',
6055
name: 'warn name',
6156
message: 'warn message',
6257
});
6358

64-
await sleep(100);
65-
6659
expect(mockConsoleLog).toHaveBeenCalledTimes(1);
6760
const output = mockConsoleLog.mock.calls[0][0];
6861
expect(output).toMatch(/\[ WARN \]/);
@@ -79,14 +72,12 @@ describe('createConsolePlugin', () => {
7972
.use(createConsolePlugin({ noColor: true }))
8073
.build();
8174

82-
logger.debug({
75+
await logger.debug({
8376
prefix: 'debug prefix',
8477
name: 'debug name',
8578
message: 'debug message',
8679
});
8780

88-
await sleep(100);
89-
9081
expect(mockConsoleLog).toHaveBeenCalledTimes(1);
9182
const output = mockConsoleLog.mock.calls[0][0];
9283
expect(output).toMatch(/\[ DEBUG \]/);
@@ -103,14 +94,12 @@ describe('createConsolePlugin', () => {
10394
.use(createConsolePlugin({ noColor: true }))
10495
.build();
10596

106-
logger.verbose({
97+
await logger.verbose({
10798
prefix: 'verbose prefix',
10899
name: 'verbose name',
109100
message: 'verbose message',
110101
});
111102

112-
await sleep(100);
113-
114103
expect(mockConsoleLog).toHaveBeenCalledTimes(1);
115104
const output = mockConsoleLog.mock.calls[0][0];
116105
expect(output).toMatch(/\[ VERBOSE \]/);
@@ -133,14 +122,12 @@ describe('createConsolePlugin', () => {
133122
} catch (e) {
134123
error = e as Error;
135124
}
136-
logger.error({
125+
await logger.error({
137126
name: 'error name',
138127
message: error!.message,
139128
stack: error!.stack,
140129
});
141130

142-
await sleep(100);
143-
144131
expect(mockConsoleLog).toHaveBeenCalledTimes(1);
145132
const output = mockConsoleLog.mock.calls[0][0];
146133
expect(output).toMatch(/\[ ERROR \]/);

packages/logger-plugin-console/tests/test-utils.ts

Lines changed: 0 additions & 5 deletions
This file was deleted.

packages/logger-plugin-stdout/tests/stdout-plugin.spec.ts

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { createLogger, LogLevel } from '@hyperse/logger';
22
import { createStdoutPlugin } from '../src/create-stdout-plugin.js';
3-
import { sleep } from './test-utils.js';
43

54
describe('createStdoutPlugin', () => {
65
// @ts-ignore
@@ -24,9 +23,7 @@ describe('createStdoutPlugin', () => {
2423
.use(createStdoutPlugin({ disable: true }))
2524
.build();
2625

27-
logger.info('info message');
28-
29-
await sleep(100);
26+
await logger.info('info message');
3027

3128
expect(mockStdLog).not.toHaveBeenCalled();
3229
});
@@ -39,9 +36,7 @@ describe('createStdoutPlugin', () => {
3936
.use(createStdoutPlugin({ noColor: true }))
4037
.build();
4138

42-
logger.info('info message');
43-
44-
await sleep(100);
39+
await logger.info('info message');
4540

4641
expect(mockStdLog).toHaveBeenCalledTimes(1);
4742
const output = mockStdLog.mock.calls[0][0];
@@ -57,14 +52,12 @@ describe('createStdoutPlugin', () => {
5752
.use(createStdoutPlugin({ noColor: true }))
5853
.build();
5954

60-
logger.warn({
55+
await logger.warn({
6156
prefix: 'warn prefix',
6257
name: 'warn name',
6358
message: 'warn message',
6459
});
6560

66-
await sleep(100);
67-
6861
expect(mockStdLog).toHaveBeenCalledTimes(1);
6962
const output = mockStdLog.mock.calls[0][0];
7063
expect(output).toMatch(/\[ WARN \]/);
@@ -81,14 +74,12 @@ describe('createStdoutPlugin', () => {
8174
.use(createStdoutPlugin({ noColor: true }))
8275
.build();
8376

84-
logger.debug({
77+
await logger.debug({
8578
prefix: 'debug prefix',
8679
name: 'debug name',
8780
message: 'debug message',
8881
});
8982

90-
await sleep(100);
91-
9283
expect(mockStdLog).toHaveBeenCalledTimes(1);
9384
const output = mockStdLog.mock.calls[0][0];
9485
expect(output).toMatch(/\[ DEBUG \]/);
@@ -105,14 +96,12 @@ describe('createStdoutPlugin', () => {
10596
.use(createStdoutPlugin({ noColor: true }))
10697
.build();
10798

108-
logger.verbose({
99+
await logger.verbose({
109100
prefix: 'verbose prefix',
110101
name: 'verbose name',
111102
message: 'verbose message',
112103
});
113104

114-
await sleep(100);
115-
116105
expect(mockStdLog).toHaveBeenCalledTimes(1);
117106
const output = mockStdLog.mock.calls[0][0];
118107
expect(output).toMatch(/\[ VERBOSE \]/);
@@ -135,14 +124,12 @@ describe('createStdoutPlugin', () => {
135124
} catch (e) {
136125
error = e as Error;
137126
}
138-
logger.error({
127+
await logger.error({
139128
name: 'error name',
140129
message: error!.message,
141130
stack: error!.stack,
142131
});
143132

144-
await sleep(100);
145-
146133
expect(mockStdLog).toHaveBeenCalledTimes(1);
147134
const output = mockStdLog.mock.calls[0][0];
148135
expect(output).toMatch(/\[ ERROR \]/);

packages/logger-plugin-stdout/tests/test-utils.ts

Lines changed: 0 additions & 5 deletions
This file was deleted.

packages/logger/src/core/logger.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { LogLevel } from '../constant/log-level.js';
1212
import { executeFunction } from '../helpers/helper-execute-fun.js';
1313
import { isFunction } from '../helpers/helper-is-function.js';
1414
import type {
15-
Logger as LogggerType,
15+
Logger as LoggerType,
1616
LoggerContext,
1717
} from '../types/type-logger.js';
1818
import type { LoggerPlugin } from '../types/type-logger-plugin.js';
@@ -27,7 +27,7 @@ import type { LoggerMessage, RawLoggerMessage } from '../types/type-message.js';
2727
* @template Context The logger context type, including log level, name, etc.
2828
*/
2929
export class Logger<Context extends LoggerContext = LoggerContext>
30-
implements LogggerType<Context>
30+
implements LoggerType<Context>
3131
{
3232
private ctx: Context;
3333
private errorHandling: ((error: Error) => void) | undefined;
@@ -154,8 +154,8 @@ export class Logger<Context extends LoggerContext = LoggerContext>
154154
* Logs a message at debug level.
155155
* @param message The log message
156156
*/
157-
public debug(message: RawLoggerMessage<Context>) {
158-
this.pipeline.execute({
157+
public async debug(message: RawLoggerMessage<Context>) {
158+
await this.pipeline.execute({
159159
ctx: this.ctx,
160160
message: message,
161161
level: LogLevel.Debug,
@@ -166,8 +166,8 @@ export class Logger<Context extends LoggerContext = LoggerContext>
166166
* Logs a message at info level.
167167
* @param message The log message
168168
*/
169-
public info(message: RawLoggerMessage<Context>) {
170-
this.pipeline.execute({
169+
public async info(message: RawLoggerMessage<Context>) {
170+
await this.pipeline.execute({
171171
ctx: this.ctx,
172172
message: message,
173173
level: LogLevel.Info,
@@ -178,8 +178,8 @@ export class Logger<Context extends LoggerContext = LoggerContext>
178178
* Logs a message at warn level.
179179
* @param message The log message
180180
*/
181-
public warn(message: RawLoggerMessage<Context>) {
182-
this.pipeline.execute({
181+
public async warn(message: RawLoggerMessage<Context>) {
182+
await this.pipeline.execute({
183183
ctx: this.ctx,
184184
message: message,
185185
level: LogLevel.Warn,
@@ -190,8 +190,8 @@ export class Logger<Context extends LoggerContext = LoggerContext>
190190
* Logs a message at error level.
191191
* @param message The log message
192192
*/
193-
public error(message: RawLoggerMessage<Context>) {
194-
this.pipeline.execute({
193+
public async error(message: RawLoggerMessage<Context>) {
194+
await this.pipeline.execute({
195195
ctx: this.ctx,
196196
message: message,
197197
level: LogLevel.Error,
@@ -202,8 +202,8 @@ export class Logger<Context extends LoggerContext = LoggerContext>
202202
* Logs a message at verbose level.
203203
* @param message The log message
204204
*/
205-
public verbose(message: RawLoggerMessage<Context>) {
206-
this.pipeline.execute({
205+
public async verbose(message: RawLoggerMessage<Context>) {
206+
await this.pipeline.execute({
207207
ctx: this.ctx,
208208
message: message,
209209
level: LogLevel.Verbose,

packages/logger/src/types/type-logger.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -205,31 +205,31 @@ export interface Logger<Context extends LoggerContext = LoggerContext> {
205205
* @param message The message to log.
206206
* @returns void.
207207
*/
208-
debug: (message: RawLoggerMessage<Context>) => void;
208+
debug: (message: RawLoggerMessage<Context>) => Promise<void>;
209209
/**
210210
* Info log method.
211211
* @param message The message to log.
212212
* @returns void.
213213
*/
214-
info: (message: RawLoggerMessage<Context>) => void;
214+
info: (message: RawLoggerMessage<Context>) => Promise<void>;
215215
/**
216216
* Warn log method.
217217
* @param message The message to log.
218218
* @returns void.
219219
*/
220-
warn: (message: RawLoggerMessage<Context>) => void;
220+
warn: (message: RawLoggerMessage<Context>) => Promise<void>;
221221
/**
222222
* Error log method.
223223
* @param message The message to log.
224224
* @returns void.
225225
*/
226-
error: (message: RawLoggerMessage<Context>) => void;
226+
error: (message: RawLoggerMessage<Context>) => Promise<void>;
227227
/**
228228
* Verbose log method.
229229
* @param message The message to log.
230230
* @returns void.
231231
*/
232-
verbose: (message: RawLoggerMessage<Context>) => void;
232+
verbose: (message: RawLoggerMessage<Context>) => Promise<void>;
233233
}
234234

235235
/**

packages/logger/tests/ctx.spec.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { createLogger } from '../src/core/create-logger.js';
22
import { LogLevel } from '../src/index.js';
33
import { definePlugin } from '../src/plugin/define-plugin.js';
4-
import { sleep } from './test-utils.js';
54

65
describe('Logger Context Setup', () => {
76
it('should merge context with setup function result', async () => {
@@ -29,8 +28,7 @@ describe('Logger Context Setup', () => {
2928
agent: 'chrome 123',
3029
});
3130

32-
logger.info('info message');
33-
await sleep(100);
31+
await logger.info('info message');
3432

3533
expect(executeMock).toHaveBeenCalledTimes(1);
3634
expect(executeMock.mock.calls[0][0].ctx).toMatchObject({
@@ -74,9 +72,7 @@ describe('Logger Context Setup', () => {
7472
});
7573
});
7674

77-
logger.info('info message');
78-
79-
await sleep(100);
75+
await logger.info('info message');
8076

8177
expect(executeMock).toHaveBeenCalledTimes(1);
8278
expect(executeMock.mock.calls[0][0].ctx).toMatchObject({

packages/logger/tests/error.spec.ts

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { createLogger } from '../src/core/create-logger.js';
22
import { LogLevel } from '../src/index.js';
33
import { definePlugin } from '../src/plugin/define-plugin.js';
4-
import { sleep } from './test-utils.js';
54

65
describe('Logger Error Handling', () => {
76
it('should handle errors thrown by plugins during log execution', async () => {
@@ -33,13 +32,11 @@ describe('Logger Error Handling', () => {
3332
};
3433
});
3534

36-
logger.info('info message');
37-
logger.debug('debug message');
38-
logger.verbose('verbose message');
39-
logger.warn('warn message');
40-
logger.error('error message');
41-
42-
await sleep(100);
35+
await logger.info('info message');
36+
await logger.debug('debug message');
37+
await logger.verbose('verbose message');
38+
await logger.warn('warn message');
39+
await logger.error('error message');
4340

4441
expect(errorHandlingMock).toHaveBeenCalledTimes(5);
4542
expect(errorHandlingMock.mock.calls[0][0].message).toEqual(

0 commit comments

Comments
 (0)