Log4j прекращает входить в файл (File Appenders), когда я открываю / редактирую файл? - PullRequest
0 голосов
/ 16 ноября 2011

Я использую log4j в своем java-приложении.

Мой файл конфигурации log4j

Установка уровня корневого регистратора.

log4j.rootLogger = WARN, файл журнала

log4j.1014 *

log4j.appender.logfile.File = $ {log.output.file}

log4j.appender.logfile.layout = org.apache.log4j.PatternLayout

log4j.appender.logfile.layout.ConversionPattern =% - 5p% d [% t]% c {2}:% m% n

log.output.File относится к файлу журнала .

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

1 Ответ

2 голосов
/ 17 ноября 2011

В зависимости от редактора, существует два способа сохранения файла:

  1. Новое содержимое файла сначала сохраняется во временном файле, и когда все успешно сохранено, новый файл переименовывается в реальный файл.Это имеет то преимущество, что в случае ошибки ввода-вывода старый контент все еще там.И если какой-то другой процесс читает исходный файл между ними, он никогда не увидит смесь старого и нового содержимого.

  2. Исходный файл открывается, а новое содержимое записывается напрямую.в файл.Это дает преимущество в использовании меньшего дискового пространства (поскольку временный файл не требуется).Недостатком является то, что другой процесс может иметь тот же файл, открытый в режиме добавления (возможно, для ведения журнала), поэтому, когда новое содержимое записывается несколькими частями, записи могут перекрываться, а содержимое файла повреждено.

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

Из-за этих соображений Гедит, похоже, выбрал первоепуть.Конечно, вы можете сделать две вещи:

  1. Проверить исходный код gedit, особенно функцию, которая сохраняет буфер в файл.
  2. Запустить strace -o strace.out gedit logfile.log, отредактировать что-нибудьв файл и сохраните файл.Выйдите из gedit и посмотрите на файл strace.out.Найдите имя файла журнала и посмотрите, какие системные вызовы (чтение, открытие, закрытие, переименование, запись, статистика, fstat) происходят во время действия сохранения.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...