Skip to content

Commit b91c8e0

Browse files
committed
Add XmlFileLogger
1 parent 17b459e commit b91c8e0

File tree

5 files changed

+144
-2
lines changed

5 files changed

+144
-2
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,4 @@ make -j`nproc`
1414
- **Logger** - General definition and logging to /dev/null.
1515
- **LoggerFactory** - Loggin to all possible types, as configured.
1616
- **StdLogger** - Loggin to stdout.
17+
- **XmlFileLogger** - Loggin to a file as xml.

examples/logger/main.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,10 @@
3434

3535
/* modern.cpp.logger */
3636
//#include <FileLogger.h>
37-
#include <LoggerFactory.h>
37+
//#include <LoggerFactory.h>
3838
//#include <Logger.h>
3939
//#include <StdLogger.h>
40+
#include <XmlFileLogger.h>
4041

4142
using namespace vx;
4243

@@ -93,8 +94,13 @@ int main() {
9394
FileLogger logger( configuration );
9495
logger.log( logMessage, Severity::Fatal ); */
9596

97+
/* Log to file */
98+
std::unordered_map<std::string, std::string> configuration = { { "color", "" }, {"filename", "logger.xml"} };
99+
XmlFileLogger logger( configuration );
100+
logger.log( logMessage, Severity::Fatal );
101+
96102
/* Log with logging factory */
97-
vx::LogFatal( logMessage );
103+
// vx::LogFatal( logMessage );
98104

99105
return EXIT_SUCCESS;
100106
}

source/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ add_library(${PROJECT_NAME}
4444
LoggerFactory.h
4545
StdLogger.cpp
4646
StdLogger.h
47+
StdLogger.cpp
48+
XmlFileLogger.cpp
49+
XmlFileLogger.h
4750
)
4851

4952
target_include_directories(${PROJECT_NAME} PUBLIC ${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}../3rdparty)

source/XmlFileLogger.cpp

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/*
2+
* Copyright (c) 2020 Florian Becker <[email protected]> (VX APPS).
3+
* All rights reserved.
4+
*
5+
* Redistribution and use in source and binary forms, with or without
6+
* modification, are permitted provided that the following conditions are met:
7+
*
8+
* 1. Redistributions of source code must retain the above copyright notice, this
9+
* list of conditions and the following disclaimer.
10+
*
11+
* 2. Redistributions in binary form must reproduce the above copyright notice,
12+
* this list of conditions and the following disclaimer in the documentation
13+
* and/or other materials provided with the distribution.
14+
*
15+
* 3. Neither the name of the copyright holder nor the names of its
16+
* contributors may be used to endorse or promote products derived from
17+
* this software without specific prior written permission.
18+
*
19+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22+
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25+
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26+
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27+
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29+
*/
30+
31+
/* magic enum */
32+
#include <magic_enum.hpp>
33+
34+
/* local header */
35+
#include "XmlFileLogger.h"
36+
37+
namespace vx {
38+
39+
XmlFileLogger::XmlFileLogger( const std::unordered_map<std::string, std::string> &_config )
40+
: FileLogger( _config ) {}
41+
42+
void XmlFileLogger::log( const std::string &_message, const Severity _severity ) {
43+
44+
if ( avoidLogAbove > _severity ) {
45+
46+
return;
47+
}
48+
49+
std::string output;
50+
output.reserve( _message.length() + 64 );
51+
output.append( "<entry>" );
52+
output.append( "<timestamp>" );
53+
output.append( timestamp() );
54+
output.append( "</timestamp>" );
55+
56+
std::string severity = std::string( magic_enum::enum_name( _severity ) );
57+
std::transform( severity.begin(), severity.end(), severity.begin(), []( unsigned char c ) { return std::toupper( c ); } );
58+
output.append( "<severity>" );
59+
output.append( severity );
60+
output.append( "</severity>" );
61+
output.append( "<message>" );
62+
output.append( _message );
63+
output.append( "</message>" );
64+
output.append( "</entry>\n" );
65+
FileLogger::log( output );
66+
}
67+
}

source/XmlFileLogger.h

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
/*
2+
* Copyright (c) 2020 Florian Becker <[email protected]> (VX APPS).
3+
* All rights reserved.
4+
*
5+
* Redistribution and use in source and binary forms, with or without
6+
* modification, are permitted provided that the following conditions are met:
7+
*
8+
* 1. Redistributions of source code must retain the above copyright notice, this
9+
* list of conditions and the following disclaimer.
10+
*
11+
* 2. Redistributions in binary form must reproduce the above copyright notice,
12+
* this list of conditions and the following disclaimer in the documentation
13+
* and/or other materials provided with the distribution.
14+
*
15+
* 3. Neither the name of the copyright holder nor the names of its
16+
* contributors may be used to endorse or promote products derived from
17+
* this software without specific prior written permission.
18+
*
19+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22+
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25+
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26+
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27+
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29+
*/
30+
31+
#pragma once
32+
33+
/* stl header */
34+
#include <string>
35+
#include <unordered_map>
36+
37+
/* local header */
38+
#include "FileLogger.h"
39+
40+
/**
41+
* @brief vx (VX Apps) namespace.
42+
*/
43+
namespace vx {
44+
45+
/**
46+
* @brief The FileLogger class for writing messages to file.
47+
* @author Florian Becker <fb\@vxapps.com> (VX APPS)
48+
*/
49+
class XmlFileLogger : public FileLogger {
50+
51+
public:
52+
/**
53+
* @brief Default constructor for XmlFileLogger.
54+
* @param _configuration Logger configuration.
55+
*/
56+
explicit XmlFileLogger( const std::unordered_map<std::string, std::string> &_config );
57+
58+
/**
59+
* @brief Build the log message.
60+
* @param _message Message to log.
61+
* @param _severity Severity level of the message.
62+
*/
63+
virtual void log( const std::string &_message, const Severity _severity ) override;
64+
};
65+
}

0 commit comments

Comments
 (0)