Перечислитель playframework катящийся контент файла, поскольку строка получила странные символы
def buildLog(appName: String) = {
val file = s"${sys.env("HOME")}/builds/logs/${appName}.log"
val f = new File(file)
Enumerator.fromFile(f).map(new String(_))
}
Я хочу отобразить файл журнала на веб-странице, я использую Enumerator.fromFile()
метод и сопоставить массив байтов с String, но я получаю некоторые странные символы, такие как
From xxx:yyy/zzz
* branch master -> FETCH_HEAD
Already up-to-date.
[0m[[0minfo[0m] [0mLoading project definition from /home/zzz/builds/sources/ops-ui/project[0m
[0m[[0minfo[0m] [0mSet current project to zzz (in build file:/home/zzz/builds/sources/ops-ui/)[0m
[0m[[32msuccess[0m] [0mTotal time: 0 s, completed 2013-12-30 17:38:53[0m
Как правильно отображать контент?
2 ответа
Эти символы определяют цвета, которые консоль должна использовать для отображения текста (например, информация в голубом и ошибки в красном).
Чтобы удалить символы из вашего файла, вы можете изменить конфигурацию регистрации, например заменить %coloredLevel
с %level
в conf / logger.xml.
В качестве альтернативы, вы можете реализовать LogManager
переписывать логи по мере необходимости. Это вдохновлено подобными emojiLogs, но я не проверял это:
logManager ~= { lm =>
new LogManager {
def apply(
data: sbt.Settings[Scope],
state: State,
task: Def.ScopedKey[_],
writer: java.io.PrintWriter
) = {
val l = lm.apply(data, state, task, writer)
new Logger {
val Escapes = Set("M\\\\[2K", "\\[0m", "\\[32m")
def ommitColorChars(str: String) = Escapes.fold(str)(_.replaceAll(_))
def log(level: Level.Value, message: => String) =
l.log(level, ommitColorChars(message))
def success(message: => String) = l.success(message)
def trace(t: => Throwable) = l.trace(t)
override def ansiCodesSupported = l.ansiCodesSupported
}
}
}
}
Просто, чтобы завершить ответ, я нашел более общий способ удаления цветных бревен. Цветные символы можно удалить как (при условии, что у вас есть строка с цветными бревнами):
string.replaceAll("""\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]""", "")
Вдохновлен эквивалентом "sed" в команде Linux ( 1):
sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"