1 |
|
2 |
"""
|
3 |
* ApMon - Application Monitoring Tool
|
4 |
* Version: 2.0.4
|
5 |
*
|
6 |
* Copyright (C) 2005 California Institute of Technology
|
7 |
*
|
8 |
* Permission is hereby granted, free of charge, to use, copy and modify
|
9 |
* this software and its documentation (the "Software") for any
|
10 |
* purpose, provided that existing copyright notices are retained in
|
11 |
* all copies and that this notice is included verbatim in any distributions
|
12 |
* or substantial portions of the Software.
|
13 |
* This software is a part of the MonALISA framework (http://monalisa.cacr.caltech.edu).
|
14 |
* Users of the Software are asked to feed back problems, benefits,
|
15 |
* and/or suggestions about the software to the MonALISA Development Team
|
16 |
* (developers@monalisa.cern.ch). Support for this software - fixing of bugs,
|
17 |
* incorporation of new features - is done on a best effort basis. All bug
|
18 |
* fixes and enhancements will be made available under the same terms and
|
19 |
* conditions as the original software,
|
20 |
|
21 |
* IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY FOR
|
22 |
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
|
23 |
* OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY DERIVATIVES THEREOF,
|
24 |
* EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
25 |
|
26 |
* THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
|
27 |
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
|
28 |
* FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE IS
|
29 |
* PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO
|
30 |
* OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
|
31 |
* MODIFICATIONS.
|
32 |
"""
|
33 |
|
34 |
import time
|
35 |
import threading
|
36 |
|
37 |
FATAL = 0 # When something very bad happened and we should quit
|
38 |
ERROR = 1 # Tipically when something important fails
|
39 |
WARNING = 2 # Intermediate logging level.
|
40 |
INFO = 3 # Intermediate logging level.
|
41 |
NOTICE = 4 # Logging level with detailed information.
|
42 |
DEBUG = 5 # Logging level for debugging
|
43 |
|
44 |
LEVELS = ['FATAL', 'ERROR', 'WARNING', 'INFO', 'NOTICE', 'DEBUG']
|
45 |
|
46 |
# Simple logging class
|
47 |
class Logger:
|
48 |
# Constructor
|
49 |
def __init__ (this, defaultLevel = INFO):
|
50 |
this.log_lock = threading.Lock();
|
51 |
this.logLevel = defaultLevel
|
52 |
|
53 |
# Print the given message if the level is more serious as the existing one
|
54 |
def log(this, level, message):
|
55 |
global LEVELS, FATAL, ERROR, WARNING, INFO, NOTICE, DEBUG
|
56 |
this.log_lock.acquire();
|
57 |
if(level <= this.logLevel):
|
58 |
print time.asctime() + ": ApMon["+LEVELS[level]+"]: "+message;
|
59 |
this.log_lock.release();
|
60 |
|
61 |
# Set the logging level
|
62 |
def setLogLevel(this, strLevel):
|
63 |
this.log_lock.acquire();
|
64 |
for l_idx in range(len(LEVELS)):
|
65 |
if strLevel == LEVELS[l_idx]:
|
66 |
this.logLevel = l_idx;
|
67 |
this.log_lock.release();
|
68 |
|