Skip to content
Extraits de code Groupes Projets
Sélectionner une révision Git
  • 22ebeab1bbaf9872c6dec0dcc1e1e709ad054896
  • master par défaut
  • script
  • new-devel
  • devel
  • timingView-edit
  • fix-mpv
7 résultats

Log.cc

Blame
  • Log.cc 6,70 Kio
    #include "Log.hh"
    
    // Vivy::LogLevel utility implementation
    namespace Vivy
    {
    const std::string_view
    LogLevel::toStdStringView(const LogLevel::Level lvl) noexcept
    {
        return LevelsStringViews[static_cast<Array::size_type>(lvl)];
    }
    }
    
    // Vivy::LogSinkDispatcher and child classes implementation
    namespace Vivy
    {
    LogSinkDispatcher::~LogSinkDispatcher() noexcept {}
    
    const std::string_view
    StderrLogSinkDispatcher::trunkFileName(const char *fileName) noexcept
    {
        using size_type = std::string_view::size_type;
    
        static constexpr char basePrefix[]       = "/src/";
        static constexpr size_type basePrefixLen = (sizeof(basePrefix) / sizeof(char)) - 1;
    
        const std::string_view fileNameView{ fileName };
        const size_type basePath = fileNameView.rfind(basePrefix);
        return std::string_view{ fileNameView.data() + basePath + basePrefixLen,
                                 fileNameView.data() + fileNameView.size() };
    }
    
    std::string
    StderrLogSinkDispatcher::reduceFileName(const std::string_view fileName) noexcept
    {
        return std::filesystem::path(fileName).lexically_normal();
    }
    
    StderrLogSinkDispatcher::StderrLogSinkDispatcher() noexcept
        : LogSinkDispatcher(std::string_view{ "stderr" })
    {
    }
    
    void
    StderrLogSinkDispatcher::handleLogMessage(const std::string_view category,
                                              const LogMessage &msg) noexcept
    {
        std::cerr << "#(" << reduceFileName(trunkFileName(msg.getHeader().fileName)) << " +"
                  << msg.getHeader().lineNumberInFile << " | "
                  << LogLevel::toStdStringView(msg.getHeader().severity) << " -> " << category << ") "
                  << msg.getTextBuffer() << '\n';
    }
    }
    
    // Vivy::LogSink implementation
    namespace Vivy
    {
    // Flush all messages before exiting
    LogSink::~LogSink() noexcept { flush(); }
    
    // Get the log message from the logger and add it to the sink's queue.
    void
    LogSink::recieveLogMessage(const Logger *const logger, LogMessage &&msg) noexcept
    {
        const std::lock_guard<std::mutex> messageQueueLockGuard(messageQueueLock);
        messageQueue.emplace_back(std::make_tuple<const std::string_view, LogMessage>(
            logger->getCategoryView(), std::move(msg.sink())));
    }
    
    // Flush all LogMessages to all of the LogSinkDispatchers. Also clear the message queue.
    void