2015-08-11 5 views
0

Я хочу записать данные из командной строки asterisk. Но критерием является то, что я хочу, чтобы данные журнала для вызовов выполнялись отдельно, т.е. я хочу записывать данные для каждого вызова в отдельный файл.Как регистрировать данные вызова

Есть ли способ сделать это?

+0

Я вхожу все данные в один файл. Если я хочу просмотреть один вызов, я фильтрую файл журнала для этого файла. Вы можете сделать это очень легко с grep: 'grep ID LOGLEVEL'. Взгляните на руководство logger.conf: http://www.asteriskdocs.org/en/3rd_Edition/asterisk-book-html-chunk/Monitoring_id264504.html –

+0

вопрос: используете ли вы CDR? если не активировать его: http://clients.stabiliservers.com/knowledgebase.php?action=displayarticle&id=9 –

+0

Я знаю эту вещь, мне громоздко держать трек каждого удостоверения личности. Скорее, что я хочу сделать, у меня есть my_gen_ID, который легко отслеживать для меня, с этим my_gen_ID я буду отслеживать поток asterisk_gen_ID и будет записывать целые данные в файл my_gen_ID.txt. Если я сделаю так, что вы определяете, мне понадобится другое сопоставление для my_gen_ID и asterisk_gen_ID - чего я хочу избежать. Поэтому, если кто-то жалуется на какие-либо проблемы, я могу сразу же просмотреть файл my_gen_ID.txt и посмотреть, что произошло в этом вызове. У кого-то есть этот my_gen_ID, когда он/она звонит. –

ответ

0

В случае нет inbuild функции в звездочке, чтобы сделать это, вот Баш решение:

#!/bin/bash 
echo "0" >/tmp/numberoflines 
IFS='' 
pathToLogFile = /path/to/log/file 
while [ 1 ] 
do 
    NUMBER=$(cat /tmp/numberoflines) 
    LINECOUNT=$(wc -l < $pathToLogFile) 
    DIFFERENCE=$(($LINECOUNT-$NUMBER)) 

    if [ $DIFFERENCE != 0 ]; then 
     lines=($(tail -n $DIFFERENCE $pathToLogFile)) 
     for line in $lines; do 
      callID = `expr "$line" : 'CALLID_REGEX (see below)'` 
      $(echo "$line" >> /path/to/log/directory/$callID) 
     done 
    fi 

sleep 5; 
echo "$LINECOUNT" >/tmp/numberoflines 
done 

непроверенным

его следует использовать, чтобы получить аба идею, чтобы решить эту проблему.

регулярное выражение: normaly: /\[(C\d{8})\]/. К сожалению, я не знаю синтаксиса в bash. Прости. вам нужно преобразовать его самостоятельно в синтаксис bash.


Идея: запомнить последнюю строку в файле журнала, обработанную скриптом bash. проверьте количество строк в файле журнала. если есть больше строк, то запоминаемая строка: пройдите по новым строкам и извлеките идентификатор вызова в начале каждой строки (формат: C ******** (* - числа). числом с 8 цифрами). теперь добавьте всю строку в конец файла журнала. имя файла - это извлеченный код.


EDIT Информация о ид вызова (не путайте его с идентификатором вызывающего абонента): https://wiki.asterisk.org/wiki/display/AST/Unique+Call-ID+Logging

+0

Спасибо мужчине за предоставление другой перспективы :). Я могу сделать эту работу –

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