kotlin重定向log4j2的输出到jline3
1. 实现思路
遇到同时要用log4j2
和jline3
的情况, 如果把log4j2
直接重定向到System.out会中断jline3的输入栏,必须要找方法用lineReader.printAbove()
才可以避免
解决方法就是通过自定义Appender
, 实现这个只需要在写一个Appender
类然后在log4j2.xml
里指明就好了
2. Console类
首先先实现Jline3, 这个不是本文重点,就大概写下要提供什么
要提供lineReader
主要是用到里面的printAbove
方法(输出就不会打断下面的输入栏)
object Console{
private val terminal: Terminal = /*complie code*/
internal val lineReader: LineReader by lazy {
LineReaderBuilder.builder().terminal(terminal).completer(NullCompleter()).build()
}
}
3. Appender类
模板来着于Remko Popma的stackoverflow回答
package tech.eritquearcus.xxx.xxx.xxx
import org.apache.logging.log4j.core.AbstractLifeCycle
import org.apache.logging.log4j.core.Filter
import org.apache.logging.log4j.core.Layout
import org.apache