restructure async_log