Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Логирование в приложении, чем логи пишем? 
:(
    Опции темы
jonie
  Дата 13.4.2010, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



Плох тот Сишник что не писал свой логгер 8)

Вопрос прост: чем логируете в приложении?

Я в свое время пробывал:
log4cxx, log4cpp, boost::logging, Pantheios, чета от мозиллы...

Но в целом не нашел ничего чтобы удовлетворяло следующим условиям:
1) нативная поддержка wchar_t-шных типов
2) прозрачное логирование в unicode-е ansi данных (конвертация)
3) потокобезопасность
4) безопасность выполнения (очень неприятно один раз попал на AcccessViolation уже не помню в каком логгере при событи "места на диске нету")
5) быстрота
6) небольшая (много и не надо) настраиваемость вида выводимого лога
7) малые (а лучше без них) утечки памяти и ресурсов во время работы
8) логирование стандартных эксепшенов (std::exception) и\или возможность написать свою систему распечатки определенных exception-ов
9) поддержка больших файлов (более 2^32 байт)
...


Посоветуйте пжлст.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
boostcoder
Дата 13.4.2010, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



boost::logging
удобная, не монструозная, не перегруженная.

но недавно, после появления boost.property_tree,  подумал написать обертку, чтоб лог велся в формате JSON. очень удобно.
иногда бывает необходимо анализировать лог. и приходится писать парсеры.

Это сообщение отредактировал(а) boostcoder - 13.4.2010, 22:43
PM WWW   Вверх
djamshud
Дата 13.4.2010, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



Пользуюсь своими поделками.

Мои требования:
настраиваемость формата вывода
настраиваемость цели вывода (stderr, файл, сокет, БД)
потокобезопасность
уровневость
возможность полного исключения выполнения логгерного кода из компилируемой программы в релиз-режиме

удовлетворены. А вот нафик логгеру кодировки прикручивать не ясно... Еще не ясно, откуда должны появиться утечки памяти и почему он может тормозить больше, чем устройство вывода. Эксепшенами традиционно не пользуюсь.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
jonie
Дата 13.4.2010, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



