device: 0.832 graphic: 0.750 socket: 0.719 performance: 0.705 x86: 0.679 kernel: 0.667 hypervisor: 0.618 semantic: 0.584 PID: 0.556 network: 0.536 ppc: 0.521 architecture: 0.519 vnc: 0.498 risc-v: 0.465 arm: 0.443 debug: 0.440 mistranslation: 0.439 files: 0.418 boot: 0.417 register: 0.391 i386: 0.388 peripherals: 0.341 TCG: 0.339 permissions: 0.327 KVM: 0.304 VMM: 0.273 assembly: 0.256 virtual: 0.182 user-level: 0.172 Per-thread logging flag must be made immutable Description of problem: The problem is that the code assumes it isn't possible to switch from global logging to per-thread logging and vice-versa per design, but it lags appropriate checks to enforce it. Enabling or disabling per-thread logging at runtime from the monitor causes unexpected results. Steps to reproduce: Enabling per-thread logging at runtime: 1. Start QEMU : `./qemu-system-x86_64 -S -monitor stdio -D qemu.log.%d` 2. Enable per-thread logging from the HMP monitor : `(qemu) log tid` 3. Fails with `Filename template with '%d' required for 'tid'` even though such a template was passed with `-D`. Disabling per-thread logging at runtime: 1. Start QEMU : `./qemu-system-x86_64 -S -monitor stdio -D qemu.log.%d -d tid,cpu_reset` 2. Disable per-thread logging from the HMP monitor: `(qemu) log cpu_reset` 3. QEMU creates a log file with a bogus `qemu.log.%d` name. Additional information: [Series](https://patchew.org/QEMU/20221104120059.678470-1-groug@kaod.org/) posted and already reviewed by @rth7680 .