Eclipse RCP на OSX - Как прекратить запись в системный журнал?
-
21-08-2019 - |
Вопрос
Наше приложение RCP регистрирует довольно много данных, но на консоль выводится только ИНФОРМАЦИЯ и выше.В Windows / linux это нормально, но в OSX все протоколирование, похоже, передается в syslogd, который затем решает, что регистрировать, а что нет, это означает обработку тысяч и тысяч ЛУЧШИХ сообщений журнала, это заставляет syslogd использовать 140% процессора и поглощать память.После запуска нашего приложения в течение примерно 3 минут syslogd использует 2,5 ГБ памяти, и вся система становится непригодной для использования.Уничтожение syslogd / перезагрузка - единственное лекарство.Запуск приложения из консоли приводит к тому, что оно регистрируется непосредственно в консоли, и никаких проблем не возникает.
Как я могу запретить syslogd обрабатывать мой вход в систему RCP в OSX?
Решение
Взгляните на файл RCP.App/Contents/Info.plist вашего приложения RCP.Файл по умолчанию, созданный при сборке продукта RCP, имеет <string>-consoleLog<string>.
Возможно, именно поэтому все заканчивается в syslogd.
Другие советы
Я совсем не знаком с Eclipse RCP, но у меня есть некоторый опыт работы с системным журналом.Вероятно, вы регистрируетесь, используя либо local0
или local1
как средство.OSX направляет local0.*
Для /var/log/appfirewall.log и local1
Для /var/log/ipfw.log.Если вы регистрируетесь на любом из этих объектов, то все, что вы регистрируете, будет записано на диск.
Я бы начал с того, что сначала посмотрел, можете ли вы настроить средство системного журнала, в которое входит ваше приложение, и как вы это делаете.Как только вы выясните, к какому объекту он подключается, вы сможете отключить его, отредактировав /etc/системный журнал.conf и посылает демону системного журнала сигнал HUP.Прочтите инструкции по syslogd
и syslog.conf
для получения подробного описания.
Возможно, вы также захотите рассмотреть возможность использования более похожего на Java интерфейса ведения журнала вместо системного журнала.
Меня это тоже иногда покусывало.Мое предположение таково:
Если вы запустите Eclipse через Eclipse.app с рабочего стола, его консоль (stdout / stderr) будет перенаправлена в системный журнал, поэтому любой вывод самого Eclipse (или плагинов, использующих printf) будет в конечном итоге там.
Попробуйте вызвать ./eclipse
в Terminal.app и посмотрите, получаете ли вы сообщения вместо этого в окне терминала, а не в системный журнал.
Однако это, конечно, не решает проблему, заключающуюся в том, что вам на самом деле не нужен ни один из них в первую очередь...Выясните, кто создает выходные данные, и заставьте их вместо этого поместить их в журнал ошибок.
К сожалению, я больше не знаю, где это произошло со мной, поэтому не могу это проверить.Удачи вам!