27 lines · 776 B · TypeScript
RawDownload
import fs from "node:fs";import path from "node:path"; import { Effect, Logger, Option } from "effect";import * as Layer from "effect/Layer"; import { ServerConfig } from "./config"; export const ServerLoggerLive = Effect.gen(function* () {  const config = yield* Effect.serviceOption(ServerConfig);  if (Option.isNone(config)) {    return Logger.layer([Logger.defaultLogger]);  }   const logDir = path.join(config.value.stateDir, "logs");  const logPath = path.join(logDir, "server.log");   yield* Effect.sync(() => {    fs.mkdirSync(logDir, { recursive: true });  });   const fileLogger = Logger.formatSimple.pipe(Logger.toFile(logPath));   return Logger.layer([Logger.defaultLogger, fileLogger], {    mergeWithExisting: false,  });}).pipe(Layer.unwrap);