【问题标题】:Spray application slf4j logging to console, not to file将应用程序 slf4j 记录到控制台,而不是文件
【发布时间】:2014-06-15 06:46:30
【问题描述】:

我有一个应用程序配置了 akka 文档中提到的日志记录

akka {
  version="2.3.0"
  loglevel = "DEBUG"
  event-handlers = ["akka.event.slf4j.Slf4jLogger"]
}

和资源目录中的 logback.xml:

<?xml version="1.0" encoding="UTF-8"?>

<configuration scan="false" debug="false">
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%date{ISO8601} %-5level [%logger{36}] [%X{akkaSource}] [%X{sourceThread}] [%X{traceId}] : %m%n</pattern>
        </encoder>
    </appender>
    <appender name="R" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>log/info.log</File>
        <encoder>
            <pattern>%date{ISO8601} %-5level [%logger{36}] [%X{akkaSource}] [%X{sourceThread}] : %m%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${atmos.dir}/atmos.log.%d{yyyy-MM-dd-HH}</fileNamePattern>
        </rollingPolicy>
    </appender>
    <logger name="org.eclipse.jetty.util.log" level="INFO"/>
    <!-- Play2: Off these ones as they are annoying, and anyway we manage configuration ourself -->
    <logger name="com.avaje.ebean.config.PropertyMapLoader" level="OFF" />
    <logger name="com.avaje.ebeaninternal.server.core.XmlConfigLoader" level="OFF" />
    <logger name="com.avaje.ebeaninternal.server.lib.BackgroundThread" level="OFF" />

    <root level="INFO">
        <!--<appender-ref ref="stdout"/>-->
        <appender-ref ref="R"/>
    </root>
</configuration>

由于某种原因,我只有来自外部依赖项的日志进入 info.log 文件,所有使用ActorLoggin trait 进行的日志都打印到控制台。

这让我发疯,实际上我不知道我做错了什么......

任何建议将不胜感激......

【问题讨论】:

    标签: logging akka slf4j logback spray


    【解决方案1】:

    要在单独的文件中记录 Spray REST 请求-响应,我使用以下设置:

    1) 在 Akka 配置中:"spray.util.log-actor-paths-with-dots":"on"

    2) 在 Logback 配置中:

    <logger name="akka.actor.path.separated.by.Dots" level="INFO">
      <appender-ref ref="REST-FILE"/>
    </logger>
    

    3) 代码中的logRequestResponse 指令

    【讨论】:

    • 您确定在 logback 配置中正确指定了完整的 Actor 路径(以点分隔)吗?您可以在成功的 Spray 日志条目中(在日志文件或控制台中)查找正确的 Actor 路径。
    • 我已经尝试过使用包前缀和特定的 Actor 完整路径。这很奇怪。似乎问题出在其他地方,因为当我创建带有包前缀的记录器时,我注意到日志文件中的 slick 库中有一些日志。所以这必须与 slf4j 的 akka 事件处理程序有关,但我仍然不知道它是什么。
    猜你喜欢
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多