Browse Source

clean logging system

Bastien Sevajol 6 years ago
parent
commit
dd821ad6cf

+ 3 - 4
synergine2/core.py View File

@@ -6,7 +6,7 @@ from multiprocessing import Queue
6 6
 from synergine2.base import BaseObject
7 7
 from synergine2.config import Config
8 8
 from synergine2.cycle import CycleManager
9
-from synergine2.log import SynergineLogger
9
+from synergine2.log import get_logger
10 10
 from synergine2.simulation import Simulation
11 11
 from synergine2.terminals import TerminalManager
12 12
 from synergine2.terminals import Terminal
@@ -18,17 +18,16 @@ class Core(BaseObject):
18 18
     def __init__(
19 19
         self,
20 20
         config: Config,
21
-        logger: SynergineLogger,
22 21
         simulation: Simulation,
23 22
         cycle_manager: CycleManager,
24 23
         terminal_manager: TerminalManager=None,
25 24
         cycles_per_seconds: float=1.0,
26 25
     ):
27 26
         self.config = config
28
-        self.logger = logger
27
+        self.logger = get_logger('Core', config)
29 28
         self.simulation = simulation
30 29
         self.cycle_manager = cycle_manager
31
-        self.terminal_manager = terminal_manager or TerminalManager(config, logger, [])
30
+        self.terminal_manager = terminal_manager or TerminalManager(config, [])
32 31
         self._loop_delta = 1./cycles_per_seconds
33 32
         self._current_cycle_start_time = None
34 33
         self._continue = True

+ 2 - 3
synergine2/cycle.py View File

@@ -7,7 +7,7 @@ import time
7 7
 from synergine2.base import BaseObject
8 8
 from synergine2.config import Config
9 9
 from synergine2.exceptions import SynergineException
10
-from synergine2.log import SynergineLogger
10
+from synergine2.log import get_logger
11 11
 from synergine2.processing import ProcessManager
12 12
 from synergine2.share import shared
13 13
 from synergine2.simulation import Subject
@@ -28,13 +28,12 @@ class CycleManager(BaseObject):
28 28
     def __init__(
29 29
             self,
30 30
             config: Config,
31
-            logger: SynergineLogger,
32 31
             simulation: Simulation,
33 32
             process_manager: ProcessManager=None,
34 33
     ):
35 34
         # TODO: reproduire le mechanisme d'index de behaviour/etc pour simulation
36 35
         self.config = config
37
-        self.logger = logger
36
+        self.logger = get_logger('Cycle', config)
38 37
         self.simulation = simulation
39 38
         self.current_cycle = -1
40 39
         self.first_cycle = True

+ 16 - 2
synergine2/log.py View File

@@ -3,6 +3,8 @@ import logging
3 3
 import sys
4 4
 import typing
5 5
 
6
+from synergine2.config import Config
7
+
6 8
 STREAM_HANDLER_TAG = '__STREAM_HANDLER__'
7 9
 
8 10
 
@@ -25,7 +27,10 @@ class SynergineLogger(logging.getLoggerClass()):
25 27
         self.handlers.append(logging.StreamHandler(sys.stdout))
26 28
 
27 29
 
28
-def get_default_logger(name: str='synergine', level: int=logging.ERROR) -> SynergineLogger:
30
+def get_default_logger(
31
+    name: str='synergine',
32
+    level: int=logging.ERROR,
33
+) -> SynergineLogger:
29 34
     """
30 35
     WARNING: Set global logging Logger class to SynergineLogger
31 36
     """
@@ -33,9 +38,18 @@ def get_default_logger(name: str='synergine', level: int=logging.ERROR) -> Syner
33 38
     logger = logging.getLogger(name)
34 39
     logger = typing.cast(SynergineLogger, logger)
35 40
     handler = logging.StreamHandler(sys.stdout)
36
-    formatter = logging.Formatter('%(asctime)s|%(name)s|%(process)d|%(levelname)s: %(message)s')
41
+    formatter = logging.Formatter(
42
+        '%(asctime)s|%(name)s|%(process)d|%(levelname)s: %(message)s',
43
+    )
37 44
     handler.setFormatter(formatter)
