Apache log4cxx  Version 0.13.0
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 
38 namespace log4cxx
39 {
40 namespace spi
41 {
46 class LOG4CXX_EXPORT LocationInfo
47 {
48  public:
49 
50 
51 
56  static const char* const NA;
57  static const char* const NA_METHOD;
58 
59  static const LocationInfo& getLocationUnavailable();
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 
88  LocationInfo();
89 
94  LocationInfo( const LocationInfo& src );
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
static const char * calcShortFileName(const char *fileName)
Definition: locationinfo.h:69
static const char *const NA_METHOD
Definition: locationinfo.h:57
#define LOG4CXX_SHORT_FILENAME_SPLIT_CHAR
Definition: locationinfo.h:35
Emulates java serialization.
Definition: objectoutputstream.h:33
Definition: pool.h:32
This class represents the location of a logging statement.
Definition: locationinfo.h:46
Definition: appender.h:32
static const char *const NA
When location information is not available the constant NA is returned.
Definition: locationinfo.h:56