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
14const std::string logger::subsystem_name = "logger";
15const logger::config logger::default_config = {
16 oak::level::info,
17 "/tmp/brenta_logs",
18};
19logger::config logger::init_config = default_config;
20bool logger::initialized = false;
21
22//
23// Subsystem interface
24//
25
26std::expected<void, subsystem::error> logger::initialize()
27{
28 if (this->is_initialized()) return {};
29
30 oak::init_writer();
31
32 oak::set_level(logger::init_config.log_level);
33
34 auto file_name = logger::init_config.log_file;
35 if (file_name != "")
36 {
37 auto file = oak::set_file(file_name);
38 if (!file.has_value())
39 {
40 ERROR("{}: Failed to open log file: {}",
41 logger::subsystem_name, file_name);
42 return std::unexpected(this->subsystem_name);
43 }
44 INFO("{}: set log file to {}", logger::subsystem_name, file_name);
45 }
46
47 logger::initialized = true;
48 INFO("{}: initialized", logger::subsystem_name);
49 return {};
50}
51
52std::expected<void, subsystem::error> logger::terminate()
53{
54 if (!this->is_initialized()) return {};
55
56 oak::stop_writer();
57
58 logger::initialized = false;
59 INFO("{}: terminated", logger::subsystem_name);
60 return {};
61}
62
63std::string logger::name()
64{
65 return logger::subsystem_name;
66}
67
69{
70 return logger::initialized;
71}
72
73//
74// Member functions
75//
76
77logger &logger::instance()
78{
79 static logger _logger;
80 return _logger;
81}
82
83//
84// Builder
85//
86
87logger::builder &logger::builder::level(oak::level log_level)
88{
89 this->conf.log_level = log_level;
90 return *this;
91}
92
93logger::builder &logger::builder::file(std::string log_file)
94{
95 this->conf.log_file = log_file;
96 return *this;
97}
98
99subsystem &logger::builder::build()
100{
101 logger::init_config = this->conf;
102 return logger::instance();
103}
std::string name() override
Returns the name of the sybsystem.
Definition logger.cpp:63
bool is_initialized() override
Returns true if the subsystem is initialized.
Definition logger.cpp:68
Subsystem interface.
Definition subsystem.hpp:22