Изменение формата даты в syslog
есть в любом случае, мы можем изменить формат даты в файле журнала регистрируются в системный журнал? Я не хочу изменять способ регистрации всех журналов, но только по файлу журнала.
EDIT: я использую syslogd (во FreeBSD)
вот как теперь выглядит мой файл:
Dec 5 07:52:10 Log data 1
Dec 5 07:52:10 Log data 2
Dec 5 07:52:10 Log data 3
вот как я хочу, чтобы это выглядело:
20131205 07:52:10 Log data 1
20131205 07:52:10 Log data 2
20131205 07:52:10 Log data 3
мой системный журнал.conf выглядит так, где /var/log / my_log.журнал-это мой журнал:
+@
*.notice;local0.none;local1.none;local2.none;authpriv.none;kern.debug;mail.crit;news.err /var/log/messages
security.* /var/log/security
auth.info;authpriv.info /var/log/auth.log
mail.info /var/log/maillog
ftp.info /var/log/xferlog
cron.* /var/log/cron
*.=debug /var/log/debug.log
console.info /var/log/console.log
local1.info /var/log/my_log.log
3 ответов
даже если вы нашли другое решение, я ответить за других.
отредактируйте файл конфигурации системного журнала (например, в Debian:/etc/syslog-ng/syslog-ng.conf
).
затем объявите новый шаблон следующим образом:
template template_date_format { template("${YEAR}-${MONTH}-${DAY} ${HOUR}:${MIN}:${SEC} ${HOST} ${MSGHDR}${MSG}\n"); template_escape(no); };
это пример, но вы можете использовать различные макросы в соответствии с документацией системного журнала связан в user9645'ы ответ.
после этого найдите в этом файле конфигурации все файлы, которые вы хотите изменить формат вывода и применить этот шаблон к ним.
например, я хочу изменить /var/log/auth.log
выходной формат, затем я меняю:
destination d_auth { file("/var/log/auth.log"); };
в :
destination d_auth { file("/var/log/auth.log" template(template_date_format)); };
затем перезапустить syslog (service syslog-ng restart
) и попробуйте войти в систему, чтобы увидеть изменения в вашем auth.log
.
у меня была такая же проблема с FreeBSD 9.2 и Zabbix Системный монитор GUI, который не может обрабатывать такие вещи, как " Jan " или " Feb " в штампе даты (!) в системном журнале сообщений.
то, что я сделал, это установить sysutils/syslog-ng
порт, и использовать конвертировать-syslogconf.на awk скрипт для переноса моего /etc/syslog.conf
to /usr/local/etc/syslog-ng.conf
(который, к счастью, хорошо работал даже с довольно сложной конфигурацией) и добавил этот пользовательский шаблон форматирования в все file()
направления:
template t_msgfmt {
template("${ISODATE} ${HOST} ${FACILITY} ${LEVEL} ${MSGHDR}${MSG}\n");
template_escape(no);
};
вы можете найти (много) больше информации о форматировании в syslog-ng руководство раздел 11.1. Это работает хорошо для меня (до сих пор) надеюсь, что это поможет вам!
в итоге я использовал скрипт awk для запуска файла журнала и замены поля даты
awk '{getDate="date -j -f \"%b %d %H:%M:%S\" \""" "" ""\" \"+%Y%m%d %H:%M:%S\""
while ( ( getDate | getline date ) > 0 ) { }
close(getDate);
print date,,,,}' Temp1 > Temp2