def METHOD_NAME(
    *,
    return_value: Optional[Any] = None,
    return_function: Optional[Callable] = None,
    log_message: str = "",
) -> Any:
    """
    Decorator to log function and ovewrite return value of object methods.
    Ignore function name as first parameter and ignore every other parameters.
    Args:
        return_value: Returned value if given, `return_function`
            has higher priority if set.
            Defaults to `None`.
        return_function: Returned function with applies
            arguments and original caller.
            Defaults to `None`.
        log_message: String to be put to logger output.
            Defaults to `""`.
    Returns:
        Any value that is expected to be returned from the function call or the
        specificied return value.
    """
    def decorator_readonly(func):
        @functools.wraps(func)
        def readonly_func(self, *args, **kwargs):
            if not self.read_only:
                return func(self, *args, **kwargs)
            else:
                args_str = str(args)[1:-1]
                kwargs_str = ", ".join(f"{k}={v!r}" for k, v in kwargs.items())
                # add , in case there are also args, what has to be separated
                if args and kwargs:
                    kwargs_str = ", " + kwargs_str
                log_output(
                    f"{log_message} {self.__class__.__name__}."
                    f"{func.__name__}({args_str}{kwargs_str})"
                )
                if return_function:
                    return return_function(self, *args, **kwargs)
                else:
                    return return_value
        return readonly_func
    return decorator_readonly