Revision: | 1.7 |
Committed: | Tue May 15 09:09:14 2007 UTC (17 years, 11 months ago) by slacapra |
Content type: | text/x-python |
Branch: | MAIN |
CVS Tags: | CRAB_2_6_0_pre2, CRAB_2_6_0_pre1, CRAB_2_5_1, CRAB_2_5_1_pre4, CRAB_2_5_1_pre3, CRAB_2_5_1_pre2, CRAB_2_5_1_pre1, CRAB_2_5_0, CRAB_2_5_0_pre7, CRAB_2_5_0_pre6, CRAB_2_5_0_pre5, CRAB_2_5_0_pre4, CRAB_2_5_0_pre3, CRAB_2_5_0_pre2, CRAB_2_5_0_pre1, CRAB_2_4_4, CRAB_2_4_4_pre6, CRAB_2_4_4_pre5, CRAB_2_4_4_pre4, CRAB_2_4_4_pre3, CRAB_2_4_4_pre2, CRAB_2_4_4_pre1, CRAB_2_4_3, CRAB_2_4_3_pre8, CRAB_2_4_3_pre7, CRAB_2_4_3_pre6, CRAB_2_4_3_pre5, CRAB_2_4_3_pre3, CRAB_2_4_3_pre2, CRAB_2_4_3_pre1, CRAB_2_4_2, CRAB_2_4_2_pre3, CRAB_2_4_2_pre2, CRAB_2_4_2_pre1, CRAB_2_4_1, CRAB_2_4_1_pre4, CRAB_2_4_1_pre3, CRAB_2_4_1_pre2, CRAB_2_4_1_pre1, CRAB_2_4_0_Tutorial, CRAB_2_4_0_Tutorial_pre1, CRAB_2_4_0, CRAB_2_4_0_pre9, CRAB_2_4_0_pre8, CRAB_2_4_0_pre7, CRAB_2_4_0_pre6, CRAB_2_4_0_pre5, CRAB_2_4_0_pre4, CRAB_2_4_0_pre3, CRAB_2_4_0_pre2, CRAB_2_4_0_pre1, CRAB_DLS_PHED1, CRAB_DLS_PHED, CRAB_2_3_2_Fnal, CRAB_2_3_2, CRAB_2_3_2_pre7, CRAB_2_3_2_pre5, CRAB_2_3_2_pre4, CRAB_2_3_2_pre3, CRAB_2_3_2_pre2, CRAB_2_3_2_pre1, CRAB_2_4_0_test, CRAB_2_3_1, CRAB_2_3_1_pre6, CRAB_2_3_1_pre5, CRAB_2_3_1_pre4, CRAB_2_3_1_pre3, CRAB_2_3_1_pre2, CRAB_2_3_1_pre1, CRAB_2_3_0, CRAB_2_3_0_pre6, CRAB_2_3_0_pre1, CRAB_2_2_2_pre5, CRAB_2_2_2_pre4, CRAB_2_2_2_pre3, CRAB_2_2_2_pre2, CRAB_2_2_2_pre1, CRAB_2_2_1, CRAB_2_2_1_pre6, CRAB_2_2_1_pre5, CRAB_2_2_1_pre4, PRODCOMMON_0_10_7_testCS2, CRAB_2_2_1_pre3, CRAB_2_2_1_pre2, CRAB_2_2_1_pre1, CRAB_2_2_0, CRAB_2_2_0_pre21, CRAB_2_2_0_pre19, CRAB_2_2_0_pre18, CRAB_2_2_0_pre17, CRAB_2_2_0_pre16, CRAB_2_2_0_pre15, CRAB_2_2_0_pre13, CRAB_2_2_0_pre12, CRAB_2_2_0_pre11, CRAB_2_2_0_pre10, bp_osg_bdii, CRAB_2_2_0_pre9, CRAB_2_2_0_pre8, CRAB_2_2_0_pre7, CRAB_2_1_2, CRAB_2_2_0_pre5, CRAB_2_1_2_pre2, CRAB_2_1_2_pre1, CRAB_2_2_0_pre4, CRAB_2_2_0_pre2, CRAB_2_1_1, CRAB_2_1_1_pre3, CRAB_2_2_0_pre1, CRAB_2_1_1_pre1, CRAB_2_1_0, CRAB_2_1_0_pre6, CRAB_2_1_0_pre5, CRAB_2_1_0_pre4, CRAB_2_1_0_pre3, CRAB_2_1_0_pre2, CRAB_2_1_0_pre1, CRAB_2_0_4, CRAB_2_0_4_pre2, CRAB_2_0_4_pre1, CRAB_2_0_3, CRAB_2_0_3_pre1, CRAB_2_0_2, CRAB_2_0_2_pre6, CRAB_2_0_2_pre5, CRAB_2_0_2_pre4, CRAB_2_0_2_pre3, CRAB_1_5_4_SLC3, CRAB_1_5_4_SLC3_pre4, CRAB_2_0_2_pre2, CRAB_2_0_2_pre1, CRAB_1_5_4_SLC3_pre3, CRAB_2_0_1, CRAB_1_5_4_SLC3_pre2, CRAB_2_0_1_pre1, CRAB_1_5_4_SLC3_pre1, CRAB_2_0_0, CRAB_2_0_0_pre10, CRAB_2_0_0_pre9, CRAB_1_5_4, CRAB_1_5_4_pre2, CRAB_1_5_4_pre1, CRAB_2_0_0_pre7, CRAB_2_0_0_pre6, CRAB_1_5_3, CRAB_1_5_3_pre5, CRAB_1_5_3_pre4, CRAB_2_0_0_pre5, CRAB_1_5_3_pre3, configure, CRAB_2_0_0_pre4, CRAB_1_5_3_pre2, CRAB_1_5_3_pre1, CRAB_2_0_0_pre3, CRAB_1_5_2, CRAB_2_0_0_pre2, CRAB_2_0_0_pre1, CRAB_1_5_1, CRAB_1_5_1_pre4, CRAB_1_5_1_pre3, CRAB_1_5_1_pre2 |
Branch point for: | AnaDataSet, CRAB_2_3_0_br, osg_bdii, CRAB_2_1_2_br, CRAB_2_1_1_pre2, CRAB_1_5_4_SLC3_pre4_br, CRAB_1_5_4_SLC3_start |
Changes since 1.6: | +0 -1 lines |
Log Message: | fix double free problem in -clean: need boss >= BOSS_4_3_3-sl3-sl4-pre2. Cleaner is now an Actor |
# | Content |
---|---|
1 | import string |
2 | from crab_exceptions import * |
3 | from WorkSpace import WorkSpace |
4 | from threading import RLock |
5 | import common |
6 | |
7 | class Logger : |
8 | |
9 | #_instance = None |
10 | |
11 | #def getInstance(): |
12 | # if not Logger._instance : |
13 | # Logger._instance = Logger() |
14 | # return Logger._instance |
15 | |
16 | #getInstance = staticmethod(getInstance) |
17 | |
18 | #def hasInstance(): |
19 | # return Logger._instance |
20 | |
21 | #hasInstance = staticmethod(hasInstance) |
22 | |
23 | def __init__(self): |
24 | #if Logger._instance: |
25 | # raise CrabException, 'Logger already exists.' |
26 | |
27 | self.lock = RLock() |
28 | self.debug_level = 0 |
29 | self.flag_quiet = 0 |
30 | self.prog_name = common.prog_name |
31 | log_dir = common.work_space.logDir() |
32 | self.log_fname = log_dir+self.prog_name+'.log' |
33 | self.log_file = open(self.log_fname, 'a') |
34 | self.log_file.write('\n-------------------------------------------\n') |
35 | |
36 | #Logger._instance = self |
37 | return |
38 | |
39 | def __del__(self): |
40 | if not self.flag_quiet: |
41 | print self.prog_name+'. Log-file is '+self.log_fname |
42 | return |
43 | |
44 | def close(self): |
45 | self.log_file.close() |
46 | return |
47 | |
48 | def get(self): |
49 | """ |
50 | Returns list of lines in the log-file. |
51 | """ |
52 | logf = open(self.log_fname, 'r') |
53 | lines = logf.readlines() |
54 | logf.close() |
55 | return lines |
56 | |
57 | def quiet(self, flag): |
58 | self.flag_quiet = flag |
59 | return |
60 | |
61 | def flush(self): |
62 | self.log_file.flush() |
63 | return |
64 | |
65 | def write(self, msg): |
66 | """ |
67 | Stores the given message into log-file. |
68 | """ |
69 | self.lock.acquire() |
70 | self.log_file.write(msg+'\n') |
71 | self.lock.release() |
72 | return |
73 | |
74 | def message(self, msg): |
75 | """ |
76 | Prints the given message on a screen and stores it into log-file. |
77 | """ |
78 | if len(msg) == 0: return |
79 | self.lock.acquire() |
80 | |
81 | # print whitespace first |
82 | for i in range(len(msg)): |
83 | if msg[i] in string.whitespace: |
84 | if not self.flag_quiet: print msg[i], |
85 | self.log_file.write(msg[i]) |
86 | else: break |
87 | pass |
88 | |
89 | # print the rest of the message prefixing with the program name |
90 | msg0 = msg[i:] |
91 | if not self.flag_quiet: print self.prog_name+'. '+msg0 |
92 | self.log_file.write(msg0+'\n') |
93 | self.log_file.flush() |
94 | self.lock.release() |
95 | return |
96 | |
97 | def debugLevel(self): |
98 | return self.debug_level |
99 | |
100 | def setDebugLevel(self, level): |
101 | self.debug_level = level |
102 | return |
103 | |
104 | def debug(self, level, msg): |
105 | self.lock.acquire() |
106 | if level <= self.debug_level: self.message(msg) |
107 | self.lock.release() |
108 | return |
109 |