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.
118 lines
3.0 KiB
118 lines
3.0 KiB
// Module: LOG4CPLUS
|
|
// File: loggingserver.cxx
|
|
// Created: 5/2003
|
|
// Author: Tad E. Smith
|
|
//
|
|
//
|
|
// Copyright 2003-2010 Tad E. Smith
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#include <cstdlib>
|
|
#include <iostream>
|
|
#include <log4cplus/configurator.h>
|
|
#include <log4cplus/socketappender.h>
|
|
#include <log4cplus/helpers/socket.h>
|
|
#include <log4cplus/thread/threads.h>
|
|
#include <log4cplus/spi/loggingevent.h>
|
|
|
|
|
|
namespace loggingserver
|
|
{
|
|
|
|
class ClientThread : public log4cplus::thread::AbstractThread
|
|
{
|
|
public:
|
|
ClientThread(log4cplus::helpers::Socket clientsock)
|
|
: clientsock(clientsock)
|
|
{
|
|
std::cout << "Received a client connection!!!!" << std::endl;
|
|
}
|
|
|
|
~ClientThread()
|
|
{
|
|
std::cout << "Client connection closed." << std::endl;
|
|
}
|
|
|
|
virtual void run();
|
|
|
|
private:
|
|
log4cplus::helpers::Socket clientsock;
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int
|
|
main(int argc, char** argv)
|
|
{
|
|
if(argc < 3) {
|
|
std::cout << "Usage: port config_file" << std::endl;
|
|
return 1;
|
|
}
|
|
int port = std::atoi(argv[1]);
|
|
const log4cplus::tstring configFile = LOG4CPLUS_C_STR_TO_TSTRING(argv[2]);
|
|
|
|
log4cplus::PropertyConfigurator config(configFile);
|
|
config.configure();
|
|
|
|
log4cplus::helpers::ServerSocket serverSocket(port);
|
|
if (!serverSocket.isOpen()) {
|
|
std::cout << "Could not open server socket, maybe port "
|
|
<< port << " is already in use." << std::endl;
|
|
return 2;
|
|
}
|
|
|
|
while(1) {
|
|
loggingserver::ClientThread *thr =
|
|
new loggingserver::ClientThread(serverSocket.accept());
|
|
thr->start();
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// loggingserver::ClientThread implementation
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
void
|
|
loggingserver::ClientThread::run()
|
|
{
|
|
while(1) {
|
|
if(!clientsock.isOpen()) {
|
|
return;
|
|
}
|
|
log4cplus::helpers::SocketBuffer msgSizeBuffer(sizeof(unsigned int));
|
|
if(!clientsock.read(msgSizeBuffer)) {
|
|
return;
|
|
}
|
|
|
|
unsigned int msgSize = msgSizeBuffer.readInt();
|
|
|
|
log4cplus::helpers::SocketBuffer buffer(msgSize);
|
|
if(!clientsock.read(buffer)) {
|
|
return;
|
|
}
|
|
|
|
log4cplus::spi::InternalLoggingEvent event
|
|
= log4cplus::helpers::readFromBuffer(buffer);
|
|
log4cplus::Logger logger
|
|
= log4cplus::Logger::getInstance(event.getLoggerName());
|
|
logger.callAppenders(event);
|
|
}
|
|
}
|