Force Logs to appear in Info View when chaining operator calls
You may want to fake the report banner by creating your own and appending it to the Info_header, while having a timer operator manage it ( show and hide, set the message ) as in the following example :

import bpy
from bpy.props import StringProperty, IntProperty

#properties to pass and store the message
bpy.types.Scene.message = bpy.props.StringProperty()
bpy.types.Scene.icon    = bpy.props.StringProperty()

#fake report banner
def report(self, context):
    self.layout.label(text=context.scene.message, icon=context.scene.icon, icon_value=0)

#timer modal operator
class LoggingOperator(bpy.types.Operator):
    """Log a message to the Info View"""
    bl_idname = "info.log"
    bl_label = "Direct Log message -&gt; Info View"

    _timer = None
    lookup = ['DEBUG', 'INFO', 'WARNING', 'ERROR'] 
    level = bpy.props.IntProperty(name="Level", default=1)
    message = bpy.props.StringProperty(name="Message", default="Reporting : Base message")

    def modal(self, context, event):
        if event.type == 'TIMER':
            self.cancel(context)
            return {'FINISHED'}
        return {'PASS_THROUGH'}

    def execute(self, context):
        wm = context.window_manager
        self._timer = wm.event_timer_add(2, context.window)
        wm.modal_handler_add(self)

        context.scene.icon = self.lookup[self.level]
        context.scene.message = self.message
        bpy.types.INFO_HT_header.append(report)  
        bpy.ops.wm.redraw_timer(type='DRAW_WIN_SWAP', iterations=1) #force UI redraw
        return {'RUNNING_MODAL'}

    def cancel(self, context):
        wm = context.window_manager
        wm.event_timer_remove(self._timer)
        bpy.types.INFO_HT_header.remove(report)
        bpy.ops.wm.redraw_timer(type='DRAW_WIN_SWAP', iterations=1) #force UI redraw


class ForwardLoggingOperator(bpy.types.Operator):
    """Call an operator that logs stuff"""
    bl_idname = "info.log_1"
    bl_label = "Indirect Log &gt; Calls Operator"
    bl_options = {'INTERNAL'}

    def execute(self, context):
        print("Forwarding Operator called")
        bpy.ops.info.log(level=1, message="Forward : Redirected message")
        print(context.active_operator )
        return {'FINISHED'}


class ScenePanel(bpy.types.Panel):
    bl_label = "Test Scene Panel"

    bl_space_type = 'PROPERTIES'
    bl_region_type = 'WINDOW'
    bl_context = "scene"

    @classmethod
    def poll(cls, context):
        return True        

    def draw(self, context):      
        layout = self.layout
        row = layout.column()
        layout.template_reports_banner()
        row.operator("info.log")
        row.operator("info.log_1")

bpy.utils.register_class(LoggingOperator)
bpy.utils.register_class(ForwardLoggingOperator)
bpy.utils.register_class(ScenePanel)