From 8667234fe392524078cbf26e7e57f45d70023458 Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Mon, 19 Apr 2021 19:43:45 +0000
Subject: [PATCH] EmphasizedLogSupport from ProjectForge copied.
---
borgbutler-core/src/main/kotlin/de/micromata/borgbutler/EmphasizedLogSupport.kt | 134 ++++++++++++++++++++++++++++++++++++++++++++
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/BorgButlerApplication.kt | 16 +++--
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/WebConfig.kt | 18 +++---
3 files changed, 153 insertions(+), 15 deletions(-)
diff --git a/borgbutler-core/src/main/kotlin/de/micromata/borgbutler/EmphasizedLogSupport.kt b/borgbutler-core/src/main/kotlin/de/micromata/borgbutler/EmphasizedLogSupport.kt
new file mode 100644
index 0000000..b720941
--- /dev/null
+++ b/borgbutler-core/src/main/kotlin/de/micromata/borgbutler/EmphasizedLogSupport.kt
@@ -0,0 +1,134 @@
+/////////////////////////////////////////////////////////////////////////////
+//
+// Project ProjectForge Community Edition
+// www.projectforge.org
+//
+// Copyright (C) 2001-2021 Micromata GmbH, Germany (www.micromata.com)
+//
+// ProjectForge is dual-licensed.
+//
+// This community edition is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License as published
+// by the Free Software Foundation; version 3 of the License.
+//
+// This community edition is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+// Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this program; if not, see http://www.gnu.org/licenses/.
+//
+/////////////////////////////////////////////////////////////////////////////
+
+package de.micromata.borgbutler
+
+import mu.KLogger
+import mu.KotlinLogging
+import org.apache.commons.lang3.StringUtils
+
+/**
+ * Helper for logging very important information and warnings.
+ */
+class EmphasizedLogSupport @JvmOverloads constructor(
+ private val log: KLogger,
+ priority: Priority? = Priority.IMPORTANT,
+ private val alignment: Alignment = Alignment.CENTER
+) {
+ private var number = 0
+ private val innerLength: Int
+ var logLevel = LogLevel.INFO
+ private var started = false
+
+ constructor(log: KLogger, alignment: Alignment= Alignment.CENTER) : this(log, Priority.IMPORTANT, alignment)
+
+ enum class Priority {
+ NORMAL, IMPORTANT, VERY_IMPORTANT
+ }
+
+ enum class Alignment {
+ CENTER, LEFT
+ }
+
+ enum class LogLevel {
+ ERROR, WARN, INFO
+ }
+
+ private fun ensureStart() {
+ if (!started) {
+ started = true
+ logStartSeparator()
+ }
+ }
+
+ /**
+ * @return this for chaining.
+ */
+ private fun logStartSeparator(): EmphasizedLogSupport {
+ for (i in 0 until number) {
+ logSeparatorLine()
+ }
+ return log("")
+ }
+
+ /**
+ * @return this for chaining.
+ */
+ fun logEnd(): EmphasizedLogSupport {
+ ensureStart()
+ log("")
+ for (i in 0 until number) {
+ logSeparatorLine()
+ }
+ return this
+ }
+
+ private fun logSeparatorLine() {
+ logLine(StringUtils.rightPad("", innerLength, '*') + asterisks(number * 2 + 2))
+ }
+
+ fun log(text: String?): EmphasizedLogSupport {
+ ensureStart()
+ if (text?.contains("\n") == true) {
+ for (line in StringUtils.splitPreserveAllTokens(text, '\n')) {
+ logLineText(line)
+ }
+ } else {
+ logLineText(text)
+ }
+ return this
+ }
+
+ private fun logLineText(line: String?) {
+ val padText = if (alignment == Alignment.LEFT)
+ StringUtils.rightPad(line, innerLength)
+ else
+ StringUtils.center(line, innerLength)
+ logLine(asterisks(number) + " " + padText + " " + asterisks(number))
+ }
+
+ private fun logLine(msg: String) {
+ if (logLevel == LogLevel.ERROR) log.error(msg) else if (logLevel == LogLevel.WARN) log.warn(msg) else log.info(
+ msg
+ )
+ }
+
+ companion object {
+ private const val CONSOLE_LENGTH = 120
+ private fun asterisks(number: Int): String {
+ return StringUtils.rightPad("*", number, '*')
+ }
+ }
+
+ init {
+ when (priority) {
+ Priority.NORMAL -> number = 1
+ Priority.VERY_IMPORTANT -> {
+ number = 5
+ logLevel = LogLevel.WARN
+ }
+ else -> number = 2
+ }
+ innerLength = CONSOLE_LENGTH - 2 * number
+ }
+}
diff --git a/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/BorgButlerApplication.kt b/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/BorgButlerApplication.kt
index d577112..935dc57 100644
--- a/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/BorgButlerApplication.kt
+++ b/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/BorgButlerApplication.kt
@@ -1,5 +1,6 @@
package de.micromata.borgbutler.server
+import de.micromata.borgbutler.EmphasizedLogSupport
import de.micromata.borgbutler.cache.ButlerCache
import de.micromata.borgbutler.config.ConfigurationHandler
import de.micromata.borgbutler.config.ConfigurationHandler.Companion.init
@@ -119,23 +120,26 @@
}
val uri = URI.create(url)
val quietMode = line.hasOption('q')
+ val emphasizedLog = EmphasizedLogSupport(log)
if (!quietMode && RunningMode.desktopSupportsBrowse) {
try {
- log.info { "Trying to open your local web browser: $uri" }
+ emphasizedLog.log("Trying to open your local web browser: $uri")
Desktop.getDesktop().browse(uri)
} catch (ex: Exception) {
- log.info("Can't open web browser: " + ex.message, ex)
- log.info("Desktop not available. Please open your browser manually: $uri")
+ emphasizedLog.logLevel = EmphasizedLogSupport.LogLevel.ERROR
+ emphasizedLog.log("Can't open web browser: " + ex.message)
+ emphasizedLog.log("Desktop not available. Please open your browser manually: $uri")
}
} else {
if (quietMode) {
- log.info("Server started in quiet mode (option -q). Please open your browser manually: $uri")
+ emphasizedLog.log("Server started in quiet mode (option -q). Please open your browser manually: $uri")
} else if (RunningMode.headlessMode) {
- log.info("Desktop not available in headless mode. Please open your browser manually: $uri")
+ emphasizedLog.log("Desktop not available in headless mode. Please open your browser manually: $uri")
} else if (!RunningMode.desktopSupportsBrowse) {
- log.info("Desktop not available. Please open your browser manually: $uri")
+ emphasizedLog.log("Desktop not available. Please open your browser manually: $uri")
}
}
+ emphasizedLog.logEnd()
} catch (ex: ParseException) {
// oops, something went wrong
System.err.println("Parsing failed. Reason: " + ex.message)
diff --git a/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/WebConfig.kt b/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/WebConfig.kt
index b7f45b0..1e4783a 100644
--- a/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/WebConfig.kt
+++ b/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/WebConfig.kt
@@ -1,5 +1,6 @@
package de.micromata.borgbutler.server
+import de.micromata.borgbutler.EmphasizedLogSupport
import mu.KotlinLogging
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
@@ -56,15 +57,14 @@
override fun addCorsMappings(registry: CorsRegistry) {
if (RunningMode.webDevelopment) {
- log.warn("************************************")
- log.warn("*********** **********")
- log.warn("*********** ATTENTION! **********")
- log.warn("*********** **********")
- log.warn("*********** Running in **********")
- log.warn("*********** web dev mode! **********")
- log.warn("*********** **********")
- log.warn("************************************")
- log.warn("Don't deliver this app in dev mode due to security reasons (CrossOriginFilter is set)!")
+ val emphasizedLog = EmphasizedLogSupport(log)
+ emphasizedLog.logLevel = EmphasizedLogSupport.LogLevel.WARN
+ emphasizedLog.log("ATTENTION!")
+ emphasizedLog.log("")
+ emphasizedLog.log("Running in web dev mode!")
+ emphasizedLog.log("")
+ emphasizedLog.log("Don't deliver this app in dev mode due to security reasons (CrossOriginFilter is set)!")
+ emphasizedLog.logEnd()
registry.addMapping("/**")
}
}
--
Gitblit v1.10.0