source: tol/tolsh/tolsh.vfs/lib/tlogger/tlogger.tcl

devel
Last change on this file was 6d7779d, checked in by Jorge Pérez <josp.jorge@…>, 18 years ago

initial import

git-svn-id: ​https://www.tol-project.org/svn/tolp/trunk@1 be4846ae-f051-483a-831f-b64e7d08527f

  • Property mode set to 100644
File size: 2.1 KB
Line 
1package provide tlogger 0.5
2
3namespace eval ::tlogger {
4  variable services [list]
5  variable data
6
7  array set data {
8    logfile ""
9    channel stdout
10    level notice
11    levels { debug info notice warn error critical alert emergency }
12  }
13  set data(lvidx) [lsearch $data(levels) $data(level)]
14}
15
16proc ::level_str { level } {
17  string toupper $level
18}
19
20proc ::tlogger::init { svc {logfile ""}} {
21
22  variable services
23  variable data
24  upvar \#0 ::tlogger::data_${svc} mydata
25
26  array set mydata [array get data]
27  if {[lsearch $services $svc]==-1} {
28    lappend services $svc
29  }
30
31  set logfile [file normalize $logfile]
32  if {$mydata(logfile) ne $logfile} {
33    if {$mydata(channel) ne "stdout"} {
34      catch {
35        close $mydata(channel)
36      }
37    }
38    set mydata(logfile) $logfile
39    if {$logfile eq ""} {
40      set mydata(channel) "stdout"
41    } else {
42      if {[catch {
43        open $logfile {WRONLY CREAT APPEND}
44      } result]} {
45        puts "::tlogger::init : $result"
46      } else {
47        set mydata(channel) $result
48      }
49    }
50  }
51}
52
53proc ::tlogger::close { svc } {
54
55  upvar \#0 ::tlogger::data_${svc} mydata
56
57  flush $mydata(channel)
58  if {$mydata(channel) ne "stdout"} {
59    catch {
60      close $mydata(channel)
61    }
62  }
63  array unset mydata
64}
65
66proc ::tlogger::apache_time { } {
67  # APACHE
68  # Tue Nov 28 11:14:04 2006
69  clock format [clock seconds] -format "%a %b %d %H:%M:%S %Y"
70}
71
72proc ::tlogger::level { svc {level ""} } {
73
74  upvar \#0 ::tlogger::data_${svc} mydata
75
76  if {$level eq ""} {
77    set mydata(level)
78  } else {
79    set lvidx [lsearch $mydata(levels) $level]
80    if {$lvidx==-1} {
81      return ""
82    } else {
83      set cur $mydata(level)
84      set mydata(level) $level
85      set mydata(lvidx) $lvidx
86      set cur
87    }
88  }
89}
90
91proc ::tlogger::log { svc level msg } {
92
93  variable services
94
95  if {[lsearch $services $svc]!=-1} {
96    upvar \#0 ::tlogger::data_${svc} mydata
97   
98    set lvidx [lsearch $mydata(levels) $level]
99    if {$lvidx >= $mydata(lvidx)} {
100      puts $mydata(channel) "[apache_time], $svc\[[pid]\], [level_str $level], $msg"
101      flush $mydata(channel)
102    }
103  }
104}
Note: See TracBrowser for help on using the repository browser.