-
Notifications
You must be signed in to change notification settings - Fork 46
/
logger.ts
57 lines (47 loc) · 1.35 KB
/
logger.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import type { MiddlewareFunc } from "../types.ts";
import type { Context } from "../context.ts";
import type { Skipper } from "./skipper.ts";
import { DefaultSkipper } from "./skipper.ts";
const { writeSync, stdout } = Deno;
export type Formatter = (c: Context) => string;
const encoder = new TextEncoder();
export const DefaultFormatter: Formatter = (c) => {
const req = c.request;
const time = new Date().toISOString();
const method = req.method;
const url = req.url || "/";
const protocol = c.request.proto;
return `${time} ${method} ${url} ${protocol}\n`;
};
export const DefaultLoggerConfig: LoggerConfig = {
skipper: DefaultSkipper,
formatter: DefaultFormatter,
output: stdout,
};
export function logger(
config: LoggerConfig = DefaultLoggerConfig,
): MiddlewareFunc {
if (config.formatter == null) {
config.formatter = DefaultLoggerConfig.formatter;
}
if (config.skipper == null) {
config.skipper = DefaultLoggerConfig.skipper;
}
if (config.output == null) {
config.output = stdout;
}
return (next) =>
(c) => {
if (config.skipper!(c)) {
return next(c);
}
writeSync(config.output!.rid, encoder.encode(config.formatter!(c)));
return next(c);
};
}
export interface LoggerConfig {
skipper?: Skipper;
formatter?: Formatter;
// Default is Deno.stdout.
output?: { rid: number };
}