Если мы находимся в среде C ++, особенно в той, в которой мы боремся за сохранение низкого уровня использования ресурсов, как мы должны добавить ведение журнала для объектов очень низкого уровня, которые могут иметь проблемы с пользователями этих объектов?
Предположим, у нас есть объект высокого уровня FileManager
, который управляет файлами. Он имеет внутреннюю карту File
объектов. Пользователь может легко ввести неверный путь к файлу при создании File
для управления. Из низкоуровневого объекта мы можем обнаружить эту ошибку
bool File::CheckPath(std::string path){
if(path[0] != "/"){
std::cout << "missing / at start" << std::endl;
}
if(path[path.size() - 1] != "/"){
std::cout << "missing / at end" << std::endl;
}
}
Но мы хотим, чтобы она была частью нашей системы регистрации, а не printf
или cout
. Конечно, мы можем обнаруживать ошибки из FileManager
, а File
может возвращать коды ошибок, но мы знаем, что в будущем другие модули захотят использовать File
и не хотим, чтобы каждый модуль имел обрабатывать каждую ошибку с сообщением журнала копирования-вставки. Поскольку мы также можем управлять 100 или 1000 с File
с, мы не хотим, чтобы объект ведения журнала находился в каждом File
с уникальными дескрипторами ведения журнала и т. Д.
Как тогда мы предоставляем ведение журнала инфраструктура для объектов низкого уровня?