1##Library Header 2# 3# $Id: loggerAppender.tcl,v 1.4 2007/02/08 22:09:54 mic42 Exp $ 4# Copyright (c) 2005 Cisco Systems, Inc. 5# 6# Name: 7# ::logger::appender 8# 9# Purpose: 10# collection of appenders for tcllib logger 11# 12# Author: 13# Aamer Akhter / aakhter@cisco.com 14# 15# Support Alias: 16# aakhter@cisco.com 17# 18# Usage: 19# package require logger::appender 20# 21# Description: 22# set of logger templates 23# 24# Requirements: 25# package require logger 26# package require md5 27# 28# Variables: 29# namespace ::loggerExtension:: 30# id: CVS ID: keyword extraction 31# version: current version of package 32# packageDir: directory where package is located 33# log: instance log 34# 35# Notes: 36# 1. 37# 38# Keywords: 39# 40# 41# Category: 42# 43# 44# End of Header 45 46package require md5 47 48namespace eval ::logger::appender { 49 variable fgcolor 50 array set fgcolor { 51 red {31m} 52 red-bold {1;31m} 53 black {m} 54 blue {1m} 55 green {32m} 56 yellow {33m} 57 cyan {36m} 58 } 59 60 variable levelToColor 61 array set levelToColor { 62 debug cyan 63 info blue 64 notice black 65 warn red 66 error red 67 critical red-bold 68 alert red-bold 69 emergency red-bold 70 } 71} 72 73 74 75##Procedure Header 76# $Id: loggerAppender.tcl,v 1.4 2007/02/08 22:09:54 mic42 Exp $ 77# Copyright (c) 2005 Cisco Systems, Inc. 78# 79# Name: 80# ::logger::appender::console 81# 82# Purpose: 83# 84# 85# Synopsis: 86# ::logger::appender::console -level <level> -service <service> [options] 87# 88# Arguments: 89# -level <level> 90# name of level to fill in as 'priority' in log proc 91# -service <service> 92# name of service to fill in as 'category' in log proc 93# -appenderArgs <appenderArgs> 94# any additional args in list form 95# -conversionPattern <conversionPattern> 96# log pattern to use (see genLogProc) 97# -procName <procName> 98# explicitly set the proc name 99# -procNameVar <procNameVar> 100# name of variable to set in the calling context 101# variable has name of proc 102# 103# 104# Return Values: 105# a runnable command 106# 107# Description: 108# 109# 110# Examples: 111# 112# 113# Notes: 114# 1. 115# 116# End of Procedure Header 117 118 119proc ::logger::appender::console {args} { 120 set usage {console 121 ?-level level? 122 ?-service service? 123 ?-appenderArgs appenderArgs? 124 } 125 set bargs $args 126 set conversionPattern {\[%d\] \[%c\] \[%M\] \[%p\] %m} 127 while {[llength $args] > 1} { 128 set opt [lindex $args 0] 129 set args [lrange $args 1 end] 130 switch -exact -- $opt { 131 -level { set level [lindex $args 0] 132 set args [lrange $args 1 end] 133 } 134 -service { set service [lindex $args 0] 135 set args [lrange $args 1 end] 136 } 137 -appenderArgs { 138 set appenderArgs [lindex $args 0] 139 set args [lrange $args 1 end] 140 set args [concat $args $appenderArgs] 141 } 142 -conversionPattern { 143 set conversionPattern [lindex $args 0] 144 set args [lrange $args 1 end] 145 } 146 -procName { 147 set procName [lindex $args 0] 148 set args [lrange $args 1 end] 149 } 150 -procNameVar { 151 set procNameVar [lindex $args 0] 152 set args [lrange $args 1 end] 153 } 154 default { 155 return -code error [msgcat::mc "Unknown argument: \"%s\" :\nUsage:\ 156 %s" $opt $usage] 157 } 158 } 159 } 160 if {![info exists procName]} { 161 set procName [genProcName $bargs] 162 } 163 if {[info exists procNameVar]} { 164 upvar $procNameVar myProcNameVar 165 } 166 set procText \ 167 [ ::logger::utils::createLogProc \ 168 -procName $procName \ 169 -conversionPattern $conversionPattern \ 170 -category $service \ 171 -priority $level ] 172 set myProcNameVar $procName 173 return $procText 174} 175 176 177 178##Procedure Header 179# $Id: loggerAppender.tcl,v 1.4 2007/02/08 22:09:54 mic42 Exp $ 180# Copyright (c) 2005 Cisco Systems, Inc. 181# 182# Name: 183# ::logger::appender::colorConsole 184# 185# Purpose: 186# 187# 188# Synopsis: 189# ::logger::appender::console -level <level> -service <service> [options] 190# 191# Arguments: 192# -level <level> 193# name of level to fill in as 'priority' in log proc 194# -service <service> 195# name of service to fill in as 'category' in log proc 196# -appenderArgs <appenderArgs> 197# any additional args in list form 198# -conversionPattern <conversionPattern> 199# log pattern to use (see genLogProc) 200# -procName <procName> 201# explicitly set the proc name 202# -procNameVar <procNameVar> 203# name of variable to set in the calling context 204# variable has name of proc 205# 206# 207# Return Values: 208# a runnable command 209# 210# Description: 211# provides colorized logs 212# 213# Examples: 214# 215# 216# Notes: 217# 1. 218# 219# End of Procedure Header 220 221 222proc ::logger::appender::colorConsole {args} { 223 variable fgcolor 224 set usage {console 225 ?-level level? 226 ?-service service? 227 ?-appenderArgs appenderArgs? 228 } 229 set bargs $args 230 set conversionPattern {\[%d\] \[%c\] \[%M\] \[%p\] %m} 231 upvar 0 ::logger::appender::levelToColor colorMap 232 while {[llength $args] > 1} { 233 set opt [lindex $args 0] 234 set args [lrange $args 1 end] 235 switch -exact -- $opt { 236 -level { set level [lindex $args 0] 237 set args [lrange $args 1 end] 238 } 239 -service { set service [lindex $args 0] 240 set args [lrange $args 1 end] 241 } 242 -appenderArgs { 243 set appenderArgs [lindex $args 0] 244 set args [lrange $args 1 end] 245 set args [concat $args $appenderArgs] 246 } 247 -conversionPattern { 248 set conversionPattern [lindex $args 0] 249 set args [lrange $args 1 end] 250 } 251 -procName { 252 set procName [lindex $args 0] 253 set args [lrange $args 1 end] 254 } 255 -procNameVar { 256 set procNameVar [lindex $args 0] 257 set args [lrange $args 1 end] 258 } 259 default { 260 return -code error [msgcat::mc "Unknown argument: \"%s\" :\nUsage:\ 261 %s" $opt $usage] 262 } 263 } 264 } 265 if {![info exists procName]} { 266 set procName [genProcName $bargs] 267 } 268 upvar $procNameVar myProcNameVar 269 if {[info exists level]} { 270 #apply color 271 set colorCode $colorMap($level) 272 append newCPattern {\033\[} $fgcolor($colorCode) $conversionPattern {\033\[0m} 273 set conversionPattern $newCPattern 274 } 275 set procText \ 276 [ ::logger::utils::createLogProc \ 277 -procName $procName \ 278 -conversionPattern $conversionPattern \ 279 -category $service \ 280 -priority $level ] 281 set myProcNameVar $procName 282 return $procText 283} 284 285##Procedure Header 286# $Id: loggerAppender.tcl,v 1.4 2007/02/08 22:09:54 mic42 Exp $ 287# Copyright (c) 2005 Cisco Systems, Inc. 288# 289# Name: 290# ::logger::appender::fileAppend 291# 292# Purpose: 293# 294# 295# Synopsis: 296# ::logger::appender::fileAppend -level <level> -service <service> -outputChannel <channel> [options] 297# 298# Arguments: 299# -level <level> 300# name of level to fill in as 'priority' in log proc 301# -service <service> 302# name of service to fill in as 'category' in log proc 303# -appenderArgs <appenderArgs> 304# any additional args in list form 305# -conversionPattern <conversionPattern> 306# log pattern to use (see genLogProc) 307# -procName <procName> 308# explicitly set the proc name 309# -procNameVar <procNameVar> 310# name of variable to set in the calling context 311# variable has name of proc 312# -outputChannel <channel> 313# name of output channel (eg stdout, file handle) 314# 315# 316# Return Values: 317# a runnable command 318# 319# Description: 320# 321# 322# Examples: 323# 324# 325# Notes: 326# 1. 327# 328# End of Procedure Header 329 330 331proc ::logger::appender::fileAppend {args} { 332 set usage {console 333 ?-level level? 334 ?-service service? 335 ?-outputChannel channel? 336 ?-appenderArgs appenderArgs? 337 } 338 set bargs $args 339 set conversionPattern {\[%d\] \[%c\] \[%M\] \[%p\] %m} 340 while {[llength $args] > 1} { 341 set opt [lindex $args 0] 342 set args [lrange $args 1 end] 343 switch -exact -- $opt { 344 -level { set level [lindex $args 0] 345 set args [lrange $args 1 end] 346 } 347 -service { set service [lindex $args 0] 348 set args [lrange $args 1 end] 349 } 350 -appenderArgs { 351 set appenderArgs [lindex $args 0] 352 set args [lrange $args 1 end] 353 set args [concat $args $appenderArgs] 354 } 355 -conversionPattern { 356 set conversionPattern [lindex $args 0] 357 set args [lrange $args 1 end] 358 } 359 -procName { 360 set procName [lindex $args 0] 361 set args [lrange $args 1 end] 362 } 363 -procNameVar { 364 set procNameVar [lindex $args 0] 365 set args [lrange $args 1 end] 366 } 367 -outputChannel { 368 set outputChannel [lindex $args 0] 369 set args [lrange $args 1 end] 370 } 371 default { 372 return -code error [msgcat::mc "Unknown argument: \"%s\" :\nUsage:\ 373 %s" $opt $usage] 374 } 375 } 376 } 377 if {![info exists procName]} { 378 set procName [genProcName $bargs] 379 } 380 if {[info exists procNameVar]} { 381 upvar $procNameVar myProcNameVar 382 } 383 set procText \ 384 [ ::logger::utils::createLogProc \ 385 -procName $procName \ 386 -conversionPattern $conversionPattern \ 387 -category $service \ 388 -outputChannel $outputChannel \ 389 -priority $level ] 390 set myProcNameVar $procName 391 return $procText 392} 393 394 395 396 397##Internal Procedure Header 398# $Id: loggerAppender.tcl,v 1.4 2007/02/08 22:09:54 mic42 Exp $ 399# Copyright (c) 2005 Cisco Systems, Inc. 400# 401# Name: 402# ::logger::appender::genProcName 403# 404# Purpose: 405# 406# 407# Synopsis: 408# ::logger::appender::genProcName <args> 409# 410# Arguments: 411# <formatString> 412# string composed of formatting chars (see description) 413# 414# 415# Return Values: 416# a runnable command 417# 418# Description: 419# 420# 421# Examples: 422# ::loggerExtension::new param1 423# ::loggerExtension::new param2 424# ::loggerExtension::new param3 <option1> 425# 426# 427# Sample Input: 428# (Optional) Sample of input to the proc provided by its argument values. 429# 430# Sample Output: 431# (Optional) For procs that output to files, provide 432# sample of format of output produced. 433# Notes: 434# 1. 435# 436# End of Procedure Header 437 438 439proc ::logger::appender::genProcName {args} { 440 set name [md5::md5 -hex $args] 441 return "::logger::appender::logProc-$name" 442} 443 444 445package provide logger::appender 1.3 446 447# ;;; Local Variables: *** 448# ;;; mode: tcl *** 449# ;;; End: *** 450