【问题标题】:Using logback with Akka在 Akka 中使用 logback
【发布时间】:2015-02-19 15:24:10
【问题描述】:

我在 Akka (2.3.9) 应用程序中使用 Logback 时遇到了一些问题。为了登录到标准输出和日志文件,我指定了带有所有附加程序的 logback.xml:

    <?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="5 seconds" debug="true">
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <target>System.out</target>
        <encoder>
            <pattern>%X{akkaTimestamp} %-5level %logger{36} %X{sourceThread} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>./akka.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>./akka.log.%d{yyyy-MM-dd-HH}</fileNamePattern>
        </rollingPolicy>
        <encoder>
            <pattern>%X{akkaTimestamp} %-5level %logger{36} %X{sourceThread} - %msg%n</pattern>
        </encoder>
    </appender>

    <logger name="proc" level="INFO">
        <appender-ref ref="FILE"/>
        <appender-ref ref="STDOUT"/>
    </logger>

    <logger name="akka.actor" level="INFO">
        <appender-ref ref="FILE"/>
        <appender-ref ref="STDOUT"/>
    </logger>

    <root level="INFO">
        <appender-ref ref="FILE"/>
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>

之后我使用登录我的 Actor:

val log = Logging(context.system, classOf[MyActor])

override def receive: Receive = {
  case MyEvent(event) =>
     log.info("Message received for processing.")
}

问题是,在 SBT 中一切都很好:我可以在创建的日志文件中看到所有日志事件。

当我使用 sbt-assembly 制作 JAR-File 并启动此 jar 文件时(java -jar event-assembly-0.1.1-SNAPSHOT.jar)。应用程序将日志条目写入 STDOUT 但不在文件中!

我不知道如何解决这个问题。我试过“lsof”,java进程没有打开的日志文件。

【问题讨论】:

    标签: scala akka logback


    【解决方案1】:

    我不知道出了什么问题,但您可以执行以下操作:

    • 检查您的 logback.xml 是否在 jar 文件中
    • 尝试使用 java -Dlogback.configurationFile=/path/to/logback.xml -jar event-assembly-0.1.1-SNAPSHOT.jar 启动您的应用程序

    【讨论】:

    • 我解决了这个问题:sbt-assembly 从结果 jar 中删除了一些 logback-binaries。在我更改了用于 logback 的 MergingStrategy 后,一切正常。谢谢。
    【解决方案2】:

    所以,我是如何发现的,sbt-assembly 从结果 jar 中删除了一些 logback-binaries(它是我的 Build.scala 中的设置)。在我更改 MergingStrategy 以保留结果构建中的第一个 logback 事件后,一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-20
      • 1970-01-01
      • 2012-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多