1 // SALOME Logger : CORBA server managing trace output
3 // Copyright (C) 2003 CEA/DEN, EDF R&D
7 // File : SALOME_Logger_Server.cxx
8 // Author : Vasily Rusyaev
13 #include "SALOME_Logger_Server.hxx"
15 omni_mutex Logger::myLock;
17 /////////////////////////////////////////////////////////////////////
18 // Construction/Destruction
19 //////////////////////////////////////////////////////////////////////
23 m_putIntoFile = false;
26 Logger::Logger(const char *filename)
28 // m_outputFile.open( filename, ios::out | ios::trunc , filebuf::openprot);
29 m_outputFile.open( filename, ios::out | ios::trunc);
30 if (m_outputFile.is_open())
33 m_putIntoFile = false;
42 void Logger::putMessage(const char* message)
46 m_outputFile << message << flush;
52 int main(int argc, char **argv)
56 cout << "usage: SALOME_Logger_Server [output_file]" << endl;
62 CORBA::ORB_var orb = CORBA::ORB_init(argc,argv) ;
64 CORBA::Object_var obj = orb->resolve_initial_references("RootPOA") ;
65 PortableServer::POA_var poa = PortableServer::POA::_narrow(obj) ;
67 // NB. You can activate the POA before or after
68 // activating objects in that POA.
69 PortableServer::POAManager_var pman = poa->the_POAManager();
74 myLogger = new Logger();
76 myLogger = new Logger(argv[1]);
79 // This activates the object in the root POA (by default), and
80 // returns a reference to it.
81 SALOME_Logger::Logger_var myLoggerRef = myLogger->_this();
83 //NB. You can't use SALOME_NamingService class because it uses MESSAGE macro
84 //Otherwise, you will get segmentation fault.
86 //Get initial naming context
87 CORBA::Object_var theObj = orb->resolve_initial_references("NameService");
88 //Narrow to NamingContext
89 CosNaming::NamingContext_var inc = CosNaming::NamingContext::_narrow(theObj);
93 name[0].id = CORBA::string_dup("Logger");
95 inc->bind(name,myLoggerRef);
97 myLogger->_remove_ref();
103 catch(CORBA::COMM_FAILURE& ex)
105 cerr << "Caught system exception COMM_FAILURE -- unable to contact the "
106 << "object." << endl;
108 catch(CORBA::SystemException&)
110 cerr << "Caught CORBA::SystemException." << endl;
112 catch(CORBA::Exception&)
114 cerr << "Caught CORBA::Exception." << endl;
116 catch(omniORB::fatalException& fe)
118 cerr << "Caught omniORB::fatalException:" << endl;
119 cerr << " file: " << fe.file() << endl;
120 cerr << " line: " << fe.line() << endl;
121 cerr << " mesg: " << fe.errmsg() << endl;
125 cerr << "Caught unknown exception." << endl;