Skip to content

Commit

Permalink
Change listener API
Browse files Browse the repository at this point in the history
  • Loading branch information
ogesaku committed Feb 18, 2024
1 parent e5fc140 commit 288e821
Show file tree
Hide file tree
Showing 10 changed files with 126 additions and 48 deletions.
21 changes: 21 additions & 0 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,41 @@
# Contributing

## Prerequisites

Install git pre-commit hook:

```sh
./gradlew build
./gradlew installGitHooks
```

Pre-commit hook just formats code:

- Kotlin files are formatted with Ktlint

You can skip installing precomputes and format code in your IDE.

## Commit messages

Before writing a commit message read [this article](https://chris.beams.io/posts/git-commit/).

## Build

Before pushing any changes make sure project builds without errors with:

```
./gradlew build
```

## Unit tests

This project uses [Kotest](https://kotest.io/) for testing.

- please use the `Spec` suffix for new test classes
- make sure tests clearly document new feature

## Validate changes locally

Before submitting a pull request test your changes locally on a sample project.
There are few ways for local testing:

Expand All @@ -25,6 +44,7 @@ There are few ways for local testing:
via [`mavenLocal()`](https://docs.gradle.org/current/userguide/declaring_repositories.html#sub:maven_local) repository

## Validating with snapshot release

Snapshot release is triggered automatically after merge to the main branch.
To use a released snapshot version make sure to register Sonatype snapshot repository in gradle with:

Expand All @@ -41,5 +61,6 @@ repositories {
The snapshot version can be found in GitHub Action build log.

## Documentation

If change adds new feature or modifies a new one
update [documentation](https://github.com/coditory/klog/tree/master/samples).
11 changes: 11 additions & 0 deletions build-logic/src/main/kotlin/build.git.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
require(project == rootProject) { "build.git is applicable to rootProject only" }

tasks.register<Copy>("installGitHooks") {
inputs.files("scripts/git/pre-commit")
outputs.files(".git/hooks/pre-commit")
from("scripts/git") {
include("pre-commit")
}
into(".git/hooks")
fileMode = "755".toInt(8)
}
1 change: 1 addition & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
plugins {
id("build.kotlin") apply false
id("build.version")
id("build.git")
alias(libs.plugins.kover)
alias(libs.plugins.dokka)
alias(libs.plugins.nexusPublish)
Expand Down
12 changes: 6 additions & 6 deletions klog/src/main/kotlin/com/coditory/klog/EmittingKlogLogger.kt
Original file line number Diff line number Diff line change
Expand Up @@ -79,31 +79,31 @@ internal class EmittingKlogLogger(
event: LogEvent,
async: Boolean,
) {
listener.onLogStart(event)
listener.onLogStarted(event)
for (level in Level.higherLevelsOrEqual(event.level)) {
for (stream in streams.getOrDefault(level, emptyList())) {
val emitted = stream.emit(event, async)
if (emitted && stream.stopOnMatch()) {
listener.onLogEnd(event)
listener.onLogEnded(event)
return
}
}
}
listener.onLogEnd(event)
listener.onLogEnded(event)
}

private suspend fun emitEventSuspending(event: LogEvent) {
listener.onLogStart(event)
listener.onLogStarted(event)
for (level in Level.higherLevelsOrEqual(event.level)) {
for (stream in streams.getOrDefault(level, emptyList())) {
val emitted = stream.emitSuspending(event)
if (emitted && stream.stopOnMatch()) {
listener.onLogEnd(event)
listener.onLogEnded(event)
return
}
}
}
listener.onLogEnd(event)
listener.onLogEnded(event)
}

private fun createEvent(
Expand Down
20 changes: 10 additions & 10 deletions klog/src/main/kotlin/com/coditory/klog/LogListener.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,55 +3,55 @@ package com.coditory.klog
import com.coditory.klog.config.LogFilter

interface LogListener {
fun onLogStart(event: LogEvent) {}
fun onLogStarted(event: LogEvent) {}

fun onLogEnd(event: LogEvent) {}
fun onLogEnded(event: LogEvent) {}

fun onStreamStart(
fun onStreamStarted(
stream: LogStreamDescriptor,
event: LogEvent,
) {
}

fun onStreamEnd(
fun onStreamEnded(
stream: LogStreamDescriptor,
event: LogEvent,
) {
}

fun onReceived(
fun onPublishStarted(
publisher: LogPublisherDescriptor,
event: LogEvent,
) {
}

fun onReceived(
fun onPublishStarted(
publisher: LogPublisherDescriptor,
events: List<LogEvent>,
) {
}

fun onDropped(
fun onPublishDropped(
publisher: LogPublisherDescriptor,
event: LogEvent,
e: Throwable? = null,
) {
}

fun onDropped(
fun onPublishDropped(
publisher: LogPublisherDescriptor,
events: List<LogEvent>,
e: Throwable? = null,
) {
}

fun onPublished(
fun onPublishEnded(
publisher: LogPublisherDescriptor,
event: LogEvent,
) {
}

fun onPublished(
fun onPublishEnded(
publisher: LogPublisherDescriptor,
events: List<LogEvent>,
) {
Expand Down
8 changes: 4 additions & 4 deletions klog/src/main/kotlin/com/coditory/klog/LogStream.kt
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ internal class LogStream(
async: Boolean = true,
): Boolean {
if (filter.matches(event.level, event.logger)) {
listener.onStreamStart(descriptor, event)
listener.onStreamStarted(descriptor, event)
val eventWithPriority = setupPriority(event)
for (publisher in publishers) {
if (async) {
Expand All @@ -34,20 +34,20 @@ internal class LogStream(
publisher.publishBlocking(eventWithPriority)
}
}
listener.onStreamEnd(descriptor, event)
listener.onStreamEnded(descriptor, event)
return stopOnMatch
}
return false
}

suspend fun emitSuspending(event: LogEvent): Boolean {
if (filter.matches(event.level, event.logger)) {
listener.onStreamStart(descriptor, event)
listener.onStreamStarted(descriptor, event)
val eventWithPriority = setupPriority(event)
for (publisher in publishers) {
publisher.publishSuspending(eventWithPriority)
}
listener.onStreamEnd(descriptor, event)
listener.onStreamEnded(descriptor, event)
return stopOnMatch
}
return false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,24 +20,24 @@ internal class BlockingLogSink(
}

override fun publishBlocking(event: LogEvent) {
listener.onReceived(descriptor, event)
listener.onPublishStarted(descriptor, event)
try {
publisher.publishBlocking(event)
listener.onPublished(descriptor, event)
listener.onPublishEnded(descriptor, event)
} catch (e: Throwable) {
klogErrLogger.logDropped(e)
listener.onDropped(descriptor, event, e)
listener.onPublishDropped(descriptor, event, e)
}
}

override suspend fun publishSuspending(event: LogEvent) {
listener.onReceived(descriptor, event)
listener.onPublishStarted(descriptor, event)
try {
publisher.publishSuspending(event)
listener.onPublished(descriptor, event)
listener.onPublishEnded(descriptor, event)
} catch (e: Throwable) {
klogErrLogger.logDropped(e)
listener.onDropped(descriptor, event, e)
listener.onPublishDropped(descriptor, event, e)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,14 @@ internal interface LogPublisherListener {
fun dropped(
event: LogEvent,
e: Throwable? = null,
) {}
) {
}

fun dropped(
events: List<LogEvent>,
e: Throwable? = null,
) {}
) {
}

fun published(event: LogEvent) {}

Expand All @@ -32,25 +34,25 @@ internal interface LogPublisherListener {
): LogPublisherListener {
return object : LogPublisherListener {
override fun published(event: LogEvent) {
listener.onPublished(publisher, event)
listener.onPublishEnded(publisher, event)
}

override fun published(events: List<LogEvent>) {
listener.onPublished(publisher, events)
listener.onPublishEnded(publisher, events)
}

override fun dropped(
event: LogEvent,
e: Throwable?,
) {
listener.onDropped(publisher, event, e)
listener.onPublishDropped(publisher, event, e)
}

override fun dropped(
events: List<LogEvent>,
e: Throwable?,
) {
listener.onDropped(publisher, events, e)
listener.onPublishDropped(publisher, events, e)
}
}
}
Expand All @@ -64,14 +66,14 @@ internal interface LogPublisherListener {
event: LogEvent,
e: Throwable?,
) {
listener.onDropped(publisher, event, e)
listener.onPublishDropped(publisher, event, e)
}

override fun dropped(
events: List<LogEvent>,
e: Throwable?,
) {
listener.onDropped(publisher, events, e)
listener.onPublishDropped(publisher, events, e)
}
}
}
Expand All @@ -82,25 +84,25 @@ internal interface LogPublisherListener {
): LogPublisherListener {
return object : LogPublisherListener {
override fun received(event: LogEvent) {
listener.onReceived(publisher, event)
listener.onPublishStarted(publisher, event)
}

override fun received(events: List<LogEvent>) {
listener.onReceived(publisher, events)
listener.onPublishStarted(publisher, events)
}

override fun dropped(
event: LogEvent,
e: Throwable?,
) {
listener.onDropped(publisher, event, e)
listener.onPublishDropped(publisher, event, e)
}

override fun dropped(
events: List<LogEvent>,
e: Throwable?,
) {
listener.onDropped(publisher, events, e)
listener.onPublishDropped(publisher, events, e)
}
}
}
Expand Down
Loading

0 comments on commit 288e821

Please sign in to comment.