aboutsummaryrefslogtreecommitdiff
path: root/dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/internal/LoggerAdapter.kt
diff options
context:
space:
mode:
authorAdam <897017+aSemy@users.noreply.github.com>2023-10-20 00:39:12 +1300
committerGitHub <noreply@github.com>2023-10-19 13:39:12 +0200
commit35d15601f2d129a7d3db67dd9e2f4c41c87ef083 (patch)
treef9098cb5b79fc31b4a393347f5cebcf9d87dd139 /dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/internal/LoggerAdapter.kt
parent8016c1face1283952e228aee348487bf0421ab90 (diff)
downloaddokka-35d15601f2d129a7d3db67dd9e2f4c41c87ef083.tar.gz
dokka-35d15601f2d129a7d3db67dd9e2f4c41c87ef083.tar.bz2
dokka-35d15601f2d129a7d3db67dd9e2f4c41c87ef083.zip
Contribute Dokkatoo (#3188)
Diffstat (limited to 'dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/internal/LoggerAdapter.kt')
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/internal/LoggerAdapter.kt65
1 files changed, 65 insertions, 0 deletions
diff --git a/dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/internal/LoggerAdapter.kt b/dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/internal/LoggerAdapter.kt
new file mode 100644
index 00000000..0a1b94fc
--- /dev/null
+++ b/dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/internal/LoggerAdapter.kt
@@ -0,0 +1,65 @@
+package org.jetbrains.dokka.dokkatoo.internal
+
+import java.io.File
+import java.io.Writer
+import java.util.concurrent.atomic.AtomicInteger
+import org.jetbrains.dokka.utilities.DokkaLogger
+import org.jetbrains.dokka.utilities.LoggingLevel
+
+/**
+ * Logs all Dokka messages to a file.
+ *
+ * @see org.jetbrains.dokka.DokkaGenerator
+ */
+// Gradle causes OOM errors when there is a lot of console output. Logging to file is a workaround.
+// https://github.com/gradle/gradle/issues/23965
+// https://github.com/gradle/gradle/issues/15621
+internal class LoggerAdapter(
+ outputFile: File
+) : DokkaLogger, AutoCloseable {
+
+ private val logWriter: Writer
+
+ init {
+ if (!outputFile.exists()) {
+ outputFile.parentFile.mkdirs()
+ outputFile.createNewFile()
+ }
+
+ logWriter = outputFile.bufferedWriter()
+ }
+
+ private val warningsCounter = AtomicInteger()
+ private val errorsCounter = AtomicInteger()
+
+ override var warningsCount: Int
+ get() = warningsCounter.get()
+ set(value) = warningsCounter.set(value)
+
+ override var errorsCount: Int
+ get() = errorsCounter.get()
+ set(value) = errorsCounter.set(value)
+
+ override fun debug(message: String) = log(LoggingLevel.DEBUG, message)
+ override fun progress(message: String) = log(LoggingLevel.PROGRESS, message)
+ override fun info(message: String) = log(LoggingLevel.INFO, message)
+
+ override fun warn(message: String) {
+ warningsCount++
+ log(LoggingLevel.WARN, message)
+ }
+
+ override fun error(message: String) {
+ errorsCount++
+ log(LoggingLevel.ERROR, message)
+ }
+
+ @Synchronized
+ private fun log(level: LoggingLevel, message: String) {
+ logWriter.appendLine("[${level.name}] $message")
+ }
+
+ override fun close() {
+ logWriter.close()
+ }
+}