как мы можем удалить лишнее сообщение в лог файлах - PullRequest
6 голосов
/ 01 августа 2011

У меня есть простая программа регистрации, то есть:

public class LoggingExample1 {
 public static void main(String args[]) {
try {
  LogManager lm = LogManager.getLogManager();
  Logger logger;
  FileHandler fh = new FileHandler("log_test.txt");

  logger = Logger.getLogger("LoggingExample1");
  lm.addLogger(logger);
  logger.setLevel(Level.INFO);

  fh.setFormatter(new SimpleFormatter());

  logger.addHandler(fh);
  // root logger defaults to SimpleFormatter. We don't want messages
  // logged twice.
  //logger.setUseParentHandlers(false);

  logger.log(Level.INFO, "test 1");
  logger.log(Level.INFO, "test 2");
  logger.log(Level.INFO, "test 3");
  fh.close();
} catch (Exception e) {
  System.out.println("Exception thrown: " + e);
  e.printStackTrace();
}
}
}

я получаю этот журнал:

Aug 1, 2011 5:36:37 PM LoggingExample1 main
INFO: test 1
Aug 1, 2011 5:36:37 PM LoggingExample1 main
INFO: test 2
Aug 1, 2011 5:36:37 PM LoggingExample1 main
INFO: test 3

но я хочу удалить такие сообщения, как: LoggingExample1 main и INFO и сохраняйте только те данные, которые зарегистрированы по коду. что я могу сделать ???

Ответы [ 4 ]

6 голосов
/ 01 августа 2011

Это потому, что вы используете SimpleFormatter, который всегда записывает имя класса, имя метода и т. Д. Если вам не нужна эта информация, вы можете написать свой собственный модуль форматирования.Вот простой пример форматера, который просто выводит уровень журнала и сообщение журнала:

import java.util.logging.*;

class MyFormatter extends Formatter{

    /* (non-Javadoc)
     * @see java.util.logging.Formatter#format(java.util.logging.LogRecord)
     */
    @Override
    public String format(LogRecord record) {
        StringBuilder sb = new StringBuilder();
        sb.append(record.getLevel()).append(':');
        sb.append(record.getMessage()).append('\n');
        return sb.toString();
    }    
}

Используйте этот форматер в обработчике файлов:

fh.setFormatter(new MyFormatter());

Это выдаст:

INFO:test 1
INFO:test 2
INFO:test 3
2 голосов
/ 05 октября 2016

Расширьте свой класс классом форматирования, как показано ниже:

public class MyFormatter extends SimpleFormatter{

@Override

public synchronized String format(LogRecord record){

    record.setSourceClassName(MyFormatter.class .getName());
    return String.format(
            " [%1$s] :%2$s\n",
            record.getLevel().getName(), formatMessage(record));

    }
}

Затем в вашем основном классе установите обработчик консоли и формат обработчика файлов в качестве объекта формата вашего класса.В моем случае это consoleHandler.format (новый MyFormatter);filehandler.format (новый Myformatter);

Самое важное, что вам нужно установить logger.setUseParentHandler (false);

теперь вы готовы!

0 голосов
/ 20 декабря 2017

Вот как я это делаю, упрощенная версия SimpleFormatter

package org.nibor.git_merge_repos;

import java.util.Date;
import java.util.logging.Formatter;
import java.util.logging.LogRecord;


public class CustomLogFormatter extends Formatter {

    private final Date dat = new Date();

    private static final String seperator = " : ";

    public synchronized String format(LogRecord record) {
        dat.setTime(record.getMillis());
        return dat + seperator + record.getLevel().getName() + seperator + record.getMessage() + "\n";

    }
}
0 голосов
/ 01 августа 2011

Если я вас правильно понимаю, вы хотите удалить INFO и иметь только test 1 и так далее?

Если это так, я не думаю, что это возможно. Причина в том, что вам нужно знать, что это за сообщение.

ERROR
WARNING
INFO
DEBUG
TRACE

Вы можете изменить уровень, отображая только ПРЕДУПРЕЖДЕНИЕ и выше, если хотите.

...