복붙노트

[SCALA] Akka SLF4J의 logback 구성 및 사용

SCALA

Akka SLF4J의 logback 구성 및 사용

내 akka 응용 프로그램에 대한 다음과 같은 시도하는 단계 및 구성 로깅을 수행했다 :

해결법

  1. ==============================

    1.내가 akka.event.Logging을 사용할 수 있습니다 이로써, 필요 SLF4J 인스턴스을 지정합니다.

    내가 akka.event.Logging을 사용할 수 있습니다 이로써, 필요 SLF4J 인스턴스을 지정합니다.

    (2013 십이 13 시험)

    나는 파일로 콘솔 로깅 및 로깅을 얻을. 내가 여기에 설명 된대로 %의 X {akkaTimestamp}를 포함하도록 변경이 내장되지 않은 로거 증명하려면 :

    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 / 메인 / 자료 / application.conf

    akka {
      loggers = ["akka.event.slf4j.Slf4jLogger"]
      loglevel = "INFO"
    }
    

    SRC / 메인 / 자원 / 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>
    

    내가 ActorLogging 믹스 인을 사용하고 또한 직접 로깅을 만들 때이 배열은 작동합니다 :

    import akka.event.Logging
    
    val log = Logging(context.system, classOf[NameOfYourActor])
    
    log.info("good luck!")
    
  2. ==============================

    2.나도이 문제를 통해 들어 왔지만 내 경우는 클래스 경로의 문제가 아니었다.

    나도이 문제를 통해 들어 왔지만 내 경우는 클래스 경로의 문제가 아니었다.

    나는 com.typesafe.scalalogging.slf4j.Logging로 akka.event.Logging를 교체하고 그것이 마치 마법처럼 작동합니다!

    (주 / 자원에서) 내 logback.xml :

    <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>
    

    우리는 pom.hml :

    <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>
    

    그리고 코드 :

    import com.typesafe.scalalogging.slf4j.Logging
    
    class LoggingService extends Actor with Logging {
      // use logger.info() etc.
    }
    

    (application.conf 사용하지 않은)

  3. ==============================

    3.이 application.conf를 사용해보십시오 :

    이 application.conf를 사용해보십시오 :

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

    나는 또한 당신은 아마 파일 어 펜더에 대한 당신 logback 설정에서 잘못된 클래스 이름을 가지고 것으로 나타났습니다. 당신은 <펜더 이름 = "FILE"클래스 = "ch.qos.logback.core 있습니다. fileappender ">하지만 <펜더 이름 = 있어야한다"FILE "클래스 ="ch.qos.logback.core.FileAppender ">.

    또 다른 문제는 파일의 경로 일 수 있습니다. 대신 상대의 절대 파일 경로를 사용해보십시오. <파일> /absolute/path/testFile.log

    또한 1.2.3에 logback 버전을 변경하려고 할 수 있습니다. 여기에 구성 sl4j에 akka 문서입니다 : 링크

  4. ==============================

    4.나는 당신의 설정에서 변경 할 유일한 것은 weiglewilczek SLF4J 어댑터를 추가하는 것입니다.

    나는 당신의 설정에서 변경 할 유일한 것은 weiglewilczek SLF4J 어댑터를 추가하는 것입니다.

    난 그냥 잘 작동 다음과 같은 설정을 가지고 :

    akka {
      event-handlers = ["akka.event.slf4j.Slf4jEventHandler"]
      loglevel = DEBUG
    }
    
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>log/app.log</file>
    
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>log/app.%d{dd-MM-yyyy}.log</fileNamePattern>
                <maxHistory>60</maxHistory>
            </rollingPolicy>
    
            <encoder>
                <pattern>%d [%thread] [%class] %5p - %m%n</pattern>
            </encoder>
        </appender>
    
        <root level="INFO">
            <appender-ref ref="FILE"/>
        </root>
    </configuration>
    
    trait test extends com.weiglewilczek.slf4s.Logging {
      def logIt() {
        logger.info("this logs fine")
      }
    }
    
  5. from https://stackoverflow.com/questions/14149798/akka-slf4j-logback-configuration-and-usage by cc-by-sa and MIT license