Skip to content

Commit a16c462

Browse files
authored
Merge pull request #429 from enter-at/feat/logger
feat(logger): log internal server errors
2 parents aa2b101 + e5212c5 commit a16c462

File tree

5 files changed

+33
-3
lines changed

5 files changed

+33
-3
lines changed

src/Config.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { Logger } from "./logger";
2+
3+
export class Config {
4+
public logger: Logger = console;
5+
}

src/handler/APIGatewayProxyHandler.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
ValidationError,
99
UnauthorizedError,
1010
} from "../error";
11-
import { UnprocessableEntityError } from "../error/UnprocessableEntityError";
11+
import { UnprocessableEntityError } from "../error";
1212
import { ContentTypeHeader, CORSHeader, Header, Headers } from "../header";
1313
import {
1414
badRequest,
@@ -23,6 +23,7 @@ import {
2323
unprocessableEntity,
2424
} from "../response";
2525
import { BaseHandler, BaseHandlerArguments } from "./BaseHandler";
26+
import { config } from "../index";
2627

2728
export interface APIGatewayProxyHandlerArguments extends BaseHandlerArguments {
2829
cors?: CORSHeader;
@@ -48,10 +49,15 @@ export class APIGatewayProxyHandler extends BaseHandler {
4849
if (err instanceof NotFoundError) {
4950
return notFound(err.details);
5051
}
52+
config.logger.error({
53+
name: err.name,
54+
message: err.message,
55+
stack: err.stack,
56+
});
5157
return internalServerError();
5258
}
5359

54-
private corsHeader: Header;
60+
private readonly corsHeader: Header;
5561

5662
constructor(args?: APIGatewayProxyHandlerArguments) {
5763
super(args);

src/handler/BaseHandler.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,13 @@ import {
3737
import { Format } from "../format/Format";
3838
import * as inputFormat from "../format/InputFormat";
3939
import * as outputFormat from "../format/OutputFormat";
40+
import { Logger } from "../logger";
41+
import { config } from "../index";
4042

4143
export interface BaseHandlerArguments {
4244
inputFormat?: Format;
4345
outputFormat?: Format;
46+
logger?: Logger;
4447
}
4548

4649
type Event =
@@ -84,9 +87,12 @@ export abstract class BaseHandler {
8487
protected inputFormat: Format;
8588
protected outputFormat: Format;
8689

87-
constructor(args?: BaseHandlerArguments) {
90+
protected constructor(args?: BaseHandlerArguments) {
8891
this.inputFormat = args?.inputFormat ?? inputFormat.json;
8992
this.outputFormat = args?.outputFormat ?? outputFormat.json;
93+
if (args?.logger) {
94+
config.logger = args.logger;
95+
}
9096
}
9197

9298
public decorator(

src/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { Config } from "./Config";
2+
13
export * from "./decorator/format";
24
export * from "./decorator/handler";
35
export * from "./decorator/header";
@@ -6,6 +8,8 @@ export * from "./error";
68
import * as input from "./format/InputFormat";
79
import * as output from "./format/OutputFormat";
810

11+
export const config = new Config();
12+
913
export const format = {
1014
input,
1115
output,

src/logger.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
export type JSONType = { [key: string]: unknown };
2+
export type LoggerArgument = (JSONType | string | unknown)[];
3+
4+
export interface Logger {
5+
info(...args: LoggerArgument): void;
6+
warn(...args: LoggerArgument): void;
7+
error(...args: LoggerArgument): void;
8+
debug(...args: LoggerArgument): void;
9+
}

0 commit comments

Comments
 (0)