simpleSystemBase logging OK, any multiprocessing base logging config fails
See original GitHub issueLogging and logging config work fine with the simpleSystemBase. I neglected to do initial testing of logging with any multi-processing base and have enough code written now that I am a bit lost as to why logging config fails with these bases. To be honest, I am new to Thespian and don’t really understand what I have to do (besides providing the config parameters) to get logging correctly configured for the multi-processing case.
These error messages are produced whenever an Actor is created. How can I resolve these config issues?
ERROR ActorAddr-(T|:63818) => Actor core.app_manager.AppManager @ ActorAddr-(T|:63818) instantiation exception Traceback (most recent call last): File “C:\Program Files\Python38\lib\logging\config.py”, line 642, in configure self.configure_root(root) File “C:\Program Files\Python38\lib\logging\config.py”, line 802, in configure_root self.common_logger_config(root, config, incremental) File “C:\Program Files\Python38\lib\logging\config.py”, line 783, in common_logger_config logger.removeHandler(h) File “C:\Users\xxxx\.virtualenvs\ML_GUI\lib\site-packages\thespian\system\logdirector.py”, line 187, in removeHandler raise NotImplementedError(‘Cannot add logging handlers for Thespian Actors’) NotImplementedError: Cannot add logging handlers for Thespian Actors
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File “C:\Users\xxxx\.virtualenvs\ML_GUI\lib\site-packages\thespian\system\actorManager.py”, line 62, in _createInstance
actorInst = withPossibleInitArgs(capabilities=self.capabilities,
File “C:\Users\xxxx\.virtualenvs\ML_GUI\lib\site-packages\thespian\system\utilis.py”, line 334, in create
return klass(**{ k: self.kwargs[k] for k in initsig if k in self.kwargs })
File “D:\Projects\InfoEdgeV2\InfoEdge\core\app_manager.py”, line 21, in init
self.asys = ActorSystem(ACTOR_SYSTEM_BASE)
File “C:\Users\xxxx\.virtualenvs\ML_GUI\lib\site-packages\thespian\actors.py”, line 637, in init
systemBase = self._startupActorSys(
File “C:\Users\xxxx\.virtualenvs\ML_GUI\lib\site-packages\thespian\actors.py”, line 662, in _startupActorSys
systemBase = thespian.system
File “C:\Users\xxxx\.virtualenvs\ML_GUI\lib\site-packages\thespian\system\simpleSystemBase.py”, line 257, in init
if logDefs is not False: dictConfig(logDefs or defaultLoggingConfig)
File “C:\Program Files\Python38\lib\logging\config.py”, line 808, in dictConfig
dictConfigClass(config).configure()
File “C:\Program Files\Python38\lib\logging\config.py”, line 644, in configure
raise ValueError('Unable to configure root ’
ValueError: Unable to configure root logger
Config used (copied from example code):
class actorLogFilter(logging.Filter):
def filter(self, logrecord):
return 'actorAddress' in logrecord.__dict__
class notActorLogFilter(logging.Filter):
def filter(self, logrecord):
return 'actorAddress' not in logrecord.__dict__
logcfg = { 'version': 1,
'formatters': {
'normal': {'format': '%(levelname)-8s %(message)s'},
'actor': {'format': '%(levelname)-8s %(actorAddress)s => %(message)s'}},
'filters': { 'isActorLog': { '()': actorLogFilter},
'notActorLog': { '()': notActorLogFilter}},
'handlers': { 'h1': {'class': 'logging.FileHandler',
'filename': 'InfoEdge.log',
'formatter': 'normal',
'filters': ['notActorLog'],
'level': logging.INFO},
'h2': {'class': 'logging.FileHandler',
'filename': 'InfoEdge.log',
'formatter': 'actor',
'filters': ['isActorLog'],
'level': logging.INFO},},
'loggers' : { '': {'handlers': ['h1', 'h2'], 'level': logging.DEBUG}}
}
Code:
asys = ActorSystem(ACTOR_SYSTEM_BASE, logDefs=logcfg)
# Fails on actor creation ...
app_mg_addr = asys.createActor(AppManager, globalName=APP_MANAGER_NAME)
Issue Analytics
- State:
- Created 3 years ago
- Comments:5 (2 by maintainers)
Top GitHub Comments
I think you may have found my bug - I was going for latter approach - Qt accessing the Actor system as an external entity and running in the context of the main thread - but appear to have screwed up the implementation details. Will correct and see if cleaner separation fixes the issue. Thanks a lot for your help!
I don’t have a lot of experience with Python Qt bindings, but I suspect you are going to encounter some difficulties trying to run Qt from within Actors because Qt probably has internal event loops designed to manage the various keyboard, mouse, and screen operations. If that turns out to be t he case, you may be able to achieve it with a single Actor managing all of the Qt activities or with the Actor system handling all non-GUI operations and the Qt managed in the main application.