I have done the following steps to try and configure logging for my akka application:
created an application.conf file and placed it in src/main/resources. It looks like:
akka { event-handlers = ["akka.event.slf4j.Slf4jEventHandler"] loglevel = "INFO" }
created a logback.xml file and placed it in src/main/resources. It looks like:
<configuration> <appender name="FILE" class="ch.qos.logback.core.fileappender"> <File>./logs/akka.log</File> <encoder> <pattern>%d{HH:mm:ss.SSS} [%-5level] %msg%n</pattern> </encoder> </appender> <root level="info"> <appender-ref ref="FILE" /> </root> </configuration>
added the following to my .scala sbt build file:
libraryDependencies += "com.typesafe.akka" % "akka-slf4j" % "2.0.3", libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.0.9" lazy val logback = "ch.qos.logback" % "logback-classic" % "1.0.9"
attempted this code to log:
import akka.event.Logging
val log = Logging(context.system, this) log.info("...")
All I am getting is standard output logging, no log file creation with the logs.
Have I missed a step ? Or misconfigured something?
With this arrangement I can use an akka.event.Logging, no need to specify SLF4J instance.
(tested 13 Dec 2013)
I get console logging and logging to a file. To prove this is not built-in logger I changed to include %X{akkaTimestamp} as explained here:
http://doc.akka.io/docs/akka/snapshot/scala/logging.html
build.sbt
library dependencies: (Akka version 2.2.3) ... "com.typesafe.akka" %% "akka-slf4j" % "2.2.3" "ch.qos.logback" % "logback-classic" % "1.0.9" ...
src/main/resources/application.conf
akka { loggers = ["akka.event.slf4j.Slf4jLogger"] loglevel = "INFO" }
src/main/resources/logback.xml
<?xml version="1.0" encoding="UTF-8"?> <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>log/akka.log</file> <append>false</append> <encoder> <pattern>%date{yyyy-MM-dd} %X{akkaTimestamp} %-5level[%thread] %logger{1} - %msg%n</pattern> </encoder> </appender> <logger name="akka" level="INFO" /> <root level="DEBUG"> <appender-ref ref="CONSOLE"/> <appender-ref ref="FILE"/> </root> </configuration>
This arrangement works when I use an ActorLogging mixin and also create a Logging directly:
import akka.event.Logging val log = Logging(context.system, classOf[NameOfYourActor]) log.info("good luck!")
I came across this problem too but in my case it wasn't a matter of classpath.
I replaced akka.event.Logging with com.typesafe.scalalogging.slf4j.Logging and it works like a charm!
my logback.xml (under main/resource):
<configuration> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>logs/filename.log</file> <encoder> <pattern>%date %level %msg%n</pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> <maxIndex>10</maxIndex> <FileNamePattern>logs/filename.log.%i.gz</FileNamePattern> </rollingPolicy> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>20MB</maxFileSize> </triggeringPolicy> </appender> <root level="info"> <appender-ref ref="FILE" /> </root> </configuration>
my pom.xml:
<dependency> <groupId>com.typesafe</groupId> <artifactId>scalalogging-slf4j_2.10</artifactId> <version>1.0.1</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.0.13</version> </dependency>
and in the code:
import com.typesafe.scalalogging.slf4j.Logging class LoggingService extends Actor with Logging { // use logger.info() etc. }
(didn't use application.conf)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With