Change color and format of java.util.logging.Logger output in Eclipse

前端 未结 1 1731
我寻月下人不归
我寻月下人不归 2021-02-13 17:31

I was looking for a way to change the color of a log output from java.util.logging.Logger in Eclipse. Since I haven\'t really found a solution that addresses changing color and

相关标签:
1条回答
  • 2021-02-13 18:10

    Create a new class which inherits from Formatter

    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.logging.Formatter;
    import java.util.logging.LogRecord;
    
    public class LogFormatter extends Formatter
    {
        // ANSI escape code
        public static final String ANSI_RESET = "\u001B[0m";
        public static final String ANSI_BLACK = "\u001B[30m";
        public static final String ANSI_RED = "\u001B[31m";
        public static final String ANSI_GREEN = "\u001B[32m";
        public static final String ANSI_YELLOW = "\u001B[33m";
        public static final String ANSI_BLUE = "\u001B[34m";
        public static final String ANSI_PURPLE = "\u001B[35m";
        public static final String ANSI_CYAN = "\u001B[36m";
        public static final String ANSI_WHITE = "\u001B[37m";
    
        // Here you can configure the format of the output and 
        // its color by using the ANSI escape codes defined above.
    
        // format is called for every console log message
        @Override
        public String format(LogRecord record)
        {
            // This example will print date/time, class, and log level in yellow,
            // followed by the log message and it's parameters in white .
            StringBuilder builder = new StringBuilder();
            builder.append(ANSI_YELLOW);
    
            builder.append("[");
            builder.append(calcDate(record.getMillis()));
            builder.append("]");
    
            builder.append(" [");
            builder.append(record.getSourceClassName());
            builder.append("]");
    
            builder.append(" [");
            builder.append(record.getLevel().getName());
            builder.append("]");
    
            builder.append(ANSI_WHITE);
            builder.append(" - ");
            builder.append(record.getMessage());
    
            Object[] params = record.getParameters();
    
            if (params != null)
            {
                builder.append("\t");
                for (int i = 0; i < params.length; i++)
                {
                    builder.append(params[i]);
                    if (i < params.length - 1)
                        builder.append(", ");
                }
            }
    
            builder.append(ANSI_RESET);
            builder.append("\n");
            return builder.toString();
        }
    
        private String calcDate(long millisecs) {
            SimpleDateFormat date_format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date resultdate = new Date(millisecs);
            return date_format.format(resultdate);
        }
    }
    


    You can bind the custom formatter to your logger like this:

    Logger logger = Logger.getLogger("logfile.txt");
    logger.setUseParentHandlers(false);
    
    ConsoleHandler handler = new ConsoleHandler();
    
    Formatter formatter = new LogFormatter();
    handler.setFormatter(formatter);        
    
    logger.addHandler(handler);
    

    ANSI escape codes can be enabled for Eclipse console with this plugin

    Sources:

    • http://www.vogella.com/tutorials/Logging/article.html

    • How to print color in console using System.out.println?

    • https://mihai-nita.net/2013/06/03/eclipse-plugin-ansi-in-console/

    • https://docs.oracle.com/javase/8/docs/api/java/util/logging/Logger.html#setLevel-java.util.logging.Level-

    • https://docs.oracle.com/javase/8/docs/api/java/util/logging/Level.html

    • An Eclipse console view that respects ANSI color codes?

    0 讨论(0)
提交回复
热议问题