blob: 66167806e7b24ae7e60915bbc4de16f070b238c3 [file] [log] [blame]
/*
* 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.
*/
#ifndef _LOG4CXX_SPI_LOCATION_LOCATIONINFO_H
#define _LOG4CXX_SPI_LOCATION_LOCATIONINFO_H
#include <log4cxx/log4cxx.h>
#include <string>
#include <log4cxx/helpers/objectoutputstream.h>
namespace log4cxx
{
namespace spi
{
/**
* This class represents the location of a logging statement.
*
*/
class LOG4CXX_EXPORT LocationInfo
{
public:
/**
* When location information is not available the constant
* <code>NA</code> is returned. Current value of this string constant is <b>?</b>.
*/
static const char* const NA;
static const char* const NA_METHOD;
static const LocationInfo& getLocationUnavailable();
/**
* Constructor.
* @remarks Used by LOG4CXX_LOCATION to generate
* location info for current code site
*/
LocationInfo( const char* const fileName,
const char* const functionName,
int lineNumber);
/**
* Default constructor.
*/
LocationInfo();
/**
* Copy constructor.
* @param src source location
*/
LocationInfo( const LocationInfo& src );
/**
* Assignment operator.
* @param src source location
*/
LocationInfo& operator = ( const LocationInfo& src );
/**
* Resets location info to default state.
*/
void clear();
/** Return the class name of the call site. */
const std::string getClassName() const;
/**
* Return the file name of the caller.
* @returns file name, may be null.
*/
const char* getFileName() const;
/**
* Returns the line number of the caller.
* @returns line number, -1 if not available.
*/
int getLineNumber() const;
/** Returns the method name of the caller. */
const std::string getMethodName() const;
void write(log4cxx::helpers::ObjectOutputStream& os, log4cxx::helpers::Pool& p) const;
private:
/** Caller's line number. */
int lineNumber;
/** Caller's file name. */
const char* fileName;
/** Caller's method name. */
const char* methodName;
};
}
}
#if !defined(LOG4CXX_LOCATION)
#if defined(_MSC_VER)
#if _MSC_VER >= 1300
#define __LOG4CXX_FUNC__ __FUNCSIG__
#endif
#else
#if defined(__GNUC__)
#define __LOG4CXX_FUNC__ __PRETTY_FUNCTION__
#else
#if defined(__BORLANDC__)
#define __LOG4CXX_FUNC__ __FUNC__
#endif
#endif
#endif
#if !defined(__LOG4CXX_FUNC__)
#define __LOG4CXX_FUNC__ ""
#endif
#define LOG4CXX_LOCATION ::log4cxx::spi::LocationInfo(__FILE__, \
__LOG4CXX_FUNC__, \
__LINE__)
#endif
#endif //_LOG4CXX_SPI_LOCATION_LOCATIONINFO_H