2

我已经尝试了以下步骤来为我的 akka 系统配置日志记录:

1.创建 application.conf 和 logback.xml 文件并将它们放在 src/main/resources 目录中。
2.application.conf 文件看起来像:-

    akka {  
     loggers = ["akka.event.slf4j.Slf4jLogger"]  
     logging-filter="akka.event.slf4j.Slf4jLoggingFilter"  
     log-config-on-start = on  
     loglevel = "DEBUG"  
    }  

3.logback.xml 文件看起来像:-

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

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <target>System.out</target>
    <encoder>
        <pattern>%X{akkaTimestamp} %-5level[%thread] %logger{0} - %msg%n</pattern>
    </encoder>
</appender>

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>/Users/deepak/work/logs/akka.log</file>
    <append>true</append>
    <encoder>
        <pattern>%date{yyyy-MM-dd} %X{akkaTimestamp} %-5level[%thread] %logger{1} - %msg%n</pattern>
    </encoder>
</appender>

<logger name="akka" level="DEBUG" />

<root level="DEBUG">
    <appender-ref ref="CONSOLE"/>
    <appender-ref ref="FILE"/>
</root>


4.sbt 构建依赖:-

    libraryDependencies += "com.typesafe.akka" % "akka-slf4j_2.11" % "2.4.14"  
    libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.1.3" % Test  

5.Akka Version="2.4.14"
6.构建jar文件后,我检查了application.conf和logback.xml文件在里面。所以,我不认为这是任何类路径问题。
7.我的演员与 ActorLogging 特质混合。但是当我运行 jar 文件时,我看不到日志

    import akka.actor.{Actor, ActorLogging}  
    class Reader extends Actor with ActorLogging{  
     override def receive = {  
      case _ =>log.info("Reader")  
     }  
    }  

请在这里帮忙。我无法弄清楚这个问题

4

1 回答 1

3

快速浏览后,我发现您的项目中有两个主要问题:

  1. logback.xml的格式错误。它应该<configuration></configuration>

  2. build.sbt的有问题。导入logback-classic时,您应该Test从该行中删除标志。否则,您只能在test类中使用该库。

  3. 此外,我建议您使用最新版本的akka-slf4j_2.11logback-classic。在这种情况下,这不会造成任何伤害,但要坚持最佳实践,使用最新版本。

以下是您的项目的更正版本:

构建.sbt

scalaVersion := "2.11.8"

libraryDependencies += "com.typesafe.akka" % "akka-slf4j_2.11" % "2.5.4"

//Removed the Test flag
libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.1.7"

logback.xml

 <configuration>
     <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
         <target>System.out</target>
         <encoder>
             <pattern>%X{akkaTimestamp} %-5level[%thread] %logger{0} - %msg%n</pattern>
         </encoder>
     </appender>

     <appender name="FILE" class="ch.qos.logback.core.FileAppender">
         <file>akka.log</file>
         <append>true</append>
         <encoder>
             <pattern>%date{yyyy-MM-dd} %X{akkaTimestamp} %-5level[%thread] %logger{1} - %msg%n</pattern>
         </encoder>
     </appender>

     <logger name="akka" level="DEBUG"/>

     <root level="DEBUG">
         <appender-ref ref="CONSOLE"/>
         <appender-ref ref="FILE"/>
     </root>
 </configuration>

应用程序.conf

 akka {
   loggers = ["akka.event.slf4j.Slf4jLogger"]
   logging-filter = "akka.event.slf4j.Slf4jLoggingFilter"
   log-config-on-start = on
   loglevel = "DEBUG"
 }

阅读器.scala

 import akka.actor.{Actor, ActorLogging}

 class Reader extends Actor with ActorLogging {

   override def receive = {
     case _ => log.info("Message received")
   }
 }

Main.scala

 import akka.actor.{ActorRef, ActorSystem, Props}

 object Main {
   def main(args: Array[String]): Unit = {
     implicit val system: ActorSystem = ActorSystem("reader-system")

     val ref: ActorRef = system.actorOf(Props(new Reader))

     //send message to actor
     ref ! "message"

   }

 }

使用此配置,您应该能够在 和 中运行并Main.scala查看Message received日志。std outLog file

希望这可以帮助!

于 2017-09-21T08:51:14.750 回答