Вход в Java - PullRequest
       18

Вход в Java

3 голосов
/ 09 декабря 2010

Я создаю регистратор в Java, выполнив следующий код:


private static final String logFile = "." + File.separator + "Log Files" + File.separator + "Log_" + Long.toString(System.currentTimeMillis());
private static Logger logger = Logger.getLogger("JCS_Logger");
static
{
    try
    {
        logger.addHandler(new FileHandler(logFile ));
    }
    catch (Exception e)
    {
       System.err.println("Could not return a static logger");
    }
}

Если я использую этот логгер, он пишет не только в System.err, но и в файл. В конечном итоге я хочу настроить регистратор так, чтобы он мог писать по адресу: '

  1. И System.err, и Файл
  2. Ни System.err, ни Файл
  3. Just System.err
  4. Просто файл

Я знаю, что при вызове logger.setLevel(Level.OFF) все журналы отключатся, но я не уверен, как это сделать для приведенного выше списка? Это делается через класс уровня? Любые идеи или предложения будут с благодарностью.

EDIT: Спасибо за ответы. Я решил это с помощью этого кода:


    /**
     * If debug should be turned on
     */
    static boolean debug = true;
    /**
     * If writing debug to file
     */
    static boolean writeLogToFile = false;
    /**
     * If writing debug to System.err
     */
    static boolean writeLogToStdErr = true;

    /**
     * Location for the temp file
     */
    private static final String logFile = "." + File.separator + "Log Files" + File.separator + "Log_" + Long.toString(System.currentTimeMillis());
    /**
     * Instance of the logger
     */
    private static Logger logger = Logger.getLogger("JCS_Logger");
    /**
     * Handler for System.err
     */
    private static Handler consoleHandler;
    /**
     * Handler for the log file
     */
    private static Handler fileHandler;

    static
    {
        try
        {   //if not debuggin at all          
            if(debug == false)
            {
                logger.setLevel(Level.OFF);
            }
            //if not writing to the file
            if(writeLogToFile == true)
            {
                fileHandler = new FileHandler(BCApp.getLogFileHandlerPath());
                logger.addHandler(fileHandler);
            }
            //if not writing to System.err
            if(writeLogToStdErr == false)
            {
                consoleHandler = logger.getParent().getHandlers()[0];
                logger.getParent().removeHandler(consoleHandler);
            }
        }
        catch (Exception e)
        {
            System.err.println("Could not return a static logger");
        }
    }

Спасибо за помощь

Ответы [ 3 ]

2 голосов
/ 09 декабря 2010

Вы можете добавить обработчики только для требуемых элементов, делая свой выбор во время запуска журнала; или вы можете добавить все обработчики и настроить каждый обработчик с помощью порогов регистрации.

Чтобы настроить порог регистрации обработчика, используйте handler.setLevel(...);

Обратите внимание, что при запуске обработчик по умолчанию уже настроен. Возможно, вам придется программно удалить этот обработчик или настроить его так, чтобы он ничего не обрабатывал, в зависимости от того, какую технику обработки обработчиков журналов вы хотите реализовать.

1 голос
/ 09 декабря 2010

См. Документацию API для этого класса: Logger (Java Platform SE 6) .

Вы можете удалить обработчики с помощью метода removeHandler (Handler) , поэтомунапример, если вы хотите выводить данные только на консоль, вы можете вызвать этот метод для удаления FileHandler.

Есть и другие способы.Вы можете использовать другой подход и установить фильтры для каждого обработчика, которые будут отбрасывать сообщения, которые не должны выводиться.Может поиграться с форматированием.

0 голосов
/ 08 мая 2013

Вы могли бы достичь желаемой конфигурации даже без написания кода. Вот как: Перейдите в каталог, где установлена ​​java в вашей системе.

  1. Перейдите в подкаталог jre / lib (или jre \ lib в windows) и найдите файл "logging.properties". Вы можете создать его, если он не существует.

  2. Редактировать строку с содержимым "handlers =" TO

    -Для файлов System.err и File

    "handlers = java.util.logging.ConsoleHandler, java.util.logging.FileHandler"
    

    - Ни для System.err, ни для файла

    Simply comment that line by adding # in the beginning of the line.
    

    -Для Just System.err

    "handlers = java.util.logging.ConsoleHandler"
    

    -Для Просто Файл

    "handlers = java.util.logging.FileHandler"
    

Готово! Вы хороши, чтобы пойти и начать регистрацию:)

...