1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-06 12:58:18 +03:00

Feature #1658: Add SysLogResource class and refactor

This commit is contained in:
Jaime Melis 2013-01-31 17:27:21 +01:00
parent 2e487cdbbc
commit 32f8098f8b
3 changed files with 133 additions and 24 deletions

View File

@ -20,6 +20,8 @@
#include <string>
#include <fstream>
#include "PoolObjectSQL.h"
#include "log4cpp/Priority.hh"
using namespace std;
@ -139,7 +141,6 @@ public:
const char * message);
};
/* -------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------- */
@ -149,16 +150,51 @@ public:
class SysLog : public Log
{
public:
SysLog(const MessageType level = WARNING);
SysLog(const MessageType level = WARNING):Log(level){};
~SysLog();
~SysLog() {};
virtual void log(
const char * module,
const MessageType type,
const char * message);
static void init(
Log::MessageType clevel,
string name,
string label);
static log4cpp::Priority::PriorityLevel get_priority_level(
const MessageType level);
};
/**
* Send log messages to syslog per resource
*/
class SysLogResource : public SysLog
{
public:
SysLogResource(
int oid,
const PoolObjectSQL::ObjectType obj_type,
const MessageType clevel);
~SysLogResource(){};
void log(
const char * module,
const MessageType type,
const char * message);
protected:
log4cpp::Priority::PriorityLevel get_priority_level(const MessageType level);
static void init(
Log::MessageType clevel,
string name,
string label);
static string name;
private:
string obj_label;
};
#endif /* _LOG_H_ */

View File

@ -18,8 +18,19 @@
#define _NEBULA_LOG_H_
#include "Log.h"
#include <sstream>
#include <syslog.h>
//#include "log4cpp/Category.hh"
//#include "log4cpp/CategoryStream.hh"
//#include "log4cpp/Appender.hh"
//#include "log4cpp/SyslogAppender.hh"
//#include "log4cpp/Layout.hh"
//#include "log4cpp/SimpleLayout.hh"
//#include "log4cpp/Priority.hh"
using namespace std;
/**
@ -61,7 +72,12 @@ public:
static void init_syslog_system(Log::MessageType clevel)
{
// Initialize the 'root' syslog logger
SysLog::init(clevel, "root", "OpenNebula");
NebulaLog::logger = new SysLog(clevel);
// Initialize the 'resource' syslog logger
SysLogResource::init(clevel, "resource", "OpenNebula");
};
static void finalize_log_system()

View File

@ -21,6 +21,7 @@
#include <stdexcept>
#include <sstream>
#include <iostream>
#include <syslog.h>
#include "log4cpp/Category.hh"
@ -154,24 +155,18 @@ void CerrLog::log(
/* -------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------- */
SysLog::SysLog(const MessageType level):Log(level) {
log4cpp::Appender *syslog_appender = new log4cpp::SyslogAppender(
"syslog", "OpenNebula", LOG_DAEMON);
void SysLog::init(
Log::MessageType clevel,
string name,
string label)
{
log4cpp::Appender *syslog_appender;
syslog_appender = new log4cpp::SyslogAppender(name,label,LOG_DAEMON);
syslog_appender->setLayout(new log4cpp::SimpleLayout());
log4cpp::Category& root = log4cpp::Category::getRoot();
root.setPriority(get_priority_level(level));
root.setPriority(SysLog::get_priority_level(clevel));
root.addAppender(syslog_appender);
}
/* -------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------- */
SysLog::~SysLog() {}
};
/* -------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------- */
@ -183,13 +178,17 @@ void SysLog::log(
{
log4cpp::Category& root = log4cpp::Category::getRoot();
root << get_priority_level(type) << "[" << module << "]"
<< "[" << error_names[type] << "]: "
<< message;
log4cpp::Priority::PriorityLevel level = get_priority_level(type);
root << level << "[" << module << "] "
<< message;
}
/* -------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------- */
log4cpp::Priority::PriorityLevel SysLog::get_priority_level(
const MessageType level)
const MessageType level)
{
log4cpp::Priority::PriorityLevel priority_level;
@ -220,3 +219,61 @@ log4cpp::Priority::PriorityLevel SysLog::get_priority_level(
return priority_level;
}
/* -------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------- */
string SysLogResource::name;
/* -------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------- */
void SysLogResource::init(
Log::MessageType clevel,
string name,
string label)
{
SysLogResource::name = name;
log4cpp::Appender *resource_appender;
resource_appender = new log4cpp::SyslogAppender(name,label,LOG_DAEMON);
resource_appender->setLayout(new log4cpp::SimpleLayout());
log4cpp::Category& res = log4cpp::Category::getInstance(name);
res.addAppender(resource_appender);
res.setPriority(SysLog::get_priority_level(clevel));
}
/* -------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------- */
SysLogResource::SysLogResource(
int oid,
const PoolObjectSQL::ObjectType obj_type,
const MessageType clevel = WARNING)
:SysLog(clevel)
{
ostringstream oss_label;
string obj_type_str = PoolObjectSQL::type_to_str(obj_type);
oss_label << "[" << obj_type_str << " " << oid << "]: ";
obj_label = oss_label.str();
};
/* -------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------- */
void SysLogResource::log(
const char * module,
const MessageType type,
const char * message)
{
log4cpp::Category& res = log4cpp::Category::getInstance(
SysLogResource::name);
log4cpp::Priority::PriorityLevel level = get_priority_level(type);
res << level << "[THISISAVM] "
<< message;
}