summaryrefslogtreecommitdiff
path: root/orkbasecxx/LogManager.cpp
blob: f0584293d8a361b3e8f5e1a9334a79adf30f76e0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/*
 * Oreka -- A media capture and retrieval platform
 * 
 * Copyright (C) 2005, orecx LLC
 *
 * http://www.orecx.com
 *
 * This program is free software, distributed under the terms of
 * the GNU General Public License.
 * Please refer to http://www.gnu.org/copyleft/gpl.html
 *
 */

#define _WINSOCKAPI_		// prevents the inclusion of winsock.h

#include "ace/OS_NS_dirent.h"
#include "LogManager.h"
#include <log4cxx/propertyconfigurator.h>
#include <log4cxx/basicconfigurator.h>
#include <log4cxx/logmanager.h>

OrkLogManager OrkLogManager::m_orkLogManager;

OrkLogManager* OrkLogManager::Instance()
{
	return &m_orkLogManager;
}

void OrkLogManager::Initialize()
{
	BasicConfigurator::configure();

	char* logCfgFilename = NULL;
        char* cfgEnvPath = "";
        int cfgAlloc = 0;

        cfgEnvPath = ACE_OS::getenv("ORKAUDIO_CONFIG_PATH");
        if(cfgEnvPath) {
                ACE_DIR* dir = ACE_OS::opendir(cfgEnvPath);
                if(dir) {
                        int len = 0;

                        ACE_OS::closedir(dir);
                        len = strlen(cfgEnvPath)+1+strlen("logging.properties")+1;
                        logCfgFilename = (char*)malloc(len);

                        if(logCfgFilename) {
                                cfgAlloc = 1;
								ACE_OS::snprintf(logCfgFilename, len, "%s/%s", cfgEnvPath, "logging.properties");
                        }
                }
        }

	if(!logCfgFilename) {
		FILE* file = ACE_OS::fopen("logging.properties", "r");
		if(file)
		{
			// logging.properties exists in the current directory
			logCfgFilename = (char*)"logging.properties";
			fclose(file);
		}
		else
		{
			// logging.properties could not be found in the current
			// directory, try to find it in system configuration directory
			logCfgFilename = (char*)"/etc/orkaudio/logging.properties";
		}
	}

	// If this one fails, the above default configuration stays valid
	PropertyConfigurator::configure(logCfgFilename);

	// XXX should we free this here?
	if(cfgAlloc) {
		free(logCfgFilename);
	}

	rootLog  = Logger::getLogger("root");
	topLog = Logger::getLogger("top");
	immediateProcessingLog = Logger::getLogger("immediateProcessing");
	batchProcessingLog = Logger::getLogger("batchProcessing");
	tapeFileNamingLog = Logger::getLogger("tapeFileNamingLog");
	portLog =  Logger::getLogger("port");
	fileLog = Logger::getLogger("file");
	reportingLog = Logger::getLogger("reporting");
	configLog = Logger::getLogger("config");
	tapelistLog = Logger::getLogger("tapelist");
	tapeLog = Logger::getLogger("tape");
	clientLog = Logger::getLogger("orkclient");
}

void OrkLogManager::Shutdown()
{
	log4cxx::LogManager::shutdown();
}