Logging Akka slf4j不工作
我尝试了以下步骤来配置akka系统的日志记录: 1.创建application.conf和logback.xml文件,并将它们放在src/main/resources目录中。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
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
。在这种情况下,这不会造成任何伤害,但要坚持最佳实践,使用最新版本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的依赖关系来自何处。