v0.1.4 2490b00

logger.server.ts RawHistoryFolder

1import pino from 'pino';
2
3const logLevel = process.env.NODE_ENV === 'development' ? 'debug' : 'info';
4
5class LoggerService {
6    private static instance: LoggerService;
7    private logger: pino.Logger;
8    private moduleLoggers: Map<string, Logger>;
9
10    private constructor() {
11        this.logger = pino({
12            transport: {
13                target: 'pino-pretty',
14                options: {
15                    colorize: true,
16                    translateTime: 'HH:MM:ss',
17                    ignore: 'pid,hostname',
18                },
19            },
20            level: logLevel,
21        });
22        this.moduleLoggers = new Map();
23    }
24
25    public static getInstance(): LoggerService {
26        if (!LoggerService.instance) {
27            LoggerService.instance = new LoggerService();
28        }
29        return LoggerService.instance;
30    }
31
32    public getLogger(module: string): Logger {
33        if (!this.moduleLoggers.has(module)) {
34            this.moduleLoggers.set(module, {
35                debug: (msg: string, obj = {}) => this.logger.debug({ module, ...obj }, msg),
36                info: (msg: string, obj = {}) => this.logger.info({ module, ...obj }, msg),
37                warn: (msg: string, obj = {}) => this.logger.warn({ module, ...obj }, msg),
38                error: (msg: string, obj = {}) => this.logger.error({ module, ...obj }, msg)
39            });
40        }
41        return this.moduleLoggers.get(module)!;
42    }
43}
44
45export interface Logger {
46    debug: (msg: string, obj?: object) => void;
47    info: (msg: string, obj?: object) => void;
48    warn: (msg: string, obj?: object) => void;
49    error: (msg: string, obj?: object) => void;
50}
51
52// Export a function to get a logger for a specific module
53export const createLogger = (module: string): Logger => {
54    return LoggerService.getInstance().getLogger(module);
55}; 

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 3

Tags 8

↑↓ moveenter openesc close