Изменение формата даты в 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