⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 logmodule.cpp

📁 用c++编写http server的源码库,对socket等网络处理的代码可迅速转为己用.
💻 CPP
字号:
// -----------------------------------------------------------------// libpion: a C++ framework for building lightweight HTTP interfaces// -----------------------------------------------------------------// Copyright (C) 2007 Atomic Labs, Inc.  (http://www.atomiclabs.com)//// Distributed under the Boost Software License, Version 1.0.// See accompanying file COPYING or copy at http://www.boost.org/LICENSE_1_0.txt//#include "LogModule.hpp"#include <libpion/HTTPResponse.hpp>#if defined(PION_HAVE_LOG4CXX)	#include <log4cxx/spi/loggingevent.h>	#include <boost/lexical_cast.hpp>#elif defined(PION_HAVE_LOG4CPLUS)	#include <log4cplus/spi/loggingevent.h>	#include <boost/lexical_cast.hpp>#elif defined(PION_HAVE_LOG4CPP)	#include <log4cpp/BasicLayout.hh>#endifusing namespace pion;// static members of LogModuleAppenderconst unsigned int		LogModuleAppender::DEFAULT_MAX_EVENTS = 25;// LogModuleAppender member functions#if defined(PION_HAVE_LOG4CPP)LogModuleAppender::LogModuleAppender(void)	: log4cpp::AppenderSkeleton("LogModuleAppender"),	m_max_events(DEFAULT_MAX_EVENTS), m_num_events(0),	m_layout_ptr(new log4cpp::BasicLayout())	{}#elseLogModuleAppender::LogModuleAppender(void)	: m_max_events(DEFAULT_MAX_EVENTS), m_num_events(0)	{}#endif#if defined(PION_HAVE_LOG4CXX)void LogModuleAppender::append(const log4cxx::spi::LoggingEventPtr& event){	// custom layouts is not supported for log4cxx library	std::string formatted_string(boost::lexical_cast<std::string>(event->getTimeStamp()));	formatted_string += ' ';	formatted_string += event->getLevel()->toString();	formatted_string += ' ';	formatted_string += event->getLoggerName();	formatted_string += " - ";	formatted_string += event->getRenderedMessage();	formatted_string += '\n';	addLogString(formatted_string);}#elif defined(PION_HAVE_LOG4CPLUS)void LogModuleAppender::append(const log4cplus::spi::InternalLoggingEvent& event){	// custom layouts is not supported for log4cplus library	std::string formatted_string(boost::lexical_cast<std::string>(event.getTimestamp().sec()));	formatted_string += ' ';	formatted_string += m_log_level_manager.toString(event.getLogLevel());	formatted_string += ' ';	formatted_string += event.getLoggerName();	formatted_string += " - ";	formatted_string += event.getMessage();	formatted_string += '\n';	addLogString(formatted_string);}#elif defined(PION_HAVE_LOG4CPP)void LogModuleAppender::_append(const log4cpp::LoggingEvent& event){	std::string formatted_string(m_layout_ptr->format(event));	addLogString(formatted_string);}#endifvoid LogModuleAppender::addLogString(const std::string& log_string){	boost::mutex::scoped_lock log_lock(m_log_mutex);	m_log_events.push_back(log_string);	++m_num_events;	while (m_num_events > m_max_events) {		m_log_events.erase(m_log_events.begin());		--m_num_events;	}}void LogModuleAppender::writeLogEvents(pion::HTTPResponsePtr& response){#if defined(PION_HAVE_LOG4CXX) || defined(PION_HAVE_LOG4CPLUS) || defined(PION_HAVE_LOG4CPP)	boost::mutex::scoped_lock log_lock(m_log_mutex);	for (std::list<std::string>::const_iterator i = m_log_events.begin();		 i != m_log_events.end(); ++i)	{		response << *i;	}#else	response << "Logging is disabled." << HTTPTypes::STRING_CRLF;#endif}// LogModule member functionsLogModule::LogModule(void)	: m_log_appender_ptr(new LogModuleAppender()){#if defined(PION_HAVE_LOG4CXX)	m_log_appender_ptr->setName("LogModuleAppender");	log4cxx::Logger::getRootLogger()->addAppender(m_log_appender_ptr);#elif defined(PION_HAVE_LOG4CPLUS)	m_log_appender_ptr->setName("LogModuleAppender");	log4cplus::Logger::getRoot().addAppender(m_log_appender_ptr);#elif defined(PION_HAVE_LOG4CPP)	log4cpp::Category::getRoot().addAppender(m_log_appender_ptr);#endif}LogModule::~LogModule(){#if defined(PION_HAVE_LOG4CXX)	// removeAppender() also deletes the object	log4cxx::Logger::getRootLogger()->removeAppender(m_log_appender_ptr);#elif defined(PION_HAVE_LOG4CPLUS)	// removeAppender() also deletes the object	log4cplus::Logger::getRoot().removeAppender("LogModuleAppender");#elif defined(PION_HAVE_LOG4CPP)	// removeAppender() also deletes the object	log4cpp::Category::getRoot().removeAppender(m_log_appender_ptr);#else	delete m_log_appender_ptr;#endif}/// handles requests for LogModulebool LogModule::handleRequest(HTTPRequestPtr& request, TCPConnectionPtr& tcp_conn){	// Set Content-type to "text/plain" (plain ascii text)	HTTPResponsePtr response(HTTPResponse::create());	response->setContentType(HTTPTypes::CONTENT_TYPE_TEXT);	getLogAppender().writeLogEvents(response);	response->send(tcp_conn);	return true;}/// creates new LogModule objectsextern "C" LogModule *pion_create_LogModule(void){	return new LogModule();}/// destroys LogModule objectsextern "C" void pion_destroy_LogModule(LogModule *module_ptr){	delete module_ptr;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -