Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging Akka slf4j不工作_Logging_Akka_Slf4j_Logback Classic - Fatal编程技术网

Logging Akka slf4j不工作

Logging Akka slf4j不工作,logging,akka,slf4j,logback-classic,Logging,Akka,Slf4j,Logback Classic,我尝试了以下步骤来配置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-conf

我尝试了以下步骤来配置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"  
    }  
    <?xml version="1.0" encoding="UTF-8"?>
3.logback.xml文件如下所示:

    akka {  
     loggers = ["akka.event.slf4j.Slf4jLogger"]  
     logging-filter="akka.event.slf4j.Slf4jLoggingFilter"  
     log-config-on-start = on  
     loglevel = "DEBUG"  
    }  
    <?xml version="1.0" encoding="UTF-8"?>
5.Akka Version=“2.4.14”
6.构建jar文件后,我检查了其中的application.conf和logback.xml文件。因此,我认为这不是任何类路径问题。
7.我的演员与演员的爱哭性格混在一起。但是当我运行jar文件时,我无法看到日志

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

请帮帮我。我无法找出问题所在

快速查看后,我发现您的项目中存在两个主要问题:

  • 您的
    logback.xml
    格式错误。它应该以
    开头,以

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

  • 此外,我建议您使用最新版本的
    akka-slf4j_2.11
    logback 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>
    
    Reader.scala

     import akka.actor.{Actor, ActorLogging}
    
     class Reader extends Actor with ActorLogging {
    
       override def receive = {
         case _ => log.info("Message received")
       }
     }
    
     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

     import akka.actor.{Actor, ActorLogging}
    
     class Reader extends Actor with ActorLogging {
    
       override def receive = {
         case _ => log.info("Message received")
       }
     }
    
     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
    ,并在
    std out
    log文件中查看收到的
    消息


    希望这有帮助

    使用上面的sbt更改,它在构建jar文件时失败。[错误](*:程序集)重复数据消除:在以下内容中找到不同的文件内容:[error]/Users/deepak/.ivy2/cache/ch.qos.logback/logback classic/jars/logback-classic1.1.7.jar:org/slf4j/impl/StaticLoggerBinder.class[错误]/Users/deepak/.ivy2/cache/org.slf4j/slf4j-log4j12/jars/slf4j-log4j12-1.6.1.jar:org/slf4j/impl/StaticLoggerBinder.class[错误]重复数据消除:在以下内容中发现不同的文件内容:我没有得到这样的异常。如果您的
    build.sbt
    中有其他库具有自己的
    logback.xml
    文件,则它们可能会导致此类冲突。在这种情况下,您应该定义一个
    合并策略
    。看看这一点,但我强烈建议将其用于建筑。您不会遇到这种问题。@user3156383该错误表明您的依赖关系树中有两个slf4j后端:logback和slf4j-log4j12。你只能有一个。假设您需要logback,您可以使用它来找出对slf4-log4j12的依赖关系来自何处。