1 /*
2  * Copyright (c) 2015, Intel Corporation
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without modification,
6  * 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 and/or
13  * other materials provided with the distribution.
14  *
15  * 3. Neither the name of the copyright holder nor the names of its contributors
16  * may be used to endorse or promote products derived from this software without
17  * specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
23  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
26  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30 #pragma once
31 
32 #include "log/Logger.h"
33 #include <string>
34 
35 namespace core
36 {
37 namespace log
38 {
39 
40 /** Log formatter which provide context indentation */
41 class Context
42 {
43 public:
44     /**
45      * Class Constructor
46      *
47      * @param[in] logger application logger
48      * @param[in] context name of the context to open
49      */
Context(Logger & logger,const std::string & context)50     Context(Logger &logger, const std::string &context) : mLogger(logger)
51     {
52         mLogger.info() << context << " {";
53         mLogger.mProlog += "    ";
54     }
55 
56     /** Class Destructor */
~Context()57     ~Context()
58     {
59         mLogger.mProlog.resize(mLogger.mProlog.size() - 4);
60         mLogger.info() << "}";
61     }
62 
63 private:
64     Context(const Context &);
65     Context &operator=(const Context &);
66 
67     /** Application logger */
68     Logger &mLogger;
69 };
70 
71 } /** log namespace */
72 } /** core namespace */
73