all repos — mgba @ 33098926577f52a74730de1708a427e275a9bc88

mGBA Game Boy Advance Emulator

src/platform/python/mgba/log.py (view raw)

 1# Copyright (c) 2013-2016 Jeffrey Pfau
 2#
 3# This Source Code Form is subject to the terms of the Mozilla Public
 4# License, v. 2.0. If a copy of the MPL was not distributed with this
 5# file, You can obtain one at http://mozilla.org/MPL/2.0/.
 6from ._pylib import ffi, lib  # pylint: disable=no-name-in-module
 7from . import create_callback
 8
 9create_callback("mLoggerPy", "log", "_pyLog")
10
11
12def install_default(logger):
13    Logger.install_default(logger)
14
15
16def silence():
17    Logger.install_default(NullLogger())
18
19
20class Logger(object):
21    FATAL = lib.mLOG_FATAL
22    DEBUG = lib.mLOG_DEBUG
23    INFO = lib.mLOG_INFO
24    WARN = lib.mLOG_WARN
25    ERROR = lib.mLOG_ERROR
26    STUB = lib.mLOG_STUB
27    GAME_ERROR = lib.mLOG_GAME_ERROR
28
29    _DEFAULT_LOGGER = None
30
31    def __init__(self):
32        self._handle = ffi.new_handle(self)
33        self._native = ffi.gc(lib.mLoggerPythonCreate(self._handle), lib.free)
34
35    @staticmethod
36    def category_name(category):
37        return ffi.string(lib.mLogCategoryName(category)).decode('UTF-8')
38
39    @classmethod
40    def install_default(cls, logger):
41        cls._DEFAULT_LOGGER = logger
42        lib.mLogSetDefaultLogger(logger._native)
43
44    def log(self, category, level, message):
45        print("{}: {}".format(self.category_name(category), message))
46
47
48class NullLogger(Logger):
49    def log(self, category, level, message):
50        pass