aspnetcore/clients/cpp/src/signalrclient/logger.cpp

57 lines
2.0 KiB
C++

// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
#include "stdafx.h"
#include "logger.h"
#include "cpprest/asyncrt_utils.h"
#include <iomanip>
namespace signalr
{
logger::logger(const std::shared_ptr<log_writer>& log_writer, trace_level trace_level)
: m_log_writer(log_writer), m_trace_level(trace_level)
{ }
void logger::log(trace_level level, const utility::string_t& entry)
{
if ((level & m_trace_level) != trace_level::none)
{
try
{
utility::ostringstream_t os;
os << utility::datetime::utc_now().to_string(utility::datetime::date_format::ISO_8601) << _XPLATSTR(" [")
<< std::left << std::setw(12) << translate_trace_level(level) << "] "<< entry << std::endl;
m_log_writer->write(os.str());
}
catch (const std::exception &e)
{
ucerr << _XPLATSTR("error occurred when logging: ") << utility::conversions::to_string_t(e.what())
<< std::endl << _XPLATSTR(" entry: ") << entry << std::endl;
}
catch (...)
{
ucerr << _XPLATSTR("unknown error occurred when logging") << std::endl << _XPLATSTR(" entry: ") << entry << std::endl;
}
}
}
utility::string_t logger::translate_trace_level(trace_level trace_level)
{
switch (trace_level)
{
case signalr::trace_level::messages:
return _XPLATSTR("message");
case signalr::trace_level::state_changes:
return _XPLATSTR("state change");
case signalr::trace_level::events:
return _XPLATSTR("event");
case signalr::trace_level::errors:
return _XPLATSTR("error");
case signalr::trace_level::info:
return _XPLATSTR("info");
default:
_ASSERTE(false);
return _XPLATSTR("(unknown)");
}
}
}