Brenta Engine 1.2
Loading...
Searching...
No Matches
logger.cpp
1// SPDX-License-Identifier: MIT
2// Author: Giovanni Santini
3// Mail: giovanni.santini@proton.me
4// Github: @San7o
5
6#include <brenta/logger.hpp>
7
8using namespace brenta;
9
10//
11// Static variables
12//
13
14oak::level logger::log_level;
15std::string logger::log_file;
16const std::string logger::subsystem_name = "logger";
17const logger::config logger::default_config = {
18 oak::level::info,
19 "/tmp/brenta_logs",
20};
21logger::config logger::init_config = default_config;
22bool logger::initialized = false;
23
24//
25// Subsystem interface
26//
27
28std::expected<void, subsystem::error> logger::initialize()
29{
30 if (this->is_initialized()) return {};
31
32 oak::init_writer();
33
34 oak::set_level(this->log_level);
35
36 if (this->log_file != "")
37 {
38 auto file = oak::set_file(this->log_file);
39 if (!file.has_value())
40 {
41 ERROR("{}: Failed to open log file: {}",
42 logger::subsystem_name, log_file);
43 return std::unexpected(this->subsystem_name);
44 }
45 INFO("{}: set log file to {}", logger::subsystem_name, log_file);
46 }
47
48 logger::initialized = true;
49 INFO("{}: initialized", logger::subsystem_name);
50 return {};
51}
52
53std::expected<void, subsystem::error> logger::terminate()
54{
55 if (!this->is_initialized()) return {};
56
57 oak::stop_writer();
58
59 logger::initialized = false;
60 INFO("{}: terminated", logger::subsystem_name);
61 return {};
62}
63
64std::string logger::name()
65{
66 return logger::subsystem_name;
67}
68
70{
71 return logger::initialized;
72}
73
74//
75// Member functions
76//
77
78logger &logger::instance()
79{
80 static logger _logger;
81 return _logger;
82}
83
84//
85// Builder
86//
87
88logger::builder &logger::builder::level(oak::level log_level)
89{
90 this->conf.log_level = log_level;
91 return *this;
92}
93
94logger::builder &logger::builder::file(std::string log_file)
95{
96 this->conf.log_file = log_file;
97 return *this;
98}
99
100subsystem &logger::builder::build()
101{
102 logger::init_config = this->conf;
103 return logger::instance();
104}
std::string name() override
Returns the name of the sybsystem.
Definition logger.cpp:64
bool is_initialized() override
Returns true if the subsystem is initialized.
Definition logger.cpp:69
Subsystem interface.
Definition subsystem.hpp:22