문제점 : Spark 로컬 모드에서 SparkContext를 초기화 한 후 Log4J2의 비동기 기능을 관찰 할 수 없습니다. SBT에서Spark Scala 응용 프로그램에서 Log4J2로 비동기 로깅 사용
Log4j2 종속성 :
이"com.lmax" % "disruptor" % "3.3.5",
"org.apache.logging.log4j" % "log4j-api" % "2.8.2",
"org.apache.logging.log4j" % "log4j-core" % "2.8.2",
"org.apache.logging.log4j" %% "log4j-api-scala" % "2.8.2"
Log4j2 config 파일이 :
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="debug">
<Appenders>
<Console name="Console-Appender" target="SYSTEM_OUT">
<PatternLayout>
<pattern>
[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
</pattern>>
</PatternLayout>
</Console>
<File name="File-Appender" fileName="logs/xmlfilelog.log" >
<PatternLayout>
<pattern>
[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
</pattern>
</PatternLayout>
</File>
</Appenders>
<Loggers>
<Logger name="guru.springframework.blog.log4j2async" level="debug">
<AppenderRef ref="File-Appender"/>he preceding c
</Logger>
<Root level="debug">
<AppenderRef ref="Console-Appender"/>
</Root>
</Loggers>
내가 IntelliJ에
에서 다음과 같은 시스템 속성-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
은 ASY을 테스트하도록 설정
val start = System.nanoTime()
for(i <- 1 to 1000) {
logger.error("Hello")
}
val end = System.nanoTime()
val timeMS = (end - start)/1000000
println(s"Parsed ${iterations} reports in ${timeMS} ms ${timeMS/1000} sec")
성공적인 결과 : nchronous 행동, 내가 전에 SparkContext를 초기화 한 후 다음 코드를 실행 내가 AsyncContext이 2017-04-25 14:55:40,541 main DEBUG LoggerContext[[email protected], [email protected]] started OK.
수있게되었다 확인한 다음 디버그 라인을 볼 수 있었다. 또한 내 인쇄 라인 문인 "Parsed ..."는 로거 출력 중간에 표시되어 비동기 동작을 나타냅니다.
그러나 SparkContext 초기화 후에이 코드 블록을 이동하면 더 이상 비동기 활동을 관찰하지 않습니다. 로거 출력 후에는 항상 인쇄 라인 명령문 인 "Parsed ..."가 표시됩니다. 혼란스러운 것은 2017-04-25 14:55:40,541 main DEBUG LoggerContext[[email protected], [email protected]] started OK.
입니다. 여전히 관찰된다.
정상 검사를 위해 스파크 애플리케이션의 범위 내에 로거 API 패키지도 인쇄했습니다. 그 결과는 package org.apache.logging.log4j.scala, Apache Log4j Scala 2.11 wrapper for Log4j API, version 2.8.2
이되었습니다. Log4J2 문서에 따르면 "og4j 2 Scala API는 Log4j 2 API에 종속됩니다." 따라서 Log4J2를 실제로 사용하고 있다고 추론 할 수 있습니다.
MAIN QUESTION : 내 LOG4J2 구성을 사용하고 LOG4J 구성을 사용하도록 설정하는 중 일부가 경고 메시지를 표시합니까? 아니면 LOGYING LOGINING BEYVIOR가 허용되지 않습니까?
그렇습니다. 실행기에서도 'AsyncLoggerContext'가 사용됩니다. '2017-04-26 10 : 11 : 15,660 실행기 작업 시작 작업자 -7 DEBUG LoggerContext [name = DefaultAsyncContext @ Executor 작업 시작 worker-6, [email protected] ] 확인을 시작했습니다. 10 : 11 : 15.662 [실행자 작업 시작 작업자 -7] ERROR LoggingTestWithRDD - Hello'. 그러나 비동기 동작이 발생하지 않습니다. 아마도 그것은 스파크 로컬 모드와 관련이 있습니다. –
비동기 동작을 확인하는 방법에 문제가있을 수 있습니다. 더 간단한 print 문'println ("This is System.out.println")'(문자열 보간없이)을 시도하고'for' 루프의 반복 횟수를 10K 또는 50K로 늘립니다. –
잠재적으로, 불행히도 그 속임수를하지 않았습니다 –