blob: 4b560721e7674ef9b089dee53194ea75795b9d3f [file] [log] [blame]
/***************************************************************************
loggingevent.h - description
-------------------
begin : mer avr 16 2003
copyright : (C) 2003 by Michael CATANZARITI
email : mcatan@free.fr
***************************************************************************/
/***************************************************************************
* Copyright (C) The Apache Software Foundation. All rights reserved. *
* *
* This software is published under the terms of the Apache Software *
* License version 1.1, a copy of which has been included with this *
* distribution in the LICENSE.txt file. *
***************************************************************************/
#ifndef _LOG4CXX_SPI_LOGGING_EVENT_H
#define _LOG4CXX_SPI_LOGGING_EVENT_H
#include <log4cxx/helpers/objectptr.h>
#include <log4cxx/helpers/tchar.h>
#include <time.h>
#include <log4cxx/logger.h>
namespace log4cxx
{
class Logger;
typedef helpers::ObjectPtr<Logger> LoggerPtr;
class Level;
namespace helpers
{
class SocketOutputStream;
typedef helpers::ObjectPtr<SocketOutputStream> SocketOutputStreamPtr;
class SocketInputStream;
typedef helpers::ObjectPtr<SocketInputStream> SocketInputStreamPtr;
};
namespace spi
{
/**
The internal representation of logging events. When an affirmative
decision is made to log then a <code>LoggingEvent</code> instance
is created. This instance is passed around to the different log4cxx
components.
<p>This class is of concern to those wishing to extend log4cxx.
*/
class LoggingEvent
{
protected:
LoggingEvent(const LoggingEvent& event);
public:
/** For serialization only
*/
LoggingEvent();
/**
Instantiate a LoggingEvent from the supplied parameters.
<p>Except #timeStamp all the other fields of
<code>LoggingEvent</code> are filled when actually needed.
<p>
@param logger The logger of this event.
@param level The level of this event.
@param message The message of this event.
@param file The file where this log statement was written.
@param line The line where this log statement was written.
*/
LoggingEvent(const LoggerPtr& logger, const Level& level,
const tstring& message, const char* file=0, int line=-1);
/** Return the name of the #logger. */
inline const tstring& getLoggerName() const
{ return logger->getName(); }
/** Return the #level of this event. */
inline const Level& getLevel() const
{ return *level; }
/** Return the #message for this logging event. */
inline const tstring& getRenderedMessage() const
{ return message; }
/** Return the #timeStamp of this event. */
inline time_t getTimeStamp() const
{ return timeStamp; }
/** Return the #threadId of this event. */
inline unsigned long getThreadId() const
{ return threadId; }
/* Return the file where this log statement was written. */
inline char * getFile() const
{ return file; }
/* Return the line where this log statement was written. */
inline int getLine() const
{ return line; }
/**
* This method returns the NDC for this event. It will return the
* correct content even if the event was generated in a different
* thread or even on a different machine. The NDC#get method
* should <em>never</em> be called directly. */
const tstring& getNDC() const;
/** Write this event to a helpers::SocketOutputStream. */
void write(helpers::SocketOutputStreamPtr os) const;
/** Read this event from a helpers::SocketOutputStream. */
void read(helpers::SocketInputStreamPtr is);
/**Returns the time when the application started,
in seconds elapsed since 01.01.1970.
*/
static long getStartTime()
{ return startTime; }
/** Obtain a copy a this event. */
LoggingEvent * copy() const;
/**
Obtain a copy of this thread's MDC prior to serialization
or asynchronous logging.
*/
void getMDCCopy() const {}
private:
/** The logger of the logging event */
LoggerPtr logger;
/** level of logging event. */
const Level * level;
/** The application supplied message of logging event. */
tstring message;
/** The name of thread in which this logging event was generated. */
//const LOG4CPLUS_THREAD_KEY_TYPE thread;
/** The number of seconds elapsed from 1/1/1970 until logging event
was created. */
time_t timeStamp;
/** The is the file where this log statement was written. */
char* file;
/** The is the line where this log statement was written. */
int line;
/** Have we tried to do an NDC lookup? If we did, there is no need
* to do it again. Note that its value is always false when
* serialized. Thus, a receiving SocketNode will never use it's own
* (incorrect) NDC. See also writeObject method.
*/
bool ndcLookupRequired;
/** The nested diagnostic context (NDC) of logging event. */
tstring ndc;
/** The identifier of thread in which this logging event
was generated.
*/
unsigned long threadId;
static time_t startTime;
};
};
};
#endif //_LOG4CXX_SPI_LOGGING_EVENT_H