Translator didn't report invalid '$' char in logger name, only when running app, logback threw exception:
16:07:38,628 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter@701:80 - RuntimeException in Action for tag [logger] java.lang.IllegalArgumentException: Failed to parse input [kafka.network.RequestChannel$]
at java.lang.IllegalArgumentException: Failed to parse input [kafka.network.RequestChannel$]
at at ch.qos.logback.core.util.OptionHelper.substVars(OptionHelper.java:114)
at at ch.qos.logback.core.joran.spi.InterpretationContext.subst(InterpretationContext.java:157)
at at ch.qos.logback.classic.joran.action.LoggerAction.begin(LoggerAction.java:44)
at at ch.qos.logback.core.joran.spi.Interpreter.callBeginAction(Interpreter.java:269)
at at ch.qos.logback.core.joran.spi.Interpreter.startElement(Interpreter.java:145)
at at ch.qos.logback.core.joran.spi.Interpreter.startElement(Interpreter.java:128)
at at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:50)
at at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:148)
at at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:135)
at at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:100)
at at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:50)
at at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:75)
at at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:150)
at at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:84)
at at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:55)
at at org.slf4j.LoggerFactory.bind(LoggerFactory.java:147)
at at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:122)
at at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:378)
at at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:328)
at at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:349)
at at org.apache.kafka.common.utils.Utils.<clinit>(Utils.java:54)
at at kafka.Kafka$.getPropsFromArgs(Kafka.scala:41)
at at kafka.Kafka$.main(Kafka.scala:57)
at at kafka.Kafka.main(Kafka.scala)
Caused by: ch.qos.logback.core.spi.ScanException: Unexpected end of pattern string
at at ch.qos.logback.core.subst.Tokenizer.tokenize(Tokenizer.java:70)
at at ch.qos.logback.core.subst.NodeToStringTransformer.tokenizeAndParseString(NodeToStringTransformer.java:53)
at at ch.qos.logback.core.subst.NodeToStringTransformer.substituteVariable(NodeToStringTransformer.java:46)
at at ch.qos.logback.core.util.OptionHelper.substVars(OptionHelper.java:112)
at ... 23 common frames omittedShould $ char be allowed in logger name? In other words is it bug in configuration if one uses it or is it bug in logback that it doesn't handle it well? I'm using logback 1.7.18.
Secondly, translator had problems converting data pattern like:
log4j.appender.kafkaAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.kafkaAppender.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.kafkaAppender.File=${kafka.logs.dir}/server.log
it converted that to
...
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${kafka.logs.dir}/server.log.%d{'.'yyyy-MM-dd-HH}</fileNamePattern>
</rollingPolicy>
...
where Logback complained about that dot '.' in fileNamePattern as invalid.
Lastly, it seems in Logback specification when to roll (e.g. daily) and what should be format and info included in the file name are tightly coupled.
Kind regards,
Stevo Slavic.