만약 너무 많은 양의 로그가 있다면, 진짜 경고와 문제는 쉽게 이것들에 의해 숨겨질 것이다.
다른 방면으로는 당신은 무엇이 잘못되고 있는지 파악하기위해 관련 정보가 필요하다.
Gradle은 6가지 log level을 정의하였고, 아래에 나와 있다.
그 중에는 2가지의 Gradle의 특별한 log level이 있고, 나머지는 흔히 볼수 있는 log level이다.
- Log Level
ERROR : Error messages
QUIET : Important information messages
WARNING : Warning messages
LIFECYCLE : Progress information messages
INFO : Information messages
DEBUG : Debug messages
Choosing a log level
당신은 다른 log level을 고르기 위해 아래와 같은 command line switch를 사용할 수 있다.
- Option
no logging options : LIFECYCLE and higher
-q or --quiet : QUIET and higher
-i or --info : INFO and higher
-d or --debug : DEBUG and higher (that is, all log messages)
- Stacktrace command-line options
No stacktrace options :
build error 시에 stacktrace가 출력되지 않음.
오직 internal exception일 경우에만 stacktrace가 출력이 됨.
만약 DEBUG 로그 레벨이 선택되어 있을 경우, 생략된 stacktrace가 항상 출력됨.
-s or --stacktrace :
생략된 stacktrace가 출력됨.
우리는 full stacktrace보다 이 것을 추천한다.
full stacktrace는 많이 김.
-S or --full-stacktrace :
full stacktrace가 출력됨.
Writing your own log messages
standard out에 메시지를 출력하기 위한 당신의 build file 안의 간단한 옵션들이다.
Gradle은 QUIET 레벨 때는 standard output으로 나온 어떠한 것도 logging system으로 재전송한다.
ex) Using stdout to write log messages
build.gradle
println 'A message which is logged at QUIET level'
Gradle은 logger 속성을 build script에 제공한다.
이 인터페이스는 SLF4J Logger 인터페이스를 확장하고, Gradle만의 몇몇 메서드를 추가하여 가지고 있다.
아래 예를 보자.
ex) Writing your own log messages
build.gradle
logger.quiet('An info log message which is always logged.') logger.error('An error log message.') logger.warn('A warning log message.') logger.lifecycle('A lifecycle info log message.') logger.info('An info log message.') logger.debug('A debug log message.') logger.trace('A trace log message.')
당신은 build 안의 다른 클래스 안에서 사용되는 것을 Gradle의 logging system으로 가지고 올 수 있다.
간단히 SLF4J Logger를 사용해보자.
당신은 build script 안에서 당신이 제공받은 logger를 사용하는 것과 같은 방식으로 이 logger를 사용할 수 있다.
ex) Using SLF4J to write log messages
build.gradle
import org.slf4j.Logger import org.slf4j.LoggerFactory Logger slf4jLogger = LoggerFactory.getLogger('some-logger') slf4jLogger.info('An info log message logged using SLF4j')
Logging from external tools and libraries
내부적으로 Gradle은 Ant와 Ivy를 사용한다.
둘 다 모두 각자의 logging system을 가지고 있다.
Gradle은 그것들의 logging 출력을 Gradle logging system으로 재전송한다.
Ant/Ivy Trace 로그 레벨(Gradle의 Debug level과 매칭)을 제외하고, 다른 모든 로그레벨은 Gradle의 로그레벨과 1:1 매칭되어 있다.
이것은 기본적인 Gradle log level은 error나 warning이 아닌 어떠한 출력도 보여주지 않을 것이라는 것을 의미한다.
logging을 위한 standard 출력을 위한 여러가지 tool이 있다.
기본적으로, Gradle은 standard output은 QUIET log level로 standard error는 ERROR log level로 재전송된다.
이러한 행위는 설정으로 변경이 가능하다.
project 객체는 LoggingManager라는 것을 제공하고, 이것은 당신이 표준 출력이나 표준 에러에 대한 log level을 변경할 수 있게 해준다.
ex) Configuring standard output capture
build.gradle
logging.captureStandardOutput LogLevel.INFO println 'A message which is logged at INFO level'
task 실행 중에 표준출력이나 표준 에러에 대한 log level을 바꾸기 위해서, task 또한 LoggingManager를 제공한다.
ex) Configuring standard output capture for a task
build.gradle
task logInfo { logging.captureStandardOutput LogLevel.INFO doFirst { println 'A task message which is logged at INFO level' } }
Gradle은 Java Util Logging, Jakarta Commons Logging, Log4j logging toolkit과의 integration 또한 제공한다.
이러한 toolkit을 사용한 log mesaage는 Gradle의 logging system으로 재전송된다.
Changing what Gradle logs
당신은 Gradle의 logging UI의 많은 부분을 교체할 수 있다.
예를 들어, 로그를 더 남기거나 줄이거나, format을 교체하는 등의 방식을 원할 수 있다.
당신은 Gradle.useLogger method를 통해 logging을 교체할 수 있다.
이 것은 build script 또는 init script, embedding API를 통해 접근 가능하다.
명심해야 할 것은 이 것은 Gradle의 기본적인 출력을 완벽히 불가능하게 만든다는 것이다.
아래 예제는 task 실행과 build 완료가 로깅되는 것을 어떻게 바꾸는 지 보여주는 init script이다.
ex) Customizing what Gradle logs
init.gradle
useLogger(new CustomEventLogger()) class CustomEventLogger extends BuildAdapter implements TaskExecutionListener { public void beforeExecute(Task task) { println "[$task.name]" } public void afterExecute(Task task, TaskState state) { println() } public void buildFinished(BuildResult result) { println 'build completed' if (result.failure != null) { result.failure.printStackTrace() } } }
gradle -I init.gradle build 의 실행 결과
> gradle -I init.gradle build [compile] compiling source [testCompile] compiling test source [test] running unit tests [build] build completed
당신의 logger는 아래 나와 있는 어떠한 listner interface도 구현 가능하다.
당신이 logger를 등록할 때, 오직 구현되어 있는 logging interface만이 교체될 것이다.
다른 인터페이스들은 건드리지 않은 채로 남아있을 것이다.
- BuildListener
- ProjectEvaluationListener
- TaskExecutionGraphListener
- TaskExecutionListener
- TaskActionListener
원본 출처 : https://docs.gradle.org/current/userguide/logging.html
댓글 없음 :
댓글 쓰기