Skip to content

Commit bf15d8a

Browse files
authored
Improve coordinator logs and extend structured logger (#1389)
* docker provider shouldn't force simulate by default * structured logs for all things coordinator * attributes for handler loggers * add changeset * fix tmp cleaner types * remove unused simple logger import * fields from args should override existing fields * improve socket logs * change log message position for easier scanning * more logging improvements, more metadata
1 parent 4b0f677 commit bf15d8a

File tree

9 files changed

+343
-157
lines changed

9 files changed

+343
-157
lines changed

.changeset/proud-yaks-thank.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@trigger.dev/core": patch
3+
---
4+
5+
Improvements to structured logger and conditional payload logging

apps/coordinator/src/checkpointer.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import { ExponentialBackoff } from "@trigger.dev/core/v3/apps";
22
import { testDockerCheckpoint } from "@trigger.dev/core/v3/apps";
3-
import { SimpleLogger } from "@trigger.dev/core/v3/apps";
43
import { nanoid } from "nanoid";
54
import fs from "node:fs/promises";
65
import { ChaosMonkey } from "./chaosMonkey";
76
import { Buildah, Crictl, Exec } from "./exec";
87
import { setTimeout } from "node:timers/promises";
98
import { TempFileCleaner } from "./cleaner";
109
import { numFromEnv, boolFromEnv } from "./util";
10+
import { SimpleStructuredLogger } from "@trigger.dev/core/v3/utils/structuredLogger";
1111

1212
type CheckpointerInitializeReturn = {
1313
canCheckpoint: boolean;
@@ -86,7 +86,7 @@ export class Checkpointer {
8686
#canCheckpoint = false;
8787
#dockerMode: boolean;
8888

89-
#logger = new SimpleLogger("[checkptr]");
89+
#logger = new SimpleStructuredLogger("checkpointer");
9090
#abortControllers = new Map<string, AbortController>();
9191
#failedCheckpoints = new Map<string, unknown>();
9292
#waitingForRetry = new Set<string>();
@@ -137,7 +137,7 @@ export class Checkpointer {
137137
return this.#getInitReturn(true);
138138
}
139139

140-
this.#logger.error(testCheckpoint.message, testCheckpoint.error ?? "");
140+
this.#logger.error(testCheckpoint.message, { error: testCheckpoint.error });
141141
return this.#getInitReturn(false);
142142
}
143143

apps/coordinator/src/cleaner.ts

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { SimpleLogger } from "@trigger.dev/core/v3/apps";
1+
import { SimpleStructuredLogger } from "@trigger.dev/core/v3/utils/structuredLogger";
22
import { Exec } from "./exec";
33
import { setTimeout } from "timers/promises";
44

@@ -10,14 +10,18 @@ interface TempFileCleanerOptions {
1010
}
1111

1212
export class TempFileCleaner {
13-
private logger = new SimpleLogger("[tmp-cleaner]");
1413
private enabled = false;
15-
private exec = new Exec({ logger: this.logger });
1614

17-
constructor(private opts: TempFileCleanerOptions) {}
15+
private logger: SimpleStructuredLogger;
16+
private exec: Exec;
17+
18+
constructor(private opts: TempFileCleanerOptions) {
19+
this.logger = new SimpleStructuredLogger("tmp-cleaner", undefined, { ...this.opts });
20+
this.exec = new Exec({ logger: this.logger });
21+
}
1822

1923
async start() {
20-
this.logger.log("start", this.opts);
24+
this.logger.log("TempFileCleaner.start");
2125
this.enabled = true;
2226

2327
if (!this.opts.leadingEdge) {
@@ -28,15 +32,15 @@ export class TempFileCleaner {
2832
try {
2933
await this.clean();
3034
} catch (error) {
31-
this.logger.error("error during tick", error);
35+
this.logger.error("error during tick", { error });
3236
}
3337

3438
await this.wait();
3539
}
3640
}
3741

3842
stop() {
39-
this.logger.log("stop", this.opts);
43+
this.logger.log("TempFileCleaner.stop");
4044
this.enabled = false;
4145
}
4246

@@ -89,7 +93,7 @@ export class TempFileCleaner {
8993
const rmOutput = await rm;
9094

9195
if (rmOutput.stderr.length > 0) {
92-
this.logger.error("delete unsuccessful", rmOutput);
96+
this.logger.error("delete unsuccessful", { rmOutput });
9397
return;
9498
}
9599

apps/coordinator/src/exec.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { SimpleLogger } from "@trigger.dev/core/v3/apps";
1+
import { SimpleStructuredLogger } from "@trigger.dev/core/v3/utils/structuredLogger";
22
import { randomUUID } from "crypto";
33
import { homedir } from "os";
44
import { type Result, x } from "tinyexec";
@@ -18,23 +18,23 @@ class TinyResult {
1818
}
1919

2020
interface ExecOptions {
21-
logger?: SimpleLogger;
21+
logger?: SimpleStructuredLogger;
2222
abortSignal?: AbortSignal;
2323
logOutput?: boolean;
2424
trimArgs?: boolean;
2525
neverThrow?: boolean;
2626
}
2727

2828
export class Exec {
29-
private logger: SimpleLogger;
29+
private logger: SimpleStructuredLogger;
3030
private abortSignal: AbortSignal | undefined;
3131

3232
private logOutput: boolean;
3333
private trimArgs: boolean;
3434
private neverThrow: boolean;
3535

3636
constructor(opts: ExecOptions) {
37-
this.logger = opts.logger ?? new SimpleLogger();
37+
this.logger = opts.logger ?? new SimpleStructuredLogger("exec");
3838
this.abortSignal = opts.abortSignal;
3939

4040
this.logOutput = opts.logOutput ?? true;
@@ -103,15 +103,15 @@ interface BuildahOptions {
103103

104104
export class Buildah {
105105
private id: string;
106-
private logger: SimpleLogger;
106+
private logger: SimpleStructuredLogger;
107107
private exec: Exec;
108108

109109
private containers = new Set<string>();
110110
private images = new Set<string>();
111111

112112
constructor(opts: BuildahOptions) {
113113
this.id = opts.id ?? randomUUID();
114-
this.logger = new SimpleLogger(`[buildah][${this.id}]`);
114+
this.logger = new SimpleStructuredLogger("buildah", undefined, { id: this.id });
115115

116116
this.exec = new Exec({
117117
logger: this.logger,
@@ -220,14 +220,14 @@ interface CrictlOptions {
220220

221221
export class Crictl {
222222
private id: string;
223-
private logger: SimpleLogger;
223+
private logger: SimpleStructuredLogger;
224224
private exec: Exec;
225225

226226
private archives = new Set<string>();
227227

228228
constructor(opts: CrictlOptions) {
229229
this.id = opts.id ?? randomUUID();
230-
this.logger = new SimpleLogger(`[crictl][${this.id}]`);
230+
this.logger = new SimpleStructuredLogger("crictl", undefined, { id: this.id });
231231

232232
this.exec = new Exec({
233233
logger: this.logger,

0 commit comments

Comments
 (0)