Solution 1 :
dmesg
lit le tampon circulaire du journal du noyau. Il ne fait pas d'horodatage. Ce que vous devez faire est de configurer syslog pour récupérer les journaux du noyau à partir de ce tampon et les envoyer dans un fichier (s'il n'est pas déjà configuré pour le faire). Remarque, la configuration syslog par défaut de CentOS 5.x envoie les journaux du noyau à /var/log/messages
, si je me souviens bien.
Si vous souhaitez envoyer tous les journaux du noyau (dmesg) à /var/log/kern.log
, en utilisant le démon syslog par défaut, vous ajouteriez une ligne comme celle-ci à /etc/syslog.conf
kern.* /var/log/kern.log
Solution 2 :
Il existe une solution "Activer les horodatages pour dmesg/Kernel Ring Buffer"
Vous pouvez ajouter :
printk.time=1
à la ligne de commande du noyau.
Quant à moi, j'ai ajouté à rc.local sur toutes les machines avec marionnette. C'est plus simple pour moi) :
if test -f /sys/module/printk/parameters/time; then
echo 1 > /sys/module/printk/parameters/time
fi
Solution 3 :
J'ai écrit ce script simple. Oui, c'est lent. Si vous voulez quelque chose de plus rapide, vous écrivez en fait un script sur perl, python ou autre chose. Je suis sûr que ce simple script peut vous donner une idée de la façon dont il peut être calculé.
Veuillez noter que j'ai ignoré la fraction de seconde enregistrée dans chaque ligne (après le . dans l'horodatage).
#!/bin/bash
localtime() {
perl -e "print(localtime($1).\"\n\");";
}
upnow="$(cut -f1 -d"." /proc/uptime)"
upmmt="$(( $(date +%s) - ${upnow} ))"
dmesg | while read line; do
timestamp="$(echo "${line}" | sed "s/^\[ *\([0-9]\+\).*/\1/g")"
timestamp=$(( ${timestamp} + ${upmmt} ))
echo "${line}" | sed "s/^[^]]\+]\(.*\)/$(localtime "${timestamp}") -\1/g"
done
J'espère que cela aide. :)