mirror of
https://github.com/digital-asset/daml.git
synced 2024-09-20 01:07:18 +03:00
Provide log-encoder option for trigger-runner and trigger-service to enable json logging
CHANGELOG_BEGIN * JSON encoder support for trigger controlled via CLI option --log-encoder CHANGELOG_END
This commit is contained in:
parent
4354c5d06b
commit
c43ee235d2
@ -1,9 +1,22 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration>
|
||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg %replace(, context: %marker){', context: $', ''} %n</pattern>
|
||||
</encoder>
|
||||
<appender name="STDOUT" class="net.logstash.logback.appender.LoggingEventAsyncDisruptorAppender">
|
||||
<appender-ref ref="console" />
|
||||
</appender>
|
||||
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<if condition='isDefined("LOG_FORMAT_JSON")'>
|
||||
<then>
|
||||
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
|
||||
<layout class="net.logstash.logback.layout.LoggingEventCompositeJsonLayout"/>
|
||||
</encoder>
|
||||
</then>
|
||||
<else>
|
||||
<encoder>
|
||||
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg %replace(, context: %marker){', context: $', ''} %n</pattern>
|
||||
</encoder>
|
||||
</else>
|
||||
</if>
|
||||
</appender>
|
||||
|
||||
<logger name="io.netty" level="WARN" />
|
||||
|
@ -19,6 +19,12 @@ import com.daml.lf.speedy.Compiler
|
||||
|
||||
import scala.concurrent.{ExecutionContext, Future}
|
||||
|
||||
sealed trait LogEncoder
|
||||
object LogEncoder {
|
||||
object Plain extends LogEncoder
|
||||
object Json extends LogEncoder
|
||||
}
|
||||
|
||||
case class RunnerConfig(
|
||||
darPath: Path,
|
||||
// If defined, we will only list the triggers in the DAR and exit.
|
||||
@ -37,6 +43,7 @@ case class RunnerConfig(
|
||||
compilerConfig: Compiler.Config,
|
||||
triggerConfig: TriggerRunnerConfig,
|
||||
rootLoggingLevel: Option[Level],
|
||||
logEncoder: LogEncoder,
|
||||
) {
|
||||
private def updatePartySpec(f: TriggerParties => TriggerParties): RunnerConfig =
|
||||
if (ledgerClaims == null) {
|
||||
@ -233,6 +240,15 @@ object RunnerConfig {
|
||||
.valueName("<LEVEL>")
|
||||
.action((level, cli) => cli.copy(rootLoggingLevel = Some(level)))
|
||||
|
||||
opt[String]("log-encoder")
|
||||
.text("Log encoder: plain|json")
|
||||
.action {
|
||||
case ("json", cli) => cli.copy(logEncoder = LogEncoder.Json)
|
||||
case ("plain", cli) => cli.copy(logEncoder = LogEncoder.Plain)
|
||||
case (other, _) =>
|
||||
throw new IllegalArgumentException(s"Unsupported logging encoder $other")
|
||||
}
|
||||
|
||||
opt[Unit]("dev-mode-unsafe")
|
||||
.action((_, c) => c.copy(compilerConfig = Compiler.Config.Dev))
|
||||
.optional()
|
||||
@ -316,5 +332,6 @@ object RunnerConfig {
|
||||
compilerConfig = DefaultCompilerConfig,
|
||||
triggerConfig = DefaultTriggerRunnerConfig,
|
||||
rootLoggingLevel = None,
|
||||
logEncoder = LogEncoder.Plain,
|
||||
)
|
||||
}
|
||||
|
@ -59,7 +59,12 @@ object RunnerMain {
|
||||
RunnerConfig.parse(args) match {
|
||||
case None => sys.exit(1)
|
||||
case Some(config) => {
|
||||
config.rootLoggingLevel.foreach(setLoggingLevel("LOG_LEVEL_ROOT", _))
|
||||
config.rootLoggingLevel.foreach(setLoggingLevel)
|
||||
config.logEncoder match {
|
||||
case LogEncoder.Plain =>
|
||||
case LogEncoder.Json =>
|
||||
discard(System.setProperty("LOG_FORMAT_JSON", "true"))
|
||||
}
|
||||
|
||||
val dar: Dar[(PackageId, Package)] =
|
||||
DarDecoder.assertReadArchiveFromFile(config.darPath.toFile)
|
||||
@ -125,7 +130,7 @@ object RunnerMain {
|
||||
}
|
||||
}
|
||||
|
||||
private def setLoggingLevel(name: String, level: Level): Unit = {
|
||||
discard(System.setProperty(name, level.levelStr))
|
||||
private def setLoggingLevel(level: Level): Unit = {
|
||||
discard(System.setProperty("LOG_LEVEL_ROOT", level.levelStr))
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,21 @@
|
||||
<configuration>
|
||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
|
||||
</encoder>
|
||||
<appender name="STDOUT" class="net.logstash.logback.appender.LoggingEventAsyncDisruptorAppender">
|
||||
<appender-ref ref="console" />
|
||||
</appender>
|
||||
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<if condition='isDefined("LOG_FORMAT_JSON")'>
|
||||
<then>
|
||||
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
|
||||
<layout class="net.logstash.logback.layout.LoggingEventCompositeJsonLayout"/>
|
||||
</encoder>
|
||||
</then>
|
||||
<else>
|
||||
<encoder>
|
||||
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
|
||||
</encoder>
|
||||
</else>
|
||||
</if>
|
||||
</appender>
|
||||
|
||||
<logger name="io.netty" level="WARN">
|
||||
|
@ -1,8 +1,21 @@
|
||||
<configuration>
|
||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
|
||||
</encoder>
|
||||
<appender name="STDOUT" class="net.logstash.logback.appender.LoggingEventAsyncDisruptorAppender">
|
||||
<appender-ref ref="console" />
|
||||
</appender>
|
||||
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<if condition='isDefined("LOG_FORMAT_JSON")'>
|
||||
<then>
|
||||
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
|
||||
<layout class="net.logstash.logback.layout.LoggingEventCompositeJsonLayout"/>
|
||||
</encoder>
|
||||
</then>
|
||||
<else>
|
||||
<encoder>
|
||||
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
|
||||
</encoder>
|
||||
</else>
|
||||
</if>
|
||||
</appender>
|
||||
|
||||
<logger name="io.netty" level="WARN">
|
||||
|
@ -54,6 +54,7 @@ private[trigger] final case class Cli(
|
||||
compilerConfig: Compiler.Config,
|
||||
triggerConfig: TriggerRunnerConfig,
|
||||
rootLoggingLevel: Option[Level],
|
||||
logEncoder: LogEncoder,
|
||||
) extends StrictLogging {
|
||||
|
||||
def loadFromConfigFile: Option[Either[ConfigReaderFailures, TriggerServiceAppConf]] =
|
||||
@ -87,6 +88,7 @@ private[trigger] final case class Cli(
|
||||
compilerConfig = compilerConfig,
|
||||
triggerConfig = triggerConfig,
|
||||
rootLoggingLevel = rootLoggingLevel,
|
||||
logEncoder = logEncoder,
|
||||
)
|
||||
}
|
||||
|
||||
@ -160,6 +162,7 @@ private[trigger] object Cli {
|
||||
compilerConfig = DefaultCompilerConfig,
|
||||
triggerConfig = DefaultTriggerRunnerConfig,
|
||||
rootLoggingLevel = None,
|
||||
logEncoder = LogEncoder.Plain,
|
||||
)
|
||||
|
||||
@SuppressWarnings(Array("org.wartremover.warts.NonUnitStatements")) // scopt builders
|
||||
@ -310,6 +313,15 @@ private[trigger] object Cli {
|
||||
.valueName("<LEVEL>")
|
||||
.action((level, cli) => cli.copy(rootLoggingLevel = Some(level)))
|
||||
|
||||
opt[String]("log-encoder")
|
||||
.text("Log encoder: plain|json")
|
||||
.action {
|
||||
case ("json", cli) => cli.copy(logEncoder = LogEncoder.Json)
|
||||
case ("plain", cli) => cli.copy(logEncoder = LogEncoder.Plain)
|
||||
case (other, _) =>
|
||||
throw new IllegalArgumentException(s"Unsupported logging encoder $other")
|
||||
}
|
||||
|
||||
opt[Unit]("dev-mode-unsafe")
|
||||
.action((_, c) => c.copy(compilerConfig = Compiler.Config.Dev))
|
||||
.optional()
|
||||
|
@ -44,4 +44,5 @@ private[trigger] final case class ServiceConfig(
|
||||
compilerConfig: Compiler.Config,
|
||||
triggerConfig: TriggerRunnerConfig,
|
||||
rootLoggingLevel: Option[Level],
|
||||
logEncoder: LogEncoder,
|
||||
)
|
||||
|
@ -95,7 +95,12 @@ object ServiceMain {
|
||||
) match {
|
||||
case None => sys.exit(1)
|
||||
case Some(config) =>
|
||||
config.rootLoggingLevel.foreach(setLoggingLevel("LOG_LEVEL_ROOT", _))
|
||||
config.rootLoggingLevel.foreach(setLoggingLevel)
|
||||
config.logEncoder match {
|
||||
case LogEncoder.Plain =>
|
||||
case LogEncoder.Json =>
|
||||
discard(System.setProperty("LOG_FORMAT_JSON", "true"))
|
||||
}
|
||||
|
||||
val logger = ContextualizedLogger.get(this.getClass)
|
||||
val encodedDars: List[Dar[(PackageId, DamlLf.ArchivePayload)]] =
|
||||
@ -200,7 +205,7 @@ object ServiceMain {
|
||||
}
|
||||
}
|
||||
|
||||
private def setLoggingLevel(name: String, level: Level): Unit = {
|
||||
discard(System.setProperty(name, level.levelStr))
|
||||
private def setLoggingLevel(level: Level): Unit = {
|
||||
discard(System.setProperty("LOG_LEVEL_ROOT", level.levelStr))
|
||||
}
|
||||
}
|
||||
|
@ -64,9 +64,19 @@ private[trigger] object TriggerServiceAppConf {
|
||||
}
|
||||
})
|
||||
|
||||
implicit val levelRead: ConfigReader[Level] =
|
||||
implicit val levelReader: ConfigReader[Level] =
|
||||
ConfigReader.fromString[Level](level => Right(Level.valueOf(level)))
|
||||
|
||||
implicit val logEncoderReader: ConfigReader[LogEncoder] =
|
||||
ConfigReader.fromString[LogEncoder](ConvertHelpers.catchReadError {
|
||||
case "plain" => LogEncoder.Plain
|
||||
case "json" => LogEncoder.Json
|
||||
case s =>
|
||||
throw new IllegalArgumentException(
|
||||
s"Value '$s' for log-encoder is not one of 'plain' or 'json'"
|
||||
)
|
||||
})
|
||||
|
||||
implicit val serviceCfgReader: ConfigReader[TriggerServiceAppConf] =
|
||||
deriveReader[TriggerServiceAppConf]
|
||||
|
||||
@ -97,6 +107,7 @@ private[trigger] final case class TriggerServiceAppConf(
|
||||
compilerConfig: Compiler.Config = Compiler.Config.Default,
|
||||
triggerConfig: TriggerRunnerConfig = DefaultTriggerRunnerConfig,
|
||||
rootLoggingLevel: Option[Level] = None,
|
||||
logEncoder: LogEncoder = LogEncoder.Plain,
|
||||
) {
|
||||
def toServiceConfig: ServiceConfig = {
|
||||
ServiceConfig(
|
||||
@ -127,6 +138,7 @@ private[trigger] final case class TriggerServiceAppConf(
|
||||
compilerConfig = compilerConfig,
|
||||
triggerConfig = triggerConfig,
|
||||
rootLoggingLevel = rootLoggingLevel,
|
||||
logEncoder = logEncoder,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,21 @@
|
||||
<configuration>
|
||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg %replace(, context: %marker){', context: $', ''} %n</pattern>
|
||||
</encoder>
|
||||
<appender name="STDOUT" class="net.logstash.logback.appender.LoggingEventAsyncDisruptorAppender">
|
||||
<appender-ref ref="console" />
|
||||
</appender>
|
||||
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<if condition='isDefined("LOG_FORMAT_JSON")'>
|
||||
<then>
|
||||
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
|
||||
<layout class="net.logstash.logback.layout.LoggingEventCompositeJsonLayout"/>
|
||||
</encoder>
|
||||
</then>
|
||||
<else>
|
||||
<encoder>
|
||||
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg %replace(, context: %marker){', context: $', ''} %n</pattern>
|
||||
</encoder>
|
||||
</else>
|
||||
</if>
|
||||
</appender>
|
||||
|
||||
<logger name="io.netty" level="WARN">
|
||||
|
Loading…
Reference in New Issue
Block a user