scala - 如何从Typesafe config配置系统属性或回退配置变量?

标签 scala configuration akka logback typesafe-stack

我的logback.xml配置文件中有带有默认值的变量,我希望能够有选择地从我的typesafe config application.conf文件中设置这些变量。

我正在使用一个jar部署应用程序,并且打包在可部署jar中的application.conf文件包含默认值。我在执行时通过-Dconfig.file=foo.conf来提供服务器特定配置文件的路径。

现在,我还可以传递-Dlog.level和其他变量来覆盖logback.xml中的默认值,而且我还必须在命令行上传递-Dfile.encoding=UTF-8。我正在寻找一种能够在typesafe配置中而不是在命令行中指定这些属性的方法。感觉应该有一种方法可以做到,但是我找不到神奇的词。

logback.xml:

<configuration>
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path:-logs/}/${log.file:-myLog.log}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover -->
            <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>

            <!-- keep 15 days' worth of history -->
            <maxHistory>${log.history.days:-15}</maxHistory>
        </rollingPolicy>

        <encoder>
            <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="${log.level:-INFO}">
        <appender-ref ref="FILE" />
    </root>
</configuration>


application.conf(捆绑):

akka {
    log-config-on-start = false
    event-handlers = ["akka.event.slf4j.Slf4jEventHandler"]
}


特定于服务器的示例app.conf:

include "/application.conf"

akka.log-config-on-start = true

log.level = WARN // this is what I'd LIKE to be able to do


我目前如何运行该应用程序:

java -Dfile.encoding=UTF-8 -Dconfig.file=myApp.conf -Dlog.level=WARN -jar myApp_2.10-0.1-one-jar.jar 

最佳答案

我选择以编程方式配置具有typesafe配置的logback。事实证明这很容易。

def enableRemoteLogging(config: Config) = {
    val ctx = LoggerFactory.getILoggerFactory.asInstanceOf[LoggerContext]

    val gelf = new GelfAppender
    gelf.setGraylog2ServerHost(config.getString("logging.remote.server"))
    gelf.setUseLoggerName(true)
    gelf.setUseThreadName(true)
    gelf.setUseMarker(true)
    gelf.setIncludeFullMDC(true)
    gelf.setContext(ctx)
    gelf.start()

    LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME)
      .asInstanceOf[ch.qos.logback.classic.Logger]
      .addAppender(gelf)
  }

关于scala - 如何从Typesafe config配置系统属性或回退配置变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15097967/

相关文章:

regex - scala 正则表达式组匹配和替换

javascript - 从 SJSIR `manually` 构建 JS

java - Akka 是否有一个 ExecutorCompletionService 等效项,其中 Futures 按其完成时间排队?

scala - 为什么 javaBigDecimal2bigDecimal 隐式不适用?

scala - 自动刷新 ENSIME 错误缓冲区

configuration - Ansible-playbook:直接运行处理程序

ubuntu - 如何在nginx中配置多个子域?

ruby-on-rails-3 - Ruby-on-Rails : How do I change default rendering option :layout to 'false' ?

java - 使用 Java Web App 中的 (Scala) 库,获取 NoClassDefFoundError

scala - 我可以使用 Akka 的 SetEventListener 而不会将我的测试输出污染到 STDOUT 吗?