import { NodeSdk } from "@effect/opentelemetry"
import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-http"
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http"
import { BatchLogRecordProcessor } from "@opentelemetry/sdk-logs"
import { BatchSpanProcessor } from "@opentelemetry/sdk-trace-base"
import { Effect, Layer } from "effect"
import * as OtelConfig from "@/OtelConfig"
export const NodeSdkLive = Effect.gen(function* () {
const config = yield* OtelConfig.Config
yield* Effect.log(`${config.httpUrl}/v1/logs`)
const logExporter = new OTLPLogExporter({
url: `${config.httpUrl}/v1/logs`,
})
const traceExporter = new OTLPTraceExporter({
url: `${config.httpUrl}/v1/traces`,
})
return NodeSdk.layer(() => ({
resource: { serviceName: "my-app" },
spanProcessor: new BatchSpanProcessor(traceExporter),
loggerProviderConfig: {
processors: [new BatchLogRecordProcessor(logExporter)],
},
}))
}).pipe(Effect.provide(OtelConfig.ConfigLive), Layer.unwrapEffect)
import { NodeSdk } from "@effect/opentelemetry"
import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-http"
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http"
import { BatchLogRecordProcessor } from "@opentelemetry/sdk-logs"
import { BatchSpanProcessor } from "@opentelemetry/sdk-trace-base"
import { Effect, Layer } from "effect"
import * as OtelConfig from "@/OtelConfig"
export const NodeSdkLive = Effect.gen(function* () {
const config = yield* OtelConfig.Config
yield* Effect.log(`${config.httpUrl}/v1/logs`)
const logExporter = new OTLPLogExporter({
url: `${config.httpUrl}/v1/logs`,
})
const traceExporter = new OTLPTraceExporter({
url: `${config.httpUrl}/v1/traces`,
})
return NodeSdk.layer(() => ({
resource: { serviceName: "my-app" },
spanProcessor: new BatchSpanProcessor(traceExporter),
loggerProviderConfig: {
processors: [new BatchLogRecordProcessor(logExporter)],
},
}))
}).pipe(Effect.provide(OtelConfig.ConfigLive), Layer.unwrapEffect)