~dobey/unity-api/add-simple-logger

« back to all changes in this revision

Viewing changes to src/unity/util/Logger.cpp

  • Committer: Rodney Dawes
  • Date: 2017-04-03 21:10:23 UTC
  • Revision ID: rodney.dawes@canonical.com-20170403211023-2dttuxcug3l3t1b1
Move some code into C++ and greatly simplify the implementation.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright 2017 Canonical Ltd.
 
3
 *
 
4
 * This library is free software; you can redistribute it and/or
 
5
 * modify it under the terms of version 3 of the GNU Lesser General Public
 
6
 * License as published by the Free Software Foundation.
 
7
 *
 
8
 * This program is distributed in the hope that it will be useful,
 
9
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
10
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
11
 * General Public License for more details.
 
12
 *
 
13
 * You should have received a copy of the GNU Lesser General Public
 
14
 * License along with this library; if not, write to the
 
15
 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 
16
 * Boston, MA 02110-1301, USA.
 
17
 */
 
18
 
 
19
#define G_LOG_DOMAIN nullptr
 
20
 
 
21
#include "unity/util/Logger.h"
 
22
 
 
23
#include <glib.h>
 
24
 
 
25
namespace unity
 
26
{
 
27
 
 
28
namespace util
 
29
{
 
30
 
 
31
Logger::Logger(Logger::Level level, const std::string& domain):
 
32
    std::ostringstream(""),
 
33
    _level(level),
 
34
    _domain(domain)
 
35
{
 
36
}
 
37
 
 
38
Logger::Logger(Logger&& logger):
 
39
    std::ostringstream(std::move(logger)),
 
40
    _level(logger._level)
 
41
{
 
42
}
 
43
 
 
44
Logger::~Logger()
 
45
{
 
46
    GLogLevelFlags glib_level;
 
47
    auto message = str();
 
48
 
 
49
    if (!message.empty()) {
 
50
        switch (_level) {
 
51
        case Logger::Level::DEBUG:
 
52
            glib_level = G_LOG_LEVEL_DEBUG;
 
53
            break;
 
54
        case Logger::Level::INFO:
 
55
            glib_level = G_LOG_LEVEL_INFO;
 
56
            break;
 
57
        case Logger::Level::MESSAGE:
 
58
            glib_level = G_LOG_LEVEL_MESSAGE;
 
59
            break;
 
60
        case Logger::Level::WARNING:
 
61
            glib_level = G_LOG_LEVEL_WARNING;
 
62
            break;
 
63
        case Logger::Level::CRITICAL:
 
64
            glib_level = G_LOG_LEVEL_CRITICAL;
 
65
            break;
 
66
        case Logger::Level::ERROR:
 
67
            glib_level = G_LOG_LEVEL_ERROR;
 
68
            break;
 
69
        }
 
70
        g_log(_domain.empty() ? nullptr : _domain.c_str(),
 
71
              glib_level, "%s", message.c_str());
 
72
    }
 
73
}
 
74
 
 
75
} // namespace util
 
76
 
 
77
} // namespace unity