Debug.Log print order, or Awake vs Start issue?

This seems crazy but I need to confirm it.

Does Debug.Log guarantee any kind of order that the messages are displayed relative to when Debug.Log() is called?
I’m seeing some cases where it seems they’re being shown out of order.

For example:

// Instantiate object
myObj = (GameObject) MonoBehaviour.Instantiate(somePrefab);

Then within SomePrefab,

void Awake() { Debug.Log("Awake called"); }
void Start() { Debug.Log("Start called"); }
void Foo() { Debug.Log("Foo called"); } 

The output is:

Awake called
Foo called
Start called

I am surprised that Foo() is called even before SomePrefab’s fake constructor Start() thing has finished.
Is it a Start()/Awake()/Instantiate issue, or a Debug.Log issue?

Nope, that’s the right order. Awake is immediate initialization - essentially you’re saying ‘this init doesn’t rely on anything, but things might rely on what i do here’ inside an Awake. Start is ‘i might need some data from somewhere else’, so it waits its turn. As far as I know they happen within the same frame (awakes are called instantly, starts are piled up and executed one after the other at the end of all the normal unity events).