38 45
     logger.addHandler(handler)
39 46
     logger.setLevel(level)
40 47
 
41 48
     return logger
49
+
50
+
51
+def get_logger(name: str, config: Config) -> SynergineLogger:
52
+    global_logging_level = config.resolve('global.logging_level', 'ERROR')
53
+    logger_level_str = config.resolve('global.logging.{}.level', global_logging_level)
54
+    logger_level = logging.getLevelName(logger_level_str)
55
+    return get_default_logger('synergine-{}'.format(name), logger_level)

+ 3 - 5
synergine2/terminals.py View File

@@ -11,7 +11,7 @@ from synergine2.base import BaseObject
11 11
 from synergine2.exceptions import SynergineException
12 12
 from synergine2.share import shared
13 13
 from synergine2.config import Config
14
-from synergine2.log import SynergineLogger
14
+from synergine2.log import get_logger
15 15
 from synergine2.simulation import Subject
16 16
 from synergine2.simulation import Event
17 17
 
@@ -71,11 +71,10 @@ class Terminal(BaseObject):
71 71
     def __init__(
72 72
         self,
73 73
         config: Config,
74
-        logger: SynergineLogger,
75 74
         asynchronous: bool=True,
76 75
     ):
77 76
         self.config = config
78
-        self.logger = logger
77
+        self.logger = get_logger(self.__class__.__name__, config)
79 78
         self._input_queue = None
80 79
         self._output_queue = None
81 80
         self._stop_required = False
@@ -180,11 +179,10 @@ class TerminalManager(BaseObject):
180 179
     def __init__(
181 180
         self,
182 181
         config: Config,
183
-        logger: SynergineLogger,
184 182
         terminals: [Terminal]
185 183
     ):
186 184
         self.config = config
187
-        self.logger = logger
185
+        self.logger = get_logger('TerminalManager', config)
188 186
         self.terminals = terminals
189 187
         self.outputs_queues = {}
190 188
         self.inputs_queues = {}

+ 3 - 10
synergine2_cocos2d/gui.py View File

@@ -13,7 +13,7 @@ from cocos import euclid
13 13
 from cocos.audio.pygame import mixer
14 14
 from cocos.layer import ScrollableLayer
15 15
 from synergine2.config import Config
16
-from synergine2.log import SynergineLogger
16
+from synergine2.log import get_logger
17 17
 from synergine2.terminals import Terminal
18 18
 from synergine2.terminals import TerminalPackage
19 19
 from synergine2_cocos2d.actor import Actor
