summaryrefslogtreecommitdiff
path: root/support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/LoggingUtils.kt
diff options
context:
space:
mode:
Diffstat (limited to 'support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/LoggingUtils.kt')
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/LoggingUtils.kt70
1 files changed, 70 insertions, 0 deletions
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/LoggingUtils.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/LoggingUtils.kt
new file mode 100644
index 0000000000..f9719fa31f
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/LoggingUtils.kt
@@ -0,0 +1,70 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.utils
+
+import ch.qos.logback.classic.LoggerContext
+import ch.qos.logback.classic.joran.JoranConfigurator
+import ch.qos.logback.core.joran.spi.JoranException
+import java.io.InputStream
+import org.islandoftex.arara.Arara
+import org.islandoftex.arara.configuration.AraraSpec
+import org.slf4j.LoggerFactory
+
+/**
+ * Implements the logging controller. This class actually sets the logging
+ * configuration in order to allow appending results to a file.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+object LoggingUtils {
+ // configuration resource as an input stream
+ // the configuration is actually a XML file.
+ private val resource: InputStream by lazy {
+ LoggingUtils::class.java
+ .getResourceAsStream("/org/islandoftex/arara/configuration/logback.xml")
+ }
+
+ /**
+ * Sets the logging configuration according to the provided boolean value.
+ * If the value is set to true, the log entries will be appended to a file,
+ * otherwise the logging feature will keep silent.
+ * @param enable A boolean value that indicates the logging behaviour
+ * throughout the application.
+ */
+ fun enableLogging(enable: Boolean) {
+ // get the logger context from a factory, set a
+ // new context and reset it
+ val loggerContext = LoggerFactory.getILoggerFactory() as LoggerContext
+
+ try {
+ // get a new configuration and set
+ // the context
+ val configurator = JoranConfigurator()
+ configurator.context = loggerContext
+ loggerContext.reset()
+
+ // if enabled, the log entries will be
+ // appended to a file, otherwise it will
+ // remain silent
+ if (enable) {
+ // set the file name and configure
+ // the logging controller to append
+ // entries to the file
+ val name = Arara.config[AraraSpec.Execution.logName]
+ loggerContext.putProperty("name", name)
+ configurator.doConfigure(resource)
+ }
+ } catch (_: JoranException) {
+ // quack, quack, quack!
+ }
+ }
+
+ /**
+ * Initializes the logging controller by disabling it. I don't want an odd
+ * behaviour out of the box.
+ */
+ fun init() {
+ enableLogging(false)
+ }
+}