All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.browsermob.proxy.util.StandardFormatter Maven / Gradle / Ivy

There is a newer version: 2.0-beta-7
Show newest version
package org.browsermob.proxy.util;

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

public class StandardFormatter extends Formatter {
    private static final int CLASS_LENGTH = 20;

    public String format(LogRecord record) {
        try {
            StringBuilder sb = new StringBuilder();

            String level = "UNKN";
            if (record.getLevel().equals(Level.WARNING)) {
                level = "WARN";
            } else if (record.getLevel().equals(Level.SEVERE)) {
                level = "SEVR";
            } else if (record.getLevel().equals(Level.INFO)) {
                level = "INFO";
            } else if (record.getLevel().equals(Level.FINE)) {
                level = "FINE";
            } else if (record.getLevel().equals(Level.FINEST)) {
                level = "FNST";
            } else if (record.getLevel().equals(Level.FINER)) {
                level = "FINR";
            } else if (record.getLevel().equals(Level.CONFIG)) {
                level = "CONF";
            } else if (record.getLevel().equals(Level.OFF)) {
                level = "OFF ";
            } else if (record.getLevel().equals(Level.ALL)) {
                level = "ALL ";
            }

            sb.append(level).append(" ");

            SimpleDateFormat sdf = new SimpleDateFormat("MM/dd HH:mm:ss");
            sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
            sb.append(sdf.format(new Date(record.getMillis()))).append(" ");


            String className = record.getLoggerName();
            int classNameLength = className.length();
            int before = sb.length();
            if (classNameLength > CLASS_LENGTH) {
                int index = -1;
                while (true) {
                    sb.append(className.charAt(index + 1));

                    int oldIndex = index;
                    index = className.indexOf(".", index + 1);

                    if (index == -1) {
                        String str = className.substring(oldIndex + 2);
                        int rem = CLASS_LENGTH - (sb.length() - before);

                        if (str.length() > rem) {
                            str = str.substring(0, rem - 1) + '~';
                        }

                        sb.append(str);

                        break;
                    } else {
                        sb.append('.');
                    }
                }
            } else {
                sb.append(className);
            }
            int after = sb.length();

            for (int i = (after - before); i <= CLASS_LENGTH - 1; i++) {
                sb.append(' ');
            }

            sb.append(" - ");
            if (record.getParameters() != null && record.getParameters().length > 0) {
                java.util.Formatter formatter = new java.util.Formatter(sb);
                formatter.format(record.getMessage(), record.getParameters());
                formatter.format("\n");
            } else {
                sb.append(record.getMessage()).append("\n");
            }

            if (record.getThrown() != null) {
                StringWriter sw = new StringWriter();
                record.getThrown().printStackTrace(new PrintWriter(sw));
                sb.append(sw.toString());
            }

            return sb.toString();
        } catch (Exception e) {
            System.err.println("*******************************************************");
            System.err.println("There was a problem formatting a log statement:");
            e.printStackTrace();
            System.err.println("We will return the raw message and print any stack now");
            System.err.println("*******************************************************");

            if (record.getThrown() != null) {
                System.err.println("Root stack trace:");
                record.getThrown().printStackTrace();
                System.err.println("*******************************************************");
            }

            return record.getMessage() + "\n";
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy