#pragma once
#include <string>

namespace myapp::logging {

class logger
{
public:
    virtual ~logger() = default;

    /// debug-level message
    virtual void debug(std::string const& tag, std::string const& message) noexcept = 0;

    /// informational message
    virtual void info(std::string const& tag, std::string const& message) noexcept = 0;

    /// normal, but significant, condition
    virtual void notice(std::string const& tag, std::string const& message) noexcept = 0;

    /// warning conditions
    virtual void warning(std::string const& tag, std::string const& message) noexcept = 0;

    /// error conditions
    virtual void error(std::string const& tag, std::string const& message) noexcept = 0;

    /// critical conditions
    virtual void critical(std::string const& tag, std::string const& message) noexcept = 0;

    /// action must be taken immediately
    virtual void alert(std::string const& tag, std::string const& message) noexcept = 0;

    /// system is unusable
    virtual void emergency(std::string const& tag, std::string const& message) noexcept = 0;
};

} /* namespace myapp::logging */
