デコレーターを書いてみる

 お世話になっております。
 夜中に目が覚めたので、デコレーターを書いてみました。

# -*- coding: utf-8 -*-

import logging
import datetime

def log(function):
    function_name = function.__name__
    class_name = function.__class__.__name__
    start_format = '{0} {1}.{2} start. args={3} kwargs={4}'
    end_format = '{0} {1}.{2} end. return={3}'

    def wrapper(*args, **kwargs):
        now = str(datetime.datetime.now())
        logging.debug(start_format.format(now,
                                          class_name,
                                          function_name,
                                          str(args),
                                          str(kwargs)))
        try:
            result = function(*args, **kwargs)
        except Exception as ex:
            logging.error(str(ex))
            raise ex
        now = str(datetime.datetime.now())
        logging.debug(end_format.format(now,
                                        class_name,
                                        function_name,
                                        str(result)))
        return result
    return wrapper

@log
def main():
    print('main')

if __name__ == '__main__':
    logging.basicConfig(level=logging.DEBUG)
    main()

 簡単です。

以上