로거 만들기
object LoggerFactory {
fun logger(name: String): TLogger
fun logger(block: () -> Unit): TLogger
}private val LOG = LoggerFactory.logger("WebServerPlugin")
// 이름을 생략하면 이 코드가 있는 파일/클래스 이름을 태그로 써요.
private val logger = LoggerFactory.logger { }플러그인 로그는 앱의 로그 화면과 로그캣(./gradlew starlightLogcat)에 함께 남아요.
TLogger
메시지는 람다로 넘겨요. 로그 수준이 걸러질 때는 문자열을 만들지 않아요.
| 메서드 | 설명 |
|---|---|
verbose { }, debug { }, info { }, warn { }, error { } | 각 수준의 로그를 남겨요. |
info(flags) { }, error(flags) { } | 플래그와 함께 남겨요(아래 참고). |
warn(throwable), error(throwable), error(throwable) { } | 예외를 남겨요. |
wtf { } | 일어나면 안 되는 상황을 남겨요. |
log(type: LogType) { } | 수준을 직접 지정해요. LogType은 VERBOSE, DEBUG, INFO, WARN, ERROR, CRITICAL이에요. |
LOG.info { "웹 서버 시작됨: $urls" }
LOG.error(e) { "서버를 멈추지 못했어요" }화면 알림 플래그
INFO 로그는 보통 로그 목록에만 남아요. LogData.FLAG_NOTIFY를 붙이면 앱 화면에도 알림으로 띄워요. 사용자가 누른 버튼의 결과를 알려 줄 때 알맞아요.
LOG.info(LogData.FLAG_NOTIFY) { "서버 재시작 중..." }로그가 남을 때마다 Events.Log.Create(log: LogData) 이벤트가 발생해요. 프로젝트별 로그는 project.logger를 쓰세요.
번역
StarLight는 한국어와 영어를 지원해요. 문구를 언어별로 적어 두면 앱 언어에 맞는 쪽을 골라요.
fun translate(block: TranslationBuilder.() -> Unit): Stringval title = translate {
Locale.ENGLISH { "Web server" }
Locale.KOREAN { "웹 서버" }
}Locale은dev.mooner.starlight.plugincore.translation.Locale(ENGLISH,KOREAN)이에요.java.util.Locale과 헷갈리지 않게 import를 확인하세요.- 앱 언어의 문구가 없으면 영어 문구를 써요. 둘 다 없으면
<TRANSLATION FAILURE>가 돼요. translate는 호출할 때의 앱 언어로 문자열을 만들어요. 언어가 바뀌어도 이미 만든 문자열은 그대로이므로, 화면에 보일 문구는 보여 줄 때 만드는 게 좋아요(ProjectEvent.name처럼get()으로 만들거나,getConfigStructure()안에서 만들기).
값 끼워 넣기
format()으로 {이름} 자리에 값을 넣을 수 있어요.
translate {
Locale.ENGLISH { "Added language {name}" }
Locale.KOREAN { "언어 {name}을 추가했어요" }
format("name" to language.name)
}번역된 로그
로거에는 번역 블록을 바로 받는 함수도 있어요.
LOG.infoTranslated {
Locale.ENGLISH { "Server started on port {port}" }
Locale.KOREAN { "{port} 포트에서 서버를 시작했어요" }
format("port" to port.toString())
}verboseTranslated, debugTranslated, infoTranslated, warnTranslated, errorTranslated가 있어요.
현재 언어
| 멤버 | 설명 |
|---|---|
TranslationManager.getLocale(): Locale | 현재 앱 언어예요. |
TranslationManager.translateTo(locale) { } | 앱 언어와 상관없이 지정한 언어로 번역해요. |
앱 언어가 바뀌면 Events.Locale.Update 이벤트가 발생해요.