2009-03-22 5 views
2

Наше приложение RCP регистрирует справедливый бит, но только INFO и выше выводятся на консоль. В Windows/Linux это нормально, но на OSX все протоколы передаются в syslogd, что затем решает, что делать с журналом и не регистрироваться, это означает обработку тысяч и тысяч сообщений журнала FINEST, это делает использование syslogd на 140% CPU и сожрать память. После запуска нашего приложения около 3 минут syslogd использует 2,5 ГБ памяти, и вся система становится непригодной. Убийство syslogd/rebooting - единственное лекарство. Запуск приложения с консоли делает его запись непосредственно на консоль, и нет никаких проблем.Eclipse RCP на OSX - Как остановить регистрацию в syslog?

Как я могу остановить syslogd для обработки моего RCP-журнала в OSX?

ответ

1

Взгляните на файл RCP.App/Contents/Info.plist вашего RCP приложения. Файл по умолчанию, сгенерированный сборкой RCP, имеет < строка > -consoleLog < строка >.

Возможно, поэтому все заканчивается в syslogd.

+0

Да, это исправлено, спасибо большое! (Я также добавил комментарий здесь и принял ответ вчера, но они оба ушли сейчас ...) – gromgull

0

Я не совсем знаком с Eclipse RCP, но у меня есть некоторый опыт работы с syslog. Вероятно, вы регистрируетесь с помощью local0 или local1. OSX направляет local0.* в /var/log/appfirewall.log и local1 - /var/log/ipfw.log. Если вы регистрируетесь на любом объекте, то все, что вы регистрируете, будет записано на диск.

Сначала я хотел бы узнать, если и как вы можете настроить средство syslog, к которому ведет ваше приложение. Как только вы выясните, к какому объекту он входит, вы должны отключить его, отредактировав /etc/syslog.conf и отправив демону syslog на сигнал HUP. Прочтите руководства для syslogd и syslog.conf для подробного описания.

Возможно, вы также захотите изучить использование более логичного интерфейса Java-esque вместо syslog.

+0

Мы уже используем фреймворк java logging, но некоторые функции eclipse перенаправляют это на syslog, когда stdout/err не подключены к терминалу. Реконфигурация syslog - это вариант, но не так хорош, когда я хочу распространять приложение для обычных пользователей. – gromgull

0

Я также был немного к этому случаю. Я предполагаю следующее:

Если вы запустите Eclipse через Eclipse.app с рабочего стола, его консоль (stdout/stderr) будет перенаправлена ​​на syslog, поэтому любой вывод самого Eclipse (или плагинов с использованием printf) окажется там.

Попробуйте вызвать ./eclipse в Terminal.app и посмотреть, есть ли вместо этого сообщение в окне терминала, а не в syslog.

Однако этот вопрос не решает проблему, из-за которой вы на самом деле не хотите ни одного из них в первую очередь ... Узнайте, кто производит выходные данные, и заставляют их помещать их в ErrorLog.

К сожалению, я больше не знаю, где это произошло для меня, поэтому я не могу его проверить. Удачи!

+0

Запуск нашего приложения в Terminal.app показывает сообщения там, и проблема не возникает. Это наша текущая работа, но это не так хорошо для менее ориентированных на технику пользователей :( Выходной сигнал получается повсюду, например, от apache.httpclient и других сторонних библиотек. – gromgull

Смежные вопросы