LINUX.ORG.RU

Помогите создать логгер

 


0

4

Помогите создать логгер по данному заданию. Написать логгер для многопоточной среды.

Общая информация:

Логгер - это некий канал для передачи сообщений или информационных данных (сообщения об ошибках, вспомогательные данные для отладки и т.д.) из приложения и сохранения их для последующей обработки и анализа. В общем случае, данные могут передаваться куда-то по сети или записываться в файл на машине. У каждого сообщения есть уровень логирования (log level). Уровень логирования указывает важность принимаемых сообщений. Обычно уровни логирования бывают такие: *CRITICAL: Информация о критических ошибках * ERROR: Информация об ошибках возникших при работе приложения *WARNING: Информация о мелких проблемах возникших при работе приложения * INFO: Общая информация * DEBUG: Логирование информации для последующего использования в отладке

Задача:

Написать простейший логгер (набор структур и функций для С или класс для С++), который записывает логгируемые данные (только текст) из программы в текстовый файл на компьютере, где он запущен.

Логгер должен: * Логгировать только текстовую информацию. * Каждая запись должна содержать: - время когда она была сделана в формате «YYYY-MM-DD HH:MM:SS» - уровень логирования, с которым запись была помещена в лог. * Логгер должен работать в многпоточной среде, то есть несколько потоков должны иметь возможность писать в лог (один и тот же файл).

Необходимо так же написать простейшее консольное тестовое приложение к логгеру.

Использовать можно, либо С, либо С++, на выбор. Желательно под Linux, но можно и под Windows. Можно использовать любую доступную среду разработки и компилятор С или С++.

Или подскажите где почитать. Проблема в том, что с подобного рода задачами не сталкивался НИКОГДА. Поэтому даже не знаю с чего начинать.



Последнее исправление: cetjs2 (всего исправлений: 1)
Ответ на: комментарий от Harald

Условие задачи :) Ключевое слово «простейший». no-dashi читер, умножает сущности. Полагается на существование «библиотеки, слушающей сокет» :)

slackwarrior ★★★★★
()
Ответ на: комментарий от slackwarrior

Полагается на существование «библиотеки, слушающей сокет»

Интересно. По-твоему, для вызова select нынче нужно использвать какую-то очень наворочанную бибилиотеку? Ну-ну.

no-dashi ★★★★★
()
Ответ на: комментарий от no-dashi

при чем тут udp? Привязка к протоколу не обязательна. Да и кричать на весь мир о событиях в программе не обязательно :) Левый флуд в сети не всем нравится. Если нужно что-то чем-то слушать - значит ты предполагаешь, что работу по логированию делает кто-то за тебя :) То есть целиком отдаешься на откуп ФГМ разработчика «библиотеки логирования слушающей сокет», которая не обязательно является элементарной (и не обязательно совпадает по интерфейсу/формату с тем, что тебе требуется). «Попробовал эту, попробовал ту... плюнул, написал свою» :)

slackwarrior ★★★★★
()
Ответ на: комментарий от Harald

Это только канал, а не логгер :) Да и пайпы под виндой не такие как в юниксе («дороже» и «дубовее»). Поддержка разных интерфейсов заведомо не элементарна.

slackwarrior ★★★★★
()
Последнее исправление: slackwarrior (всего исправлений: 1)
Ответ на: комментарий от slackwarrior

Ты уже в 22-дюймовый монитор не помещаешься. Может, тебе подлечить твою слакварь терминальной стадии, а уже потом рассуждать о логгировании?

no-dashi ★★★★★
()
Ответ на: комментарий от no-dashi

Эта твоя фраза называется по-ботанически «диалоговая трансференция», а именно - переход на личности :) Слив защитать?

slackwarrior ★★★★★
()
Ответ на: комментарий от slackwarrior

Диагноз «синдром дауна» себе засчитай, потому как это эмпирически наиболее точный диагноз для тех, кто не понимает почему нужно раделять компоненты системы - и в частности, вынос логгера в отдельный процесс с последующим общением с ним через системную реализацию IPC

no-dashi ★★★★★
()
Ответ на: комментарий от no-dashi

Ггг. Твой бугурт говорит сам за себя. Ты совершенно не готов для Ъ-ынтерпайза: совершенно не понимаешь нужды клиента и суть слова «простейший», отраженную в требованиях :)

slackwarrior ★★★★★
()
Ответ на: комментарий от slackwarrior

Решения должны быть простыми, но они не могут быть проще чем задача.

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

Если логгирование для многопроцессовой среды, то задача не решается без средств IPC.

Так что, марш доучиваться

no-dashi ★★★★★
()
Ответ на: комментарий от no-dashi

но они не могут быть проще чем задача.

Могут. Если ты обоснуешь клиенту, что это ему «не нужно»

Могут и сложнее быть... Если обоснуешь, но это сложнее :) Например, этот твой IPC может быть не нужен по одной простой причине - «не нужен» :) Нужен «простейший логгер» (с)

Так что, марш доучиваться

Сказал теоретик, ощущая жжение. «Это тебя 5.1 твоя гордость, Бутч» (с)

slackwarrior ★★★★★
()
Ответ на: комментарий от slackwarrior

Если ты обоснуешь клиенту, что это ему «не нужно»

Ну давай, обоснуй что твой «простейший» in-processs логгер не запорет логи в случае ошибки. А мы с интересом посмотрим, как ты запретишь себе заись в файл, в который тебе должна быть разрешена запись.

no-dashi ★★★★★
()
Ответ на: комментарий от slackwarrior

Например, этот твой IPC может быть не нужен по одной простой причине - «не нужен»

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

Правада, чтобы понять этот факт, нужно сначала вспомнить правила работы и обязательные требования к «логгированию», с чем у тебя явно наблюдаются проблемы - «не знал, да ещё и забыл».

no-dashi ★★★★★
()
Ответ на: комментарий от slackwarrior

Ай-яй-яй, что, не получается ничего по теме возразить? Ну ничего, бывает такое, когда влезаешь в тему в которой не сечешью

no-dashi ★★★★★
()
Ответ на: комментарий от no-dashi

«НетЪ ты!» (с) Ты давно не по теме возражаешь :) А все потому, что с тобой не согласны Такое бывает, когда ты считаешь себя экспертом в теме, в которой сечешь не больше других :) Просто считаешь свою точку зрения единственно верной, безо всяких к тому оснований.

slackwarrior ★★★★★
()
Ответ на: комментарий от slackwarrior

Я писал «очень простые логгеры» (типа того который предлагаешь ты) в каждой программе - но не счиатю это правильным. Потому и считаю, что если задание не написать программу, а написать именно логгер - то это отличный шанс сделать всё правильно, а не на «отвяжитесь».

no-dashi ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.