### Godot version

v4.1.beta.custom_build [ea6a141ff]

### System information

Windows 10.0.19045 - Vulkan (Forward+) - dedicated NVIDIA GeForce GTX 1060 (NVIDIA; 30.0.15.1403) - Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz (8 Threads)

### Issue description

I noticed editor log misbehaving when a text is being printed. It seems to be mostly noticeable (or exclusive to?) when collapsing of duplicate messages is enabled.

https://github.com/godotengine/godot/assets/2223172/4ccfaa70-8991-4f5d-95ec-c732600b82ec

It looks like the log rebuilds from scratch with every message. If it had already some content, the text might be printed faster than it appears, causing it to be unreadable:

https://github.com/godotengine/godot/assets/2223172/6b69d308-37f1-4d8f-b47c-09f2e42eda43


### Steps to reproduce

```GDScript
func _process(delta: float) -> void:
	print("spam")
```

### Minimal reproduction project

N/A
ItemFont *_find_font(Item *p_item);
	int _find_outline_size(Item *p_item, int p_default);
	ItemList *_find_list_item(Item *p_item);
	ItemDropcap *_find_dc_item(Item *p_item);
	int _find_list(Item *p_item, Vector<int> &r_index, Vector<ItemList *> &r_list);
	int _find_margin(Item *p_item, const Ref<Font> &p_base_font, int p_base_font_size);
	PackedFloat32Array _find_tab_stops(Item *p_item);
	HorizontalAlignment _find_alignment(Item *p_item);
	BitField<TextServer::JustificationFlag> _find_jst_flags(Item *p_item);
	TextServer::Direction _find_direction(Item *p_item);
	TextServer::StructuredTextParser _find_stt(Item *p_item);
	String _find_language(Item *p_item);
	Color _find_color(Item *p_item, const Color &p_default_color);
	Color _find_outline_color(Item *p_item, const Color &p_default_color);
	bool _find_underline(Item *p_item);
	bool _find_strikethrough(Item *p_item);
	bool _find_meta(Item *p_item, Variant *r_meta, ItemMeta **r_item = nullptr);
	bool _find_hint(Item *p_item, String *r_description);
	Color _find_bgcolor(Item *p_item);
	Color _find_fgcolor(Item *p_item);
	bool _find_layout_subitem(Item *from, Item *to);
	void _fetch_item_fx_stack(Item *p_item, Vector<ItemFX *> &r_stack);
	void _normalize_subtags(Vector<String> &subtags);
	void _update_fx(ItemFrame *p_frame, double p_delta_time);
	void _scroll_changed(double);
	int _find_first_line(int p_from, int p_to, int p_vofs) const;
	_FORCE_INLINE_ float _calculate_line_vertical_offset(const Line &line) const;
	virtual void gui_input(const Ref<InputEvent> &p_event) override;
	virtual String get_tooltip(const Point2 &p_pos) const override;
	Item *_get_next_item(Item *p_item, bool p_free = false) const;