All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jvmMain.com.caesarealabs.loggy.lib.jvm.MongoDbLogSink.kt Maven / Gradle / Ivy

@file:Suppress("FunctionName")

package com.caesarealabs.loggy.lib.jvm

import com.caesarealabs.loggy.jvm.LoggyMongodb
import com.caesarealabs.loggy.lib.LogPrintMode
import com.caesarealabs.loggy.lib.LogSink
import com.caesarealabs.loggy.lib.Loggy
import com.caesarealabs.loggy.shared.Invocation
import com.caesarealabs.rpc4k.generated.LoggyServiceEventInvoker
import com.caesarealabs.rpc4k.runtime.jvm.user.components.mongo.MongoDb

public class MongodbLogSink(mongo: MongoDb) : LogSink {
    private val loggy = LoggyMongodb(mongo)


    override suspend fun add(invocation: Invocation) {
        try {
            loggy.logsCollection.insertOne(invocation)
        } catch (e: Throwable) {
            throw IllegalStateException("Failed to write invocation log: $invocation", e)
        }
    }
}

/**
 * The entry point to using Loggy with MongoDB.
 * First construct a static instance of this, and then use [Loggy.wrapCall] to wrap your endpoint handlers
 * @param mongo A local or cloud mongodb instance
 * @param invoker Optional.  If provided, adding invocations will send events to the client, and update the logs content live.
 */
public fun MongoLoggy(
    mongo: MongoDb,
    invoker: LoggyServiceEventInvoker?,
    printMode: LogPrintMode = LogPrintMode.AfterInvocation
): Loggy = Loggy(MongodbLogSink(mongo), invoker, printMode)




© 2015 - 2024 Weber Informatics LLC | Privacy Policy