@@ -162,7 +162,6 @@ class EditLayer(cocos.layer.Layer):
162 162
     def __init__(
163 163
         self,
164 164
         config: Config,
165
-        logger: SynergineLogger,
166 165
         layer_manager: LayerManager,
167 166
         grid_manager: GridManager,
168 167
         worldview,
@@ -181,7 +180,7 @@ class EditLayer(cocos.layer.Layer):
181 180
         super().__init__()
182 181
 
183 182
         self.config = config
184
-        self.logger = logger
183
+        self.logger = get_logger('EditLayer', config)
185 184
         self.layer_manager = layer_manager
186 185
         self.grid_manager = grid_manager
187 186
 
@@ -722,13 +721,12 @@ class Gui(object):
722 721
     def __init__(
723 722
             self,
724 723
             config: Config,
725
-            logger: SynergineLogger,
726 724
             terminal: Terminal,
727 725
             physics: Physics,
728 726
             read_queue_interval: float= 1/60.0,
729 727
     ):
730 728
         self.config = config
731
-        self.logger = logger
729
+        self.logger = get_logger('Gui', config)
732 730
         self.physics = physics
733 731
         self._read_queue_interval = read_queue_interval
734 732
         self.terminal = terminal
@@ -745,12 +743,10 @@ class Gui(object):
745 743
 
746 744
         self.interaction_manager = InteractionManager(
747 745
             config=self.config,
748
-            logger=self.logger,
749 746
             terminal=self.terminal,
750 747
         )
751 748
         self.layer_manager = self.layer_manager_class(
752 749
             self.config,
753
-            self.logger,
754 750
             middleware=self.get_layer_middleware(),
755 751
             interaction_manager=self.interaction_manager,
756 752
             gui=self,
@@ -796,7 +792,6 @@ class TMXGui(Gui):
796 792
     def __init__(
797 793
         self,
798 794
         config: Config,
799
-        logger: SynergineLogger,
800 795
         terminal: Terminal,
801 796
         physics: Physics,
802 797
         read_queue_interval: float = 1 / 60.0,
@@ -806,7 +801,6 @@ class TMXGui(Gui):
806 801
         self.map_dir_path = map_dir_path
807 802
         super(TMXGui, self).__init__(
808 803
             config,
809
-            logger,
810 804
             terminal,
811 805
             physics=physics,
812 806
             read_queue_interval=read_queue_interval,
@@ -816,7 +810,6 @@ class TMXGui(Gui):
816 810
     def get_layer_middleware(self) -> MapMiddleware:
817 811
         return TMXMiddleware(
818 812
             self.config,
819
-            self.logger,
820 813
             self.map_dir_path,
821 814
         )
822 815
 

+ 3 - 6
synergine2_cocos2d/interaction.py View File

@@ -2,7 +2,7 @@
2 2
 import typing
3 3
 
4 4
 from synergine2.config import Config
5
-from synergine2.log import SynergineLogger
5
+from synergine2.log import get_logger
6 6
 from synergine2.simulation import SimulationBehaviour
7 7
 from synergine2.terminals import Terminal
8 8
 from synergine2.terminals import TerminalPackage
@@ -17,11 +17,10 @@ class InteractionManager(object):
17 17
     def __init__(
18 18
         self,
19 19
         config: Config,
20
-        logger: SynergineLogger,
21 20
         terminal: Terminal,
22 21
     ) -> None:
23 22
         self.config = config
24
-        self.logger = logger
23
+        self.logger = get_logger(InteractionManager, config)
25 24
         self.terminal = terminal
26 25
         self.interactions = []
27 26
 
@@ -32,7 +31,6 @@ class InteractionManager(object):
32 31
     ) -> None:
33 32
         self.interactions.append(interaction_class(
34 33
             self.config,
35
-            self.logger,
36 34
             terminal=self.terminal,
37 35
             layer_manager=layer_manager,
38 36
         ))
@@ -50,12 +48,11 @@ class Interaction(object):
50 48
     def __init__(
51 49
         self,
52 50
         config: Config,
53
-        logger: SynergineLogger,
54 51
         terminal: Terminal,
55 52
         layer_manager: LayerManager,
56 53
     ) -> None:
57 54
         self.config = config
58
-        self.logger = logger
55
+        self.logger = get_logger(self.__class__.__name__, config)
59 56
         self.terminal = terminal
60 57
         self.layer_manager = layer_manager
61 58
 

+ 2 - 4
synergine2_cocos2d/layer.py View File

@@ -6,7 +6,7 @@ from pyglet.window import key
6 6
 import cocos
7 7
 
8 8
 from synergine2.config import Config
9
-from synergine2.log import SynergineLogger
9
+from synergine2.log import SynergineLogger, get_logger
10 10
 from synergine2_cocos2d.middleware import MapMiddleware
11 11
 
12 12
 if False:
@@ -64,13 +64,12 @@ class LayerManager(object):
64 64
     def __init__(
65 65
         self,
66 66
         config: Config,
67
-        logger: SynergineLogger,
68 67
         middleware: MapMiddleware,
69 68
         interaction_manager: 'InteractionManager',
70 69
         gui: 'Gui',
71 70
     ) -> None:
72 71
         self.config = config
73
-        self.logger = logger
72
+        self.logger = get_logger('LayerManager', config)
74 73
         self.middleware = middleware
75 74
         self.interaction_manager = interaction_manager
76 75
         self.gui = gui
@@ -117,7 +116,6 @@ class LayerManager(object):
117 116
         )
118 117
         self.edit_layer = self.edit_layer_class(
119 118
             self.config,
120
-            self.logger,
121 119
             self,
122 120
             self.grid_manager,
123 121
             self.main_layer,

+ 2 - 3
synergine2_cocos2d/middleware.py View File

@@ -3,18 +3,17 @@ import os
3 3
 
4 4
 import cocos
5 5
 from synergine2.config import Config
6
-from synergine2.log import SynergineLogger
6
+from synergine2.log import get_logger
7 7
 
8 8
 
9 9
 class MapMiddleware(object):
10 10
     def __init__(
11 11
         self,
12 12
         config: Config,
13
-        logger: SynergineLogger,
14 13
         map_dir_path: str,
15 14
     ) -> None:
16 15
         self.config = config
17
-        self.logger = logger
16
+        self.logger = get_logger(self.__class__.__name__, config)
18 17
         self.map_dir_path = map_dir_path
19 18
         self.tmx = None
20 19
 

+ 0 - 7
tests/test_cycle.py View File

@@ -71,7 +71,6 @@ class TestCycle(BaseTest):
71 71
     def test_subjects_cycle(self):
72 72
         shared.reset()
73 73
         config = Config({'core': {'use_x_cores': 2}})
74
-        logger = SynergineLogger(name='test')
75 74
 
76 75
         simulation = Simulation(config)
77 76
         subjects = MySubjects(simulation=simulation)
@@ -82,7 +81,6 @@ class TestCycle(BaseTest):
82 81
 
83 82
         cycle_manager = CycleManager(
84 83
             config=config,
85
-            logger=logger,
86 84
             simulation=simulation,
87 85
         )
88 86
 
@@ -96,7 +94,6 @@ class TestCycle(BaseTest):
96 94
     def test_new_subject(self):
97 95
         shared.reset()
98 96
         config = Config({'core': {'use_x_cores': 1}})
99
-        logger = SynergineLogger(name='test')
100 97
 
101 98
         simulation = Simulation(config)
102 99
         subjects = MySubjects(simulation=simulation)
@@ -107,7 +104,6 @@ class TestCycle(BaseTest):
107 104
 
108 105
         cycle_manager = CycleManager(
109 106
             config=config,
110
-            logger=logger,
111 107
             simulation=simulation,
112 108
         )
113 109
 
@@ -128,16 +124,13 @@ class TestCycle(BaseTest):
128 124
     def test_simulation_events(self):
129 125
         shared.reset()
130 126
         config = Config({'core': {'use_x_cores': 2}})
131
-        logger = SynergineLogger(name='test')
132 127
 
133 128
         simulation = MySimulation(config)
134
-
135 129
         subjects = MySubjects(simulation=simulation)
136 130
         simulation.subjects = subjects
137 131
 
138 132
         cycle_manager = CycleManager(
139 133
             config=config,
140
-            logger=logger,
141 134
             simulation=simulation,
142 135
         )
143 136
 

+ 0 - 17
tests/test_simulation.py View File

@@ -3,7 +3,6 @@ import time
3 3
 
4 4
 from synergine2.config import Config
5 5
 from synergine2.cycle import CycleManager
6
-from synergine2.log import SynergineLogger
7 6
 from synergine2.processing import ProcessManager
8 7
 from synergine2.share import shared
9 8
 from synergine2.simulation import Simulation
@@ -18,7 +17,6 @@ from tests import BaseTest
18 17
 from freezegun import freeze_time
19 18
 
20 19
 config = Config()
21
-logger = SynergineLogger('test')
22 20
 
23 21
 
24 22
 class MySubjectMechanism(SubjectMechanism):
@@ -99,7 +97,6 @@ class TestBehaviours(BaseTest):
99 97
 
100 98
         cycle_manager = CycleManager(
101 99
             config,
102
-            logger,
103 100
             simulation=simulation,
104 101
             process_manager=do_nothing_process_manager,
105 102
         )
@@ -121,7 +118,6 @@ class TestBehaviours(BaseTest):
121 118
 
122 119
         cycle_manager = CycleManager(
123 120
             config,
124
-            logger,
125 121
             simulation=simulation,
126 122
             process_manager=do_nothing_process_manager,
127 123
         )
@@ -148,7 +144,6 @@ class TestBehaviours(BaseTest):
148 144
 
149 145
         cycle_manager = CycleManager(
150 146
             config,
151
-            logger,
152 147
             simulation=simulation,
153 148
             process_manager=do_nothing_process_manager,
154 149
         )
@@ -180,7 +175,6 @@ class TestBehaviours(BaseTest):
180 175
 
181 176
         cycle_manager = CycleManager(
182 177
             config,
183
-            logger,
184 178
             simulation=simulation,
185 179
             process_manager=do_nothing_process_manager,
186 180
         )
@@ -222,7 +216,6 @@ class TestBehaviours(BaseTest):
222 216
 
223 217
         cycle_manager = CycleManager(
224 218
             config,
225
-            logger,
226 219
             simulation=simulation,
227 220
             process_manager=do_nothing_process_manager,
228 221
         )
@@ -252,7 +245,6 @@ class TestBehaviours(BaseTest):
252 245
 
253 246
         cycle_manager = CycleManager(
254 247
             config,
255
-            logger,
256 248
             simulation=simulation,
257 249
             process_manager=do_nothing_process_manager,
258 250
         )
@@ -294,7 +286,6 @@ class TestBehaviours(BaseTest):
294 286
 
295 287
         cycle_manager = CycleManager(
296 288
             config,
297
-            logger,
298 289
             simulation=simulation,
299 290
             process_manager=do_nothing_process_manager,
300 291
         )
@@ -347,7 +338,6 @@ class TestMechanisms(BaseTest):
347 338
 
348 339
         cycle_manager = CycleManager(
349 340
             config,
350
-            logger,
351 341
             simulation=simulation,
352 342
             process_manager=do_nothing_process_manager,
353 343
         )
@@ -389,7 +379,6 @@ class TestMechanisms(BaseTest):
389 379
 
390 380
         cycle_manager = CycleManager(
391 381
             config,
392
-            logger,
393 382
             simulation=simulation,
394 383
             process_manager=do_nothing_process_manager,
395 384
         )
@@ -421,7 +410,6 @@ class TestMechanisms(BaseTest):
421 410
 
422 411
         cycle_manager = CycleManager(
423 412
             config,
424
-            logger,
425 413
             simulation=simulation,
426 414
             process_manager=do_nothing_process_manager,
427 415
         )
@@ -451,7 +439,6 @@ class TestMechanisms(BaseTest):
451 439
 
452 440
         cycle_manager = CycleManager(
453 441
             config,
454
-            logger,
455 442
             simulation=simulation,
456 443
             process_manager=do_nothing_process_manager,
457 444
         )
@@ -493,7 +480,6 @@ class TestMechanisms(BaseTest):
493 480
 
494 481
         cycle_manager = CycleManager(
495 482
             config,
496
-            logger,
497 483
             simulation=simulation,
498 484
             process_manager=do_nothing_process_manager,
499 485
         )
@@ -547,7 +533,6 @@ class TestMechanisms(BaseTest):
547 533
 
548 534
         cycle_manager = CycleManager(
549 535
             config,
550
-            logger,
551 536
             simulation=simulation,
552 537
             process_manager=do_nothing_process_manager,
553 538
         )
@@ -604,7 +589,6 @@ class TestMechanisms(BaseTest):
604 589
 
605 590
         cycle_manager = CycleManager(
606 591
             config,
607
-            logger,
608 592
             simulation=simulation,
609 593
             process_manager=do_nothing_process_manager,
610 594
         )
@@ -660,7 +644,6 @@ class TestMechanisms(BaseTest):
660 644
 
661 645
         cycle_manager = CycleManager(
662 646
             config,
663
-            logger,
664 647
             simulation=simulation,
665 648
             process_manager=do_nothing_process_manager,
666 649
         )

+ 6 - 15
tests/test_terminals.py View File

@@ -7,7 +7,6 @@ import pytest
7 7
 from synergine2.config import Config
8 8
 from synergine2.core import Core
9 9
 from synergine2.cycle import CycleManager
10
-from synergine2.log import SynergineLogger
11 10
 from synergine2.share import shared
12 11
 from synergine2.simulation import Event
13 12
 from synergine2.simulation import Simulation
@@ -53,9 +52,8 @@ class TestTerminals(BaseTest):
53 52
     def test_terminal_communications(self):
54 53
         terminals_manager = TerminalManager(
55 54
             Config(),
56
-            SynergineLogger('test'),
57 55
             terminals=[
58
-                MultiplyTerminal(Config(), SynergineLogger('test')),
56
+                MultiplyTerminal(Config()),
59 57
             ]
60 58
         )
61 59
         terminals_manager.start()
@@ -80,10 +78,9 @@ class TestTerminals(BaseTest):
80 78
     def test_terminals_communications(self):
81 79
         terminals_manager = TerminalManager(
82 80
             Config(),
83
-            SynergineLogger('test'),
84 81
             terminals=[
85
-                MultiplyTerminal(Config(), SynergineLogger('test')),
86
-                DivideTerminal(Config(), SynergineLogger('test')),
82
+                MultiplyTerminal(Config()),
83
+                DivideTerminal(Config()),
87 84
             ]
88 85
         )
89 86
         terminals_manager.start()
@@ -113,8 +110,7 @@ class TestTerminals(BaseTest):
113 110
 
114 111
         terminals_manager = TerminalManager(
115 112
             Config(),
116
-            SynergineLogger('test'),
117
-            terminals=[ListenEverythingTerminal(Config(), SynergineLogger('test'))]
113
+            terminals=[ListenEverythingTerminal(Config())]
118 114
         )
119 115
         terminals_manager.start()
120 116
         terminals_manager.send(ValueTerminalPackage(value=42))
@@ -142,8 +138,7 @@ class TestTerminals(BaseTest):
142 138
 
143 139
         terminals_manager = TerminalManager(
144 140
             Config(),
145
-            SynergineLogger('test'),
146
-            terminals=[ListenAnEventTerminal(Config(), SynergineLogger('test'))]
141
+            terminals=[ListenAnEventTerminal(Config())]
147 142
         )
148 143
         terminals_manager.start()
149 144
         terminals_manager.send(ValueTerminalPackage(value=42))
@@ -168,12 +163,10 @@ class TestTerminals(BaseTest):
168 163
     def test_terminal_as_main_process(self):
169 164
         shared.reset()
170 165
         config = Config()
171
-        logger = SynergineLogger('test')
172 166
         simulation = Simulation(config)
173 167
         simulation.subjects = Subjects(simulation=simulation)
174 168
         cycle_manager = CycleManager(
175 169
             config=config,
176
-            logger=logger,
177 170
             simulation=simulation,
178 171
         )
179 172
 
@@ -189,7 +182,7 @@ class TestTerminals(BaseTest):
189 182
                 global terminal_pid
190 183
                 terminal_pid = os.getpid()
191 184
 
192
-        terminal = MyMainTerminal(config, logger)
185
+        terminal = MyMainTerminal(config)
193 186
 
194 187
         class MyCore(Core):
195 188
             def _end_cycle(self):
@@ -199,12 +192,10 @@ class TestTerminals(BaseTest):
199 192
 
200 193
         core = MyCore(
201 194
             config=config,
202
-            logger=logger,
203 195
             simulation=simulation,
204 196
             cycle_manager=cycle_manager,
205 197
             terminal_manager=TerminalManager(
206 198
                 config=config,
207
-                logger=logger,
208 199
                 terminals=[terminal],
209 200
             ),
210 201
         )