summaryrefslogtreecommitdiffstats
path: root/tags/native-sca-1.0.incubating-M3-RC4/runtime/core/src/tuscany/sca/util/Logger.h
blob: eccf3cf02fe269fb5145469149e47a30567157fa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 *   
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

/* $Rev$ $Date$ */

#ifndef tuscany_sca_util_logger_h
#define tuscany_sca_util_logger_h

#include "tuscany/sca/export.h"
#include "tuscany/sca/util/LogWriter.h"

namespace tuscany
{
    namespace sca
    {
        namespace util
        {
            /**
             * Provide a logging interface.
             */
            class Logger {
    
            public:
                /**
                 * Set the log writer to use.
                 * @param writer The writer to use for all subsequent logging.
                 */
                SCA_API static void setLogWriter(LogWriter* writer);
    
                /**
                 * Set or reset the logging level. Any message with a higher logging
                 * level than this value will be filtered (i.e. not shown).
                 * @param level The level of logging to use for all subsequent logging.
                 */
                SCA_API static void setLogging(int level);
    
                /**
                 * Log a message.
                 * @param level The log level of this message.
                 * @param msg The message to be logged.
                 */
                SCA_API static void log(int level, const char* msg);
    
                /**
                 * Log a message with variable arguments.
                 * @param level The log level of this message.
                 * @param msg The message to be logged. Must include template 
                 * characters as described in printf.
                 * @param ... Variable arguments.
                 */
                SCA_API static void logArgs(int level, const char* msg, ...);
                SCA_API static void logArgs0(const char* msg, ...);
                SCA_API static void logArgs1(const char* msg, ...);
                SCA_API static void logArgs2(const char* msg, ...);
    
                /**
                 * The currently set logging level
                 */
                SCA_API static int loggingLevel;
    
            private:
                /** 
                 * The current log writer.
                 */
                static LogWriter* logWriter;
                
                /**
                 * Get the current log writer.
                 * @return The current log writer.
                 */
                static LogWriter* getLogWriter();
    
                /**
                 * Retrieves the logging level set as an environment variable.
                 */
                static int setLogging();
                
                /**
                 * Print the current thread id into the given char buffer.
                 */
                static void formatThreadID(char* tid);

                /**
                 * Message buffer
                 */
                static char messageBuffer[4096];
                
            };
            
            class LogEntry
            {
            public:
            
                LogEntry(const char* func)
                    : funcName(func)
                {
                    if (Logger::loggingLevel >= 2)
                    {
                        Logger::logArgs(2, ">> %s", funcName);
                    }
                }
                
                ~LogEntry()
                {
                    if (Logger::loggingLevel >= 2)
                    {
                        Logger::logArgs(2, "<< %s", funcName);
                    }
                }
                
            private:
                const char *funcName;
            
            };
        
        } // End namespace util
    } // End namespace sca
} // End namespace tuscany

#endif // tuscany_sca_util_logger_h