These days, at least in Arch Linux (probably true for other distros too? 1), dmesg needs sudo, otherwise it doesn't work:
$ dmesg
dmesg: read kernel buffer failed: Operation not permitted
On the other hand, journalctl (from systemd) doesn't need sudo.
It feels odd because journalctl can access much of the same information (if not all) of dmesg.
Does anyone know why one is restricted but the other isn't? My installation is pretty vanilla, and I haven't made any custom changes to sysctl (/etc/sysctl.d/) and alike.
I've found a similar question outside of SE2 however it doesn't have any replies.