Subversion Repositories HomeAutomation

Rev

Rev 1024 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | SVN | RSS feed

/***************************************************************************
 *   Copyright (C) January 10, 2009 by Mattias Runge                             *
 *   mattias@runge.se                                                      *
 *   logger.cpp                                            *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/

#include "logger.h"

Logger* Logger::myInstance = NULL;

Logger& Logger::getInstance()
{
    if (myInstance == NULL)
    {
        myInstance = new Logger();
    }

    return *myInstance;
}

void Logger::deleteInstance()
{
    if (myInstance != NULL)
    {
        delete myInstance;
        myInstance = NULL;
    }
}

Logger::Logger()
{
    openlog("Atom", LOG_ODELAY, LOG_DAEMON);
}

Logger::~Logger()
{
    if (myLogfile.is_open())
    {
        myLogfile << "\n\n";
        myLogfile.flush();
        myLogfile.close();
    }

    closelog();
}

bool Logger::open(string filename)
{
    myLogfile.open(filename.c_str(), ios::app);

    if (myLogfile.is_open())
    {
        myLogfile.close();
        return false;
    }

    return true;
}

void Logger::addToSyslog(string message)
{
    mySyslogMutex.lock();
    syslog(LOG_ODELAY, message.c_str());
    mySyslogMutex.unlock();
    add(message);
}

void Logger::add(string message)
{
    addRaw(formatMessage(message));
}

void Logger::addRaw(string message)
{
    cout << message;

    myMutex.lock();
    if (myLogfile.is_open())
    {
        myLogfile << message;
        myLogfile.flush();
    }

    myMutex.unlock();
}

string Logger::formatMessage(string message)
{
    if (message != "\n")
    {
        return "[" + niceTime() + "] " + message;
    }

    return message;
}