123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- /* -*- C++ -*- */
- /****************************************************************************
- ** Copyright (c) 2001-2014
- **
- ** This file is part of the QuickFIX FIX Engine
- **
- ** This file may be distributed under the terms of the quickfixengine.org
- ** license as defined by quickfixengine.org and appearing in the file
- ** LICENSE included in the packaging of this file.
- **
- ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
- ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- **
- ** See http://www.quickfixengine.org/LICENSE for licensing information.
- **
- ** Contact ask@quickfixengine.org if any conditions of this licensing are
- ** not clear to you.
- **
- ****************************************************************************/
- #ifndef FIX_LOG_H
- #define FIX_LOG_H
- #ifdef _MSC_VER
- #pragma warning( disable : 4503 4355 4786 4290 )
- #endif
- #include "Message.h"
- #include "Mutex.h"
- #include "SessionSettings.h"
- #include <map>
- #include <vector>
- namespace FIX
- {
- class Log;
- /**
- * This interface must be implemented to create a Log.
- */
- class LogFactory
- {
- public:
- virtual ~LogFactory() {}
- virtual Log* create() = 0;
- virtual Log* create( const SessionID& ) = 0;
- virtual void destroy( Log* ) = 0;
- };
- /**
- * Creates a screen based implementation of Log.
- *
- * This displays all log events onto the standard output
- */
- class ScreenLogFactory : public LogFactory
- {
- public:
- ScreenLogFactory( const SessionSettings& settings )
- : m_useSettings( true ), m_settings( settings ) {};
- ScreenLogFactory( bool incoming, bool outgoing, bool event )
- : m_incoming( incoming ), m_outgoing( outgoing ), m_event( event ), m_useSettings( false ) {}
- Log* create();
- Log* create( const SessionID& );
- void destroy( Log* log );
- private:
- void init( const Dictionary& settings, bool& incoming, bool& outgoing, bool& event );
- bool m_incoming;
- bool m_outgoing;
- bool m_event;
- bool m_useSettings;
- SessionSettings m_settings;
- };
- /**
- * This interface must be implemented to log messages and events
- */
- class Log
- {
- public:
- virtual ~Log() {}
- virtual void clear() = 0;
- virtual void backup() = 0;
- virtual void onIncoming( const std::string& ) = 0;
- virtual void onOutgoing( const std::string& ) = 0;
- virtual void onEvent( const std::string& ) = 0;
- };
- /*! @} */
- /**
- * Null implementation of Log
- *
- * This is only for internal use. Used when no log factory is
- * passed to the initiator or acceptor.
- */
- class NullLog : public Log
- {
- public:
- void clear() {}
- void backup() {}
- void onIncoming( const std::string& ) {}
- void onOutgoing( const std::string& ) {}
- void onEvent( const std::string& ) {}
- };
- /**
- * Screen based implementation of Log.
- *
- * This will display all log information onto the standard output
- */
- class ScreenLog : public Log
- {
- public:
- ScreenLog( bool incoming, bool outgoing, bool event )
- : m_prefix( "GLOBAL" ),
- m_incoming( incoming ), m_outgoing( outgoing ), m_event( event ), m_millisecondsInTimeStamp( true ) {}
- ScreenLog( const SessionID& sessionID,
- bool incoming, bool outgoing, bool event )
- : m_prefix( sessionID.toString() ),
- m_incoming( incoming ), m_outgoing( outgoing ), m_event( event ), m_millisecondsInTimeStamp( true ) {}
- void clear() {}
- void backup() {}
- void onIncoming( const std::string& value )
- {
- if ( !m_incoming ) return ;
- Locker l( s_mutex );
- m_time.setCurrent();
- std::cout << "<" << UtcTimeStampConvertor::convert(m_time, m_millisecondsInTimeStamp)
- << ", " << m_prefix
- << ", " << "incoming>" << std::endl
- << " (" << value << ")" << std::endl;
- }
- void onOutgoing( const std::string& value )
- {
- if ( !m_outgoing ) return ;
- Locker l( s_mutex );
- m_time.setCurrent();
- std::cout << "<" << UtcTimeStampConvertor::convert(m_time, m_millisecondsInTimeStamp)
- << ", " << m_prefix
- << ", " << "outgoing>" << std::endl
- << " (" << value << ")" << std::endl;
- }
- void onEvent( const std::string& value )
- {
- if ( !m_event ) return ;
- Locker l( s_mutex );
- m_time.setCurrent();
- std::cout << "<" << UtcTimeStampConvertor::convert(m_time, m_millisecondsInTimeStamp)
- << ", " << m_prefix
- << ", " << "event>" << std::endl
- << " (" << value << ")" << std::endl;
- }
- bool getMillisecondsInTimeStamp() const
- { return m_millisecondsInTimeStamp; }
- void setMillisecondsInTimeStamp ( bool value )
- { m_millisecondsInTimeStamp = value; }
- private:
- std::string m_prefix;
- UtcTimeStamp m_time;
- bool m_incoming;
- bool m_outgoing;
- bool m_event;
- static Mutex s_mutex;
- bool m_millisecondsInTimeStamp;
- };
- }
- #endif //FIX_LOG_H
|