Apache log4cxx Version 0.13.0
Loading...
Searching...
No Matches
locationinfo.h
Go to the documentation of this file.
1/*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18#ifndef _LOG4CXX_SPI_LOCATION_LOCATIONINFO_H
19#define _LOG4CXX_SPI_LOCATION_LOCATIONINFO_H
20
21#include <log4cxx/log4cxx.h>
22#include <string>
24
25#if __cpp_lib_string_view || (_MSVC_LANG >= 201703L)
26#include <string_view>
27#define LOG4CXX_HAS_STRING_VIEW
28#else
29#include <string.h>
30#endif
31
32#if defined(_WIN32)
33#define LOG4CXX_SHORT_FILENAME_SPLIT_CHAR '\\'
34#else
35#define LOG4CXX_SHORT_FILENAME_SPLIT_CHAR '/'
36#endif
37
38namespace log4cxx
39{
40namespace spi
41{
46class LOG4CXX_EXPORT LocationInfo
47{
48 public:
49
50
51
56 static const char* const NA;
57 static const char* const NA_METHOD;
58
60
61#ifdef LOG4CXX_HAS_STRING_VIEW
62 static constexpr const char* calcShortFileName(const char* fileName){
63 std::string_view view(fileName);
64 // If the separator is not found, rfind will return -1. Adding 1 to
65 // that will have it pointing at fileName, which is a good fallback.
66 return fileName + view.rfind(LOG4CXX_SHORT_FILENAME_SPLIT_CHAR) + 1;
67 }
68#else
69 static const char* calcShortFileName(const char* fileName){
70 const char* location = strrchr(fileName, LOG4CXX_SHORT_FILENAME_SPLIT_CHAR);
71 return location == nullptr ? fileName : location + 1;
72 }
73#endif
74
80 LocationInfo( const char* const fileName,
81 const char* const shortFileName,
82 const char* const functionName,
83 int lineNumber);
84
89
95
100 LocationInfo& operator = ( const LocationInfo& src );
101
105 void clear();
106
107
109 const std::string getClassName() const;
110
115 const char* getFileName() const;
116
122 const char* getShortFileName() const;
123
128 int getLineNumber() const;
129
131 const std::string getMethodName() const;
132
134
135
136 private:
138 int lineNumber;
139
141 const char* fileName;
142
144 const char* shortFileName;
145
147 const char* methodName;
148
149
150};
151}
152}
153
154#if !defined(LOG4CXX_LOCATION) && !LOG4CXX_DISABLE_LOCATION_INFO
155#if defined(_MSC_VER)
156 #if _MSC_VER >= 1300
157 #define __LOG4CXX_FUNC__ __FUNCSIG__
158 #endif
159#else
160 #if defined(__GNUC__)
161 #define __LOG4CXX_FUNC__ __PRETTY_FUNCTION__
162 #else
163 #if defined(__BORLANDC__)
164 #define __LOG4CXX_FUNC__ __FUNC__
165 #endif
166 #endif
167#endif
168#if !defined(__LOG4CXX_FUNC__)
169 #define __LOG4CXX_FUNC__ ""
170#endif
171
172
173#define LOG4CXX_LOCATION ::log4cxx::spi::LocationInfo(__FILE__, \
174 ::log4cxx::spi::LocationInfo::calcShortFileName(__FILE__), \
175 __LOG4CXX_FUNC__, \
176 __LINE__)
177
178#else
179#define LOG4CXX_LOCATION ::log4cxx::spi::LocationInfo::getLocationUnavailable()
180#endif // LOG4CXX_LOCATION
181
182#endif //_LOG4CXX_SPI_LOCATION_LOCATIONINFO_H
Emulates java serialization.
Definition: objectoutputstream.h:34
Definition: pool.h:33
This class represents the location of a logging statement.
Definition: locationinfo.h:47
LocationInfo(const LocationInfo &src)
Copy constructor.
void clear()
Resets location info to default state.
static const char * calcShortFileName(const char *fileName)
Definition: locationinfo.h:69
void write(log4cxx::helpers::ObjectOutputStream &os, log4cxx::helpers::Pool &p) const
const std::string getClassName() const
Return the class name of the call site.
LocationInfo()
Default constructor.
LocationInfo(const char *const fileName, const char *const shortFileName, const char *const functionName, int lineNumber)
Constructor.
const char * getShortFileName() const
Return the short file name of the caller.
const std::string getMethodName() const
Returns the method name of the caller.
static const char *const NA_METHOD
Definition: locationinfo.h:57
static const LocationInfo & getLocationUnavailable()
const char * getFileName() const
Return the file name of the caller.
int getLineNumber() const
Returns the line number of the caller.
static const char *const NA
When location information is not available the constant NA is returned.
Definition: locationinfo.h:56
#define LOG4CXX_SHORT_FILENAME_SPLIT_CHAR
Definition: locationinfo.h:35
Definition: messagehandler.h:23