improve log func