2013-12-05 3 views
6

Есть ли способ изменить формат даты в конкретном файле журнала, который регистрируется syslog? Я не хочу изменять способ регистрации всех журналов, но только по файлу журнала.Изменение формата даты в 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 

Мой syslog.conf выглядит так: где /var/log/my_log.log - мой файл журнала:

[email protected] 
*.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 
+2

Это зависит от того, какой демон syslog вы используете.Измените вопрос с помощью этой информации, и вы можете получить более эффективные ответы. –

+0

'date -d" Dec 5 07:52:10 "" +% Y% m% d% T "' даст вам выход, как '20131205 07: 52: 10'. Я не знаю, как установить формат в syslog.conf. – fedorqui

ответ

2

Я закончил с использованием сценария AWK для запуска через лог-файл и заменить поле даты

awk '{getDate="date -j -f \"%b %d %H:%M:%S\" \""$1" "$2" "$3"\" \"+%Y%m%d %H:%M:%S\"" 
     while ((getDate | getline date) > 0) { } 
     close(getDate); 
     print date,$2,$3,$4,$5}' Temp1 > Temp2 
3

У меня была такая же проблема, используя FreeBSD 9.2 и Zabbix Системный монитор GUI, который не может обрабатывать такие сообщения, как «Янв» или «Фев» в отметке даты (!) В сообщениях системного журнала.

Что я сделал установить sysutils/syslog-ng порт и использовать convert-syslogconf.awk скрипт для переноса моего /etc/syslog.conf в /usr/local/etc/syslog-ng.conf (который, к счастью, казалось, хорошо работать даже с довольно сложной конфигурации) и добавили пользовательский шаблон форматирования для всех в file() направления:

template t_msgfmt { 
    template("${ISODATE} ${HOST} ${FACILITY} ${LEVEL} ${MSGHDR}${MSG}\n"); 
    template_escape(no); 
}; 

Вы можете найти (много) больше, форматирование Информация в syslog-ng manual section 11.1. Он работает хорошо для меня (пока) надеюсь, что это поможет вам!

6

Даже если вы нашли другое решение, я даю ответ на другие.

Редактировать конфигурационный файл syslog (В 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 «s.

После этого найдите в этом файле конфигурации все файлы, которые вы хотите изменить формат вывода, и примените к ним этот шаблон.

Например, я хочу изменить формат /var/log/auth.log вывода, то я изменю:

destination d_auth { file("/var/log/auth.log"); };

к:

destination d_auth { file("/var/log/auth.log" template(template_date_format)); };

Затем перезапустите системный журнал (service syslog-ng restart) и попробуйте логин, чтобы увидеть изменения в ваш auth.log.

+0

Это интересно, я обязательно попробую это. – egorulz

Смежные вопросы