boostcoder, анализом можно и без json заниматься (LogParser от мелгомягких неплох http://www.microsoft.com/downloads/details...b2-f8d975cf8c07 , ну и вообще много можно найти подобного)....




--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
jonie
Дата 13.4.2010, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



Цитата

возможность полного исключения выполнения логгерного кода из компилируемой программы в релиз-режиме удовлетворены. 

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

Цитата

А вот нафик логгеру кодировки прикручивать не ясно... 
стандартные эксепшены идут в ansi например, также многие библиотеки упорно любят ansi, а я вот предпочитаю unicode в проекте использовать... уж больно надоели эти "C:\document and settungs\Âàñÿ\" и т.д.

Цитата

Еще не ясно, откуда должны появиться утечки памяти 
поверьте, может

Цитата

и почему он может тормозить больше, чем устройство вывода.
в случае многопоточного вывода возможна реализация когда все сообщения сваливаются сначала в буфер логгера, а уже отдельным потоком разгребается эта очередь (да, не очень реал тайм логгер, но быстрее чем морозить вызывающие потоки). Также возможны варианты когда логгер работает в режиме "отрыл-закрыл", или перед открытием проверил существует ли.. и т.д. Производительность можете посмотреть в Pantheios-е сравнение было...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
djamshud
Дата 14.4.2010, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



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

>стандартные эксепшены идут в ansi например,..

Сам пользуюсь исключительно utf-8 и при этом нет никаких проблем с char-строками. Или внешняя библиотека выдает что-то по-русски в однобайтовой кодировке? Ну так это не проблема логгера, просто нужно сделать промежуточную перекодировку. Смысл использования wchar не раскрыт. Алсо, содрал с википедии, потому что лень искать более авторитетные источники:

Цитата

«размер типа wchar_t определяется компилятором, вплоть до минимальных 8 бит. Соответственно, приложения, которым требуется сохранять переносимость на различных C и C++ компиляторах, не должны использовать wchar_t для хранения Unicode-текста. Тип wchar_t  предназначен для хранения широких символов в том виде, в котором их понимают конкретные компиляторы, и это может не соответствовать Юникоду».

В Windows API, тип wchar_t имеет размер 16 бит. Windows API нарушает стандарт ANSI/ISO C, который требует, чтобы символьный тип wchar_t поддерживал все представимые в системе символы в одном объекте wchar_t. Вместо этого, wchar_t  в Windows представляет собой символы (либо часть символа) в кодировке UTF-16.

В GNU/Linux тип wchar_t имеет размер 32 бита.


>поверьте, может

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

>в случае многопоточного вывода...

В общем случае, если отбросить нюансы: мало потоков - блокировка, много - очередь. Тормоза? Если 256 тысяч сообщений в секунду класть, то несомненно, но этот случай лучше оставьте для того авторитетного издания, а сами welcome to real life.

Я что хочу сказать то: если система логгирования работает по своему прямому назначению (софтина стартанула, отписала, что-то сделала, отписала,..) - то проблем никаких. Если же нужно распечатывать миллиарды значений и состояний, то стоит подумать либо о пересмотре своих взглядов на отладку, либо писать специализированное решение, которое оптимально съес и не подавится таким потоком.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
borisbn
Дата 14.4.2010, 06:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Я предпочитаю OutputDebugString или qDebug, т.к. без отладчика или программы просмотра отладочного вывода (типа DebugView) фактически не выполняется (не кушает процессор/винчестер), соответственно не нужно ifdef'ов


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
mrbrooks
Дата 14.4.2010, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



использую рукоблудный. 

требования сравнимы с этими:

Цитата(djamshud @  13.4.2010,  23:47 Найти цитируемый пост)
настраиваемость формата вывода
настраиваемость цели вывода (stderr, файл, сокет, БД)
потокобезопасность
уровневость
возможность полного исключения выполнения логгерного кода из компилируемой программы в релиз-режиме


PM MAIL   Вверх
SenkraD
Дата 14.4.2010, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 2
Всего: 23



использую boost::logging так, как есть всё, что хотят  mrbrooks и djamshud,
правда насчёт последнего пунктика не уверен - не проверял.
P.S. жаль что в boost не вошёл.

в планах посмотреть boost::log, который, вродь, на следующий релиз утвердили + плюс
щас разбираюсь с Pantheios - нравится мне её автор. Правда мне не очень нравится
дизайн Pantheios, но может плохо разобрался, хотя Уилсон всегда на скорость давил...


Это сообщение отредактировал(а) SenkraD - 14.4.2010, 10:03


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
RatHat
Дата 14.4.2010, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вождь индейцев
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 5.9.2005

Репутация: нет
Всего: 1



Использую либо log4cpp, либо самописную лабуду. В зависимости от требований к логгеру.
--------------------
Ma a kis' hi ve'ist i wan'i na e'ho ho wan'i
PM MAIL   Вверх
azesmcar
Дата 14.4.2010, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



зависит от требований проекта, вообще стараюсь по возможности избегать сторонних библиотек, так что в основном самописный.
PM   Вверх
Peter
Дата 14.4.2010, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 28.7.2003
Где: Ставрополь

Репутация: -1
Всего: 1



log4cxx, версия 0.10.0. В отличие от 0.9.7, он с работает с юникодом в путях к файлам.
Цитата(jonie @  13.4.2010,  21:52 Найти цитируемый пост)
1) нативная поддержка wchar_t-шных типов
Есть; при построении библиотеки надо указать соответствующую настройку.
Цитата(jonie @  13.4.2010,  21:52 Найти цитируемый пост)
3) потокобезопасность
Тоже есть. Сам проверял.
Цитата(jonie @  13.4.2010,  21:52 Найти цитируемый пост)
6) небольшая (много и не надо) настраиваемость вида выводимого лога
Настраивается (см. справку к программе).
Цитата(jonie @  13.4.2010,  21:52 Найти цитируемый пост)
7) малые (а лучше без них) утечки памяти и ресурсов во время работы
Память не течет (не помню, чем проверял; кажется Windows-овскими средствами, что в MSDN прочитал).

Про остальное с уверенностью сказать не могу.


--------------------
всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23).
PM MAIL WWW   Вверх
ИванМ
Дата 14.4.2010, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 1
Всего: 23



Небольшой оффтопик. Кто-нибудь знает хорошую документацию, желательно на русском языке для boost::logging? Или все пользуются инфой с оффициального сайта? Хочу ее попробовать, но лениво в нем разбираться.
Что меня касается, то пользуюсь 
Цитата
ламописной лабудой
.
PM MAIL   Вверх
jonie
Дата 16.4.2010, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



взял буст лог, веселья ради передал в ansi логгер wchar_t* строку, распечатал адрес строки... "Да, это правильно" - скажут многие, но на мой взгляд это далеко не то поведение, которое должно быть в простом логгере.....


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0936 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.