使用Akka的logback

时间:2015-02-19 15:24:11

标签: scala akka logback

我在使用我的Akka(2.3.9)应用程序时使用Logback存在一些问题。为了记录到stdout并在日志文件中,我使用所有appender指定了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>

之后我在我的演员中使用登录:

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进程没有打开日志文件。

2 个答案:

答案 0 :(得分:0)

我不知道错误但您可以执行以下操作:

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

答案 1 :(得分:0)

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