ui: log informational messages and above to a temporary file

This commit is contained in:
Peter F. Patel-Schneider 2022-08-19 11:34:24 -04:00
parent 7bf187b7ca
commit e3cc516cb3
2 changed files with 23 additions and 13 deletions

View File

@ -34,8 +34,11 @@ CONTENTS HERE
- Errors or warrnings from Solaar: - Errors or warrnings from Solaar:
<!-- Run Solaar as `solaar -dd`, after killing any running Solaar processes. If any warnings or errors show up, include the output here. --> <!-- Under normal operation Solaar keeps a log of warning and error messages in ~/.tmp
while it is running as a file starting with 'Solaar'.
If this file is not available or does not have useful information you can
run Solaar as `solaar -dd`, after killing any running Solaar processes to
have Solaar log informational, warning, and error messages to stdout. -->
**Describe the bug** **Describe the bug**

View File

@ -19,19 +19,19 @@
## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
import importlib import importlib
import logging
import os.path import os.path
import tempfile
from logging import INFO as _INFO from logging import INFO as _INFO
from logging import WARNING as _WARNING from logging import WARNING as _WARNING
from logging import getLogger
import solaar.cli as _cli import solaar.cli as _cli
import solaar.i18n as _i18n import solaar.i18n as _i18n
from solaar import NAME, __version__ from solaar import NAME, __version__
_log = getLogger(__name__) _log = logging.getLogger(__name__)
del getLogger
# #
# #
@ -49,6 +49,7 @@ def _require(module, os_package, gi=None, gi_package=None, gi_version=None):
battery_icons_style = 'regular' battery_icons_style = 'regular'
temp = tempfile.NamedTemporaryFile(prefix='Solaar_', mode='w', delete=True)
def _parse_arguments(): def _parse_arguments():
@ -100,17 +101,21 @@ def _parse_arguments():
global tray_icon_size global tray_icon_size
tray_icon_size = args.tray_icon_size tray_icon_size = args.tray_icon_size
import logging
if args.debug > 0:
log_level = logging.ERROR - 10 * args.debug
log_format = '%(asctime)s,%(msecs)03d %(levelname)8s [%(threadName)s] %(name)s: %(message)s' log_format = '%(asctime)s,%(msecs)03d %(levelname)8s [%(threadName)s] %(name)s: %(message)s'
logging.basicConfig(level=max(log_level, logging.DEBUG), format=log_format, datefmt='%H:%M:%S') log_level = logging.ERROR - 10 * args.debug
else: logging.getLogger('').setLevel(min(log_level, logging.WARNING))
logging.root.addHandler(logging.NullHandler()) file_handler = logging.StreamHandler(temp)
logging.root.setLevel(logging.ERROR) file_handler.setLevel(max(min(log_level, logging.WARNING), logging.INFO))
file_handler.setFormatter(logging.Formatter(log_format))
logging.getLogger('').addHandler(file_handler)
if args.debug > 0:
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(logging.Formatter(log_format))
stream_handler.setLevel(log_level)
logging.getLogger('').addHandler(stream_handler)
if not args.action: if not args.action:
if logging.root.isEnabledFor(logging.INFO): if _log.isEnabledFor(logging.INFO):
logging.info('language %s (%s), translations path %s', _i18n.language, _i18n.encoding, _i18n.path) logging.info('language %s (%s), translations path %s', _i18n.language, _i18n.encoding, _i18n.path)
return args return args
@ -172,6 +177,8 @@ def main():
from traceback import format_exc from traceback import format_exc
sys.exit('%s: error: %s' % (NAME.lower(), format_exc())) sys.exit('%s: error: %s' % (NAME.lower(), format_exc()))
temp.close()
if __name__ == '__main__': if __name__ == '__main__':
main() main()