Ответ
Да, конечно. В C++ логи обычно пишутся в стандартные потоки вывода (std::cout, std::cerr) или в файлы. Для просмотра используются консольные утилиты.
1. Запись логов в C++:
#include <iostream>
#include <fstream>
#include <chrono>
#include <iomanip>
void log_to_file(const std::string& message) {
std::ofstream log_file("app.log", std::ios::app); // Открываем для добавления
if (log_file.is_open()) {
auto now = std::chrono::system_clock::now();
auto now_time = std::chrono::system_clock::to_time_t(now);
log_file << std::put_time(std::localtime(&now_time), "%Y-%m-%d %H:%M:%S")
<< " | " << message << std::endl;
}
}
int main() {
std::cout << "Информационное сообщениеn"; // stdout
std::cerr << "Сообщение об ошибкеn"; // stderr
log_to_file("Запуск приложения");
return 0;
}
2. Просмотр логов в Linux/Unix:
cat app.log– вывести весь файл.tail -f app.log– выводить новые записи в реальном времени (слежение).grep "ERROR" app.log– фильтрация по ключевому слову.less app.log– постраничный просмотр с поиском.
3. Перенаправление потоков при запуске:
# Все выводы (stdout и stderr) в файл
./my_app > output.log 2>&1
# stdout в один файл, stderr в другой
./my_app > stdout.log 2> stderr.log
# stdout в файл, stderr в консоль
./my_app > output.log
4. Использование системного журнала (syslog):
#include <syslog.h>
int main() {
openlog("my_cpp_app", LOG_PID | LOG_CONS, LOG_USER);
syslog(LOG_INFO, "Приложение запущено (PID = %d)", getpid());
syslog(LOG_ERR, "Критическая ошибка!");
closelog();
return 0;
}
Просмотр: journalctl -t my_cpp_app или tail -f /var/log/syslog.