dds-fmu 0.5.1
DDS-FMU communication integration
LoggerAdapters.hpp
1#pragma once
2
3/*
4 Copyright 2023, SINTEF Ocean
5 This Source Code Form is subject to the terms of the Mozilla Public
6 License, v. 2.0. If a copy of the MPL was not distributed with this
7 file, You can obtain one at http://mozilla.org/MPL/2.0/.
8*/
9
10#include <iostream>
11#include <sstream>
12#include <string>
13#include <utility>
14
15#include <cppfmu_common.hpp>
16#include <fastdds/dds/log/OStreamConsumer.hpp>
17
18namespace ddsfmu {
19
20class FmiLogger : public eprosima::fastdds::dds::OStreamConsumer {
21public:
22 FmiLogger() = delete;
23 FmiLogger(cppfmu::Logger& logger, const std::string& name)
24 : m_logger(logger), m_str(std::ostringstream::ate), m_name(name) {}
25 virtual ~FmiLogger() = default;
26
27 void Consume(const eprosima::fastdds::dds::Log::Entry& entry) override {
28 eprosima::fastdds::dds::OStreamConsumer::Consume(entry);
29
30 cppfmu::FMIStatus status;
31
32 switch (entry.kind) {
33 case eprosima::fastdds::dds::Log::Kind::Info:
34 status = cppfmu::FMIOK;
35 break;
36 case eprosima::fastdds::dds::Log::Kind::Warning:
37 case eprosima::fastdds::dds::Log::Kind::Error:
38 status = cppfmu::FMIWarning;
39 break;
40 }
41
42 // TODO: What is correct category here (not m_name?)
43 m_logger.Log(status, m_name.c_str(), m_str.str().c_str());
44 m_str.str("");
45 m_str.clear();
46 }
47
48protected:
49 std::ostream& get_stream(const eprosima::fastdds::dds::Log::Entry& entry) override {
50 return m_str;
51 }
52
53private:
54 std::ostringstream m_str;
55 std::string m_name;
56 cppfmu::Logger& m_logger;
57};
58
59}
Definition: LoggerAdapters.hpp:20
virtual ~FmiLogger()=default
void Consume(const eprosima::fastdds::dds::Log::Entry &entry) override
Definition: LoggerAdapters.hpp:27
std::ostream & get_stream(const eprosima::fastdds::dds::Log::Entry &entry) override
Definition: LoggerAdapters.hpp:49
FmiLogger(cppfmu::Logger &logger, const std::string &name)
Definition: LoggerAdapters.hpp:23
Definition: auxiliaries.cpp:26