Как можно выводить в Java разным цветом сообщения в консоли от логгера в зависимости от типа сообщения?

Вывожу в программе логи в консоль через java.util.logging.Logger.

Выводимые строки обрабатываются этим форматером
package l2p;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Formatter;
import java.util.logging.LogRecord;

public class ConsoleLogFormatter extends Formatter
{
	private static final String CRLF = "\r\n";
	private static final SimpleDateFormat tsformat = new SimpleDateFormat("HH:mm:ss.SSS  ");
	private Date ts = new Date();

	@Override
	public String format(LogRecord record)
	{
		StringBuffer output = new StringBuffer();
		ts.setTime(record.getMillis());
		output.append(tsformat.format(ts));
		output.append(record.getMessage());
		output.append(CRLF);

		if (record.getThrown() != null)
			try
			{
				StringWriter sw = new StringWriter();
				PrintWriter pw = new PrintWriter(sw);
				record.getThrown().printStackTrace(pw);
				pw.close();
				output.append(sw.toString());
				output.append(CRLF);
			}
			catch (Exception ex)
			{}

		return output.toString();
	}
}

И собственно говоря интересует вопрос — как можно задать цвет строкам в зависимости от типа сообщения — fine, info, warning и т.д.
Притом это должно работать как в консоли Windows, так и в консоли Linux.

Может кому встречались какие-то готовые классы на эту тему или хотя бы подскажите в каком направлении копать.
  • Вопрос задан
  • 19542 просмотра
Пригласить эксперта
Ответы на вопрос 5
@Maximus5
В линухе — ANSI escape коды обрабатываются нативно, imho. А вот в винде нужно спец.програмку запустить. Вот отсюда например: github.com/downloads/adoxa/ansicon/ansi153.zip
Нужно в консоли запустить «ansicon.exe -p» и тогда появится обработка ANSI.
Ответ написан
comprom1se
@comprom1se
Web & Mobile Developer
Не знаю, будет ли работать на Linux, но на Windows все работает.
System.out.println((char) 27 + "[31mWarning! " + (char)27 + "[0m");

Если хочешь другой цвет, то измени "[31mWarning!". Например, на "[35mWarning!". Текст будет пурпурным.
30 - черный. 31 - красный. 32 - зеленый. 33 - желтый. 34 - синий. 35 - пурпурный. 36 - голубой. 37 - белый.
Ответ написан
@rtorsten
Оставлю здесь пару ссылок на stackoverflow, там советуются различные 3rd party библиотеки, которые позволяют это реализовать.
Ответ написан
Gaikotsu
@Gaikotsu Автор вопроса
Сделал немного топорно, но пока, на первое время и так подойдет: просто вывожу в консоль строки в самом форматере (код которого приводил в вопросе) через System.out.println с заданием спецкодов для расцветки.
Ответ написан
Комментировать
@xsires
долго голову ломал как это сделать ) достойного решения так и не нашел ) сделал вывод в файл и туда пихал в HTML разметке )
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы