diff options
author | Yuqian Yang <crupest@crupest.life> | 2025-04-30 00:20:23 +0800 |
---|---|---|
committer | Yuqian Yang <crupest@crupest.life> | 2025-05-16 13:31:35 +0800 |
commit | 0963e715a9de2970826cec80713730b26286381d (patch) | |
tree | 43357a0e948862b7803fe9d533bb62d2c9c8d059 /services/docker/mail-server/relay/logger.ts | |
parent | 8930bb11fce19c773201b4f499d99c1c3c28efa6 (diff) | |
download | crupest-0963e715a9de2970826cec80713730b26286381d.tar.gz crupest-0963e715a9de2970826cec80713730b26286381d.tar.bz2 crupest-0963e715a9de2970826cec80713730b26286381d.zip |
HALF WORK!: 2025-5-16 rename
Diffstat (limited to 'services/docker/mail-server/relay/logger.ts')
-rw-r--r-- | services/docker/mail-server/relay/logger.ts | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/services/docker/mail-server/relay/logger.ts b/services/docker/mail-server/relay/logger.ts new file mode 100644 index 0000000..160d70a --- /dev/null +++ b/services/docker/mail-server/relay/logger.ts @@ -0,0 +1,50 @@ +import * as path from "@std/path"; + +import { createSingleton, generateTimeStringForFileName } from "./util.ts"; + +export class Logger { + constructor(public readonly path: string) {} + + warn(message: string) { + console.log(message); + } + + generateLogFilePath( + prefix: string = "", + suffix: string = "", + instant?: Temporal.Instant | Date, + ): string { + return path.join( + this.path, + `${prefix}-${generateTimeStringForFileName(instant)}-${suffix}`, + ); + } + + openLogFile( + prefix: string = "", + suffix: string = "", + instant?: Temporal.Instant | Date, + ): Promise<Deno.FsFile> { + const logPath = this.generateLogFilePath(prefix, suffix, instant); + return Deno.open(logPath, { + read: false, + write: true, + append: true, + create: true, + }); + } + + async logProgramOutput( + process: Deno.ChildProcess, + program: string, + instant?: Temporal.Instant | Date, + ): Promise<void> { + const stdoutFile = await this.openLogFile(program, "stdout", instant); + const stderrFile = await this.openLogFile(program, "stderr", instant); + + process.stdout.pipeTo(stdoutFile.writable); + process.stderr.pipeTo(stderrFile.writable); + } +} + +export const [getLogger, setLogger] = createSingleton<Logger>("Logger"); |