Belle II Software  release-05-01-25
b2logging.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 
4 
9 
10 from basf2 import Path, process, logging, set_log_level, set_debug_level, \
11  LogConfig, LogLevel, LogInfo, B2DEBUG, B2INFO, B2WARNING
12 
13 # show default loglevel
14 print('Default loglevel:', logging.log_level)
15 
16 # change loglevel to show also debug messages
17 logging.log_level = LogLevel.DEBUG
18 # or alternatively:
19 set_log_level(LogLevel.DEBUG)
20 print('New loglevel: ', logging.log_level)
21 
22 # change debug level
23 logging.debug_level = 123
24 # or alternatively:
25 set_debug_level(123)
26 
27 # set specific LogConfig for pxd package:
28 # log level WARNING, debug level 0, abort on errors
29 pxd_logging = LogConfig(LogLevel.WARNING, 0)
30 pxd_logging.abort_level = LogLevel.ERROR
31 logging.set_package('pxd', pxd_logging)
32 
33 # set specific log options for svd package:
34 # debug level 10, print level, message, and file name for info messages
35 logging.package('svd').debug_level = 10
36 logging.package('svd').set_info(LogLevel.INFO, LogInfo.LEVEL | LogInfo.MESSAGE |
37  LogInfo.FILE)
38 
39 # show default loginfo for all levels
40 for (name, value) in LogLevel.names.items():
41  if name != 'default':
42  print('LogInfo for level %8s: %3d' % (name, logging.get_info(value)))
43 
44 # reset logging connections (default log connection to the console is deleted)
45 logging.reset()
46 # add logfile for output
47 logging.add_file('test.log')
48 # add colored console output
49 logging.add_console(True)
50 
51 # It is possible to send log messages from python to have consistent messages
52 # print some log messages
53 B2DEBUG(100, 'Debug Message')
54 B2INFO('Info Message')
55 B2WARNING('Warning Message')
56 # B2ERROR('Error Message')
57 
58 # Repeated messages (provided they originate from the same line) can be
59 # filtered. Note that this is not the default, you can enable this using
60 # a logging.reset() and logging.add_console(True), as done above.
61 for i in range(0, 42):
62  B2DEBUG(100, 'A repeated message!')
63 
64 B2INFO('Some other message')
65 
66 # next line will bail since the default abort-level is FATAL,
67 # so leaving it commented.
68 # B2FATAL('Fatal Message')
69 
70 # show number of log_messages per level
71 for (level, num) in logging.log_stats.items():
72  print('Messages for level %8s: %2d' % (level.name, num))
73 
74 main = Path()
75 eventinfosetter = main.add_module('EventInfoSetter')
76 # configure logging for the EventInfoSetter module:
77 # loglevel ERROR and info for ERROR message is file name and line number
78 eventinfosetter.logging.log_level = LogLevel.ERROR
79 eventinfosetter.logging.set_info(LogLevel.ERROR, LogInfo.FILE | LogInfo.LINE)
80 # or alternatively:
81 eventinfosetter.set_log_level(LogLevel.ERROR)
82 eventinfosetter.set_log_info(LogLevel.ERROR, LogInfo.FILE | LogInfo.LINE)
83 
84 # add time stamp to all INFO messages
85 currentInfo = logging.get_info(LogLevel.INFO)
86 logging.set_info(LogLevel.INFO, currentInfo | LogInfo.TIMESTAMP)
87 
88 # run some events to see time stamp
89 set_log_level(LogLevel.INFO)
90 eventinfosetter.param('evtNumList', [30])
91 main.add_module('EventInfoPrinter', logLevel=LogLevel.DEBUG)
92 process(main)