You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							151 lines
						
					
					
						
							4.1 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							151 lines
						
					
					
						
							4.1 KiB
						
					
					
				
								
							 | 
						|
								#include <log4cplus/consoleappender.h>
							 | 
						|
								#include <log4cplus/layout.h>
							 | 
						|
								#include <log4cplus/logger.h>
							 | 
						|
								#include <log4cplus/ndc.h>
							 | 
						|
								#include <log4cplus/helpers/loglog.h>
							 | 
						|
								#include <log4cplus/thread/threads.h>
							 | 
						|
								#include <log4cplus/helpers/sleep.h>
							 | 
						|
								#include <log4cplus/streams.h>
							 | 
						|
								#include <log4cplus/loggingmacros.h>
							 | 
						|
								#include <log4cplus/tracelogger.h>
							 | 
						|
								#include <exception>
							 | 
						|
								#include <iostream>
							 | 
						|
								#include <string>
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								using namespace std;
							 | 
						|
								using namespace log4cplus;
							 | 
						|
								using namespace log4cplus::helpers;
							 | 
						|
								using namespace log4cplus::thread;
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								#define MILLIS_TO_NANOS 1000
							 | 
						|
								#define NUM_THREADS 4
							 | 
						|
								#define NUM_LOOPS 10
							 | 
						|
								
							 | 
						|
								class SlowObject {
							 | 
						|
								public:
							 | 
						|
								    SlowObject() 
							 | 
						|
								        : logger(Logger::getInstance(LOG4CPLUS_TEXT("SlowObject"))) 
							 | 
						|
								    {
							 | 
						|
								        logger.setLogLevel(TRACE_LOG_LEVEL);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    void doSomething()
							 | 
						|
								    {
							 | 
						|
								        LOG4CPLUS_TRACE_METHOD(logger, LOG4CPLUS_TEXT("SlowObject::doSomething()"));
							 | 
						|
								        {
							 | 
						|
								            log4cplus::thread::MutexGuard guard (mutex);
							 | 
						|
								            LOG4CPLUS_INFO(logger, LOG4CPLUS_TEXT("Actually doing something..."));
							 | 
						|
								            sleep(0, 75 * MILLIS_TO_NANOS);
							 | 
						|
								            LOG4CPLUS_INFO_FMT(logger,
							 | 
						|
								                LOG4CPLUS_TEXT (
							 | 
						|
								                    "Actually doing something...%d, %d, %d, %ls...DONE"),
							 | 
						|
								                1, 2, 3, L"testing");
							 | 
						|
								        }
							 | 
						|
								        log4cplus::thread::yield();
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    ~SlowObject ()
							 | 
						|
								    { }
							 | 
						|
								
							 | 
						|
								private:
							 | 
						|
								    log4cplus::thread::Mutex mutex;
							 | 
						|
								    Logger logger;
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								class TestThread : public AbstractThread {
							 | 
						|
								public:
							 | 
						|
								    TestThread (tstring const & n, SlowObject * so) 
							 | 
						|
								        : name(n)
							 | 
						|
								        , slow(so)
							 | 
						|
								        , logger(Logger::getInstance(LOG4CPLUS_TEXT("test.TestThread"))) 
							 | 
						|
								     { }
							 | 
						|
								
							 | 
						|
								    virtual void run();
							 | 
						|
								
							 | 
						|
								private:
							 | 
						|
								    tstring name;
							 | 
						|
								    SlowObject * slow;
							 | 
						|
								    Logger logger;
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								int
							 | 
						|
								main() 
							 | 
						|
								{
							 | 
						|
								    log4cplus::initialize();
							 | 
						|
								    try
							 | 
						|
								    {    
							 | 
						|
								        auto_ptr<SlowObject> slowObject(new SlowObject());
							 | 
						|
								        log4cplus::helpers::LogLog::getLogLog()->setInternalDebugging(true);
							 | 
						|
								        Logger logger = Logger::getInstance(LOG4CPLUS_TEXT("main"));
							 | 
						|
								        Logger::getRoot().setLogLevel(INFO_LOG_LEVEL);
							 | 
						|
								        LogLevel ll = logger.getLogLevel();
							 | 
						|
								        tcout << "main Priority: " << getLogLevelManager().toString(ll) << endl;
							 | 
						|
								
							 | 
						|
								        helpers::SharedObjectPtr<Appender> append_1(new ConsoleAppender());
							 | 
						|
								        append_1->setLayout( std::auto_ptr<Layout>(new log4cplus::TTCCLayout()) );
							 | 
						|
								        Logger::getRoot().addAppender(append_1);
							 | 
						|
								        append_1->setName(LOG4CPLUS_TEXT("cout"));
							 | 
						|
								
							 | 
						|
									    append_1 = 0;
							 | 
						|
								
							 | 
						|
								        log4cplus::helpers::SharedObjectPtr<TestThread> threads[NUM_THREADS];
							 | 
						|
								        int i = 0;
							 | 
						|
								        for(i=0; i<NUM_THREADS; ++i) {
							 | 
						|
								            tostringstream s;
							 | 
						|
								            s << "Thread-" << i;
							 | 
						|
								            threads[i] = new TestThread(s.str(), slowObject.get());
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        for(i=0; i<NUM_THREADS; ++i) {
							 | 
						|
								            threads[i]->start();
							 | 
						|
								        }
							 | 
						|
								        LOG4CPLUS_DEBUG(logger, "All Threads started...");
							 | 
						|
								
							 | 
						|
								        for(i=0; i<NUM_THREADS; ++i) {
							 | 
						|
								            while(threads[i]->isRunning()) {
							 | 
						|
								                sleep(0, 200 * MILLIS_TO_NANOS);
							 | 
						|
								            }
							 | 
						|
								        }
							 | 
						|
								        LOG4CPLUS_INFO(logger, "Exiting main()...");
							 | 
						|
								    }
							 | 
						|
								    catch(std::exception &e) {
							 | 
						|
								        LOG4CPLUS_FATAL(Logger::getRoot(), "main()- Exception occured: " << e.what());
							 | 
						|
								    }
							 | 
						|
								    catch(...) {
							 | 
						|
								        LOG4CPLUS_FATAL(Logger::getRoot(), "main()- Exception occured");
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    log4cplus::Logger::shutdown();
							 | 
						|
								    return 0;
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								void
							 | 
						|
								TestThread::run()
							 | 
						|
								{
							 | 
						|
								    try {
							 | 
						|
								        LOG4CPLUS_WARN(logger, name + LOG4CPLUS_TEXT(" TestThread.run()- Starting..."));
							 | 
						|
								        NDC& ndc = getNDC();
							 | 
						|
								        NDCContextCreator _first_ndc(name);
							 | 
						|
								        LOG4CPLUS_DEBUG(logger, "Entering Run()...");
							 | 
						|
								        for(int i=0; i<NUM_LOOPS; ++i) {
							 | 
						|
								            NDCContextCreator _ndc(LOG4CPLUS_TEXT("loop"));
							 | 
						|
								            slow->doSomething();
							 | 
						|
								        }
							 | 
						|
								        LOG4CPLUS_DEBUG(logger, "Exiting run()...");
							 | 
						|
								
							 | 
						|
								        ndc.remove();
							 | 
						|
								    }
							 | 
						|
								    catch(std::exception const & e) {
							 | 
						|
								        LOG4CPLUS_FATAL(logger, "TestThread.run()- Exception occurred: " << e.what());
							 | 
						|
								    }
							 | 
						|
								    catch(...) {
							 | 
						|
								        LOG4CPLUS_FATAL(logger, "TestThread.run()- Exception occurred!!");
							 | 
						|
								    }
							 | 
						|
								    LOG4CPLUS_WARN(logger, name << " TestThread.run()- Finished");
							 | 
						|
								} // end "run"
							 |