2015-01-19 2 views
0

Я пытаюсь получить исключения из журналов вместе с StackTrace. Журналы находятся в формате, указанном ниже.Извлечение исключений из журналов вместе с stacktrace

[2015-01-07 18:39:18,212] host123 WARN com.host123 .elf.UserQuest - Quest/option {o.q.more.paper.osc#0} references unknown dependent {t.what.form.file.more.action} in application {src-code}. Please revise. 
[2015-01-07 18:39:18,212] host123 WARN com.host123 .elf.UserQuest - Quest/option {o.q.more.paper.osc#1} references unknown dependent {t.what.form.file.more.action} in application {src-code}. Please revise. 
[2015-01-07 18:40:34,281] cessor32 ERROR com.host123 .email.DirectMailer - Unable to connect to server {1.1.1.1}: 
     javax.mail.MessagingException: Could not connect to SMTP host: 1.1.1.1, port: 25, response: 451 
     at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:996) 
     at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:197) 
     at javax.mail.Service.connect(Service.java:233) 
     at javax.mail.Service.connect(Service.java:134) 
     at com.host123.email.DirectMailer.deliverMessage(DirectMailer.java:191) 
     at com.host123.email.DirectMailer.send(DirectMailer.java:153) 
     at com.host123.webface.util.Notifications.sendEmailX(Notifications.java:126) 
     at com.host123.webface.util.Notifications.sendEmail(Notifications.java:91) 
     at com.host123.webface.util.Notifications.sendEmail(Notifications.java:145) 
     at com.host123.edp.webface.action.DocRecoveryActionProcessor.perform(DocRecoveryActionProcessor.java:81) 

Я использую этот код для извлечения записей

sed -n '/${bb}/,/${aa}/p' ${k}|egrep "ERROR|ORA|Exception|at.*\.java\:.*" 

где бб является предыдущей датой и аа является текущей датой. Если я использую только команду sed, то я могу получить данные на основе условия даты, но использование egrep вместе с sed не дает результата.

Я также попытался использовать команду awk.

awk -v "sd=$aa" -v "ed=$bb" -F "," '$1 >= sd && $1 <= ed' $k 

То, что я думаю, что проблема может быть в том, что команда AWK извлекает строки, которые имеют дату в нем и StackTrace строка не имеет какой-либо строки. Это может быть или не быть правильным.

Также я извлекаю это из тысяч файлов журнала. Если есть какой-либо способ уменьшить объем памяти, используемой для извлеченных данных, это будет очень полезно.
Любая помощь будет принята с благодарностью.

+0

$ 1 is '[2015-01-07 18: 39: 18' с' ['. –

+0

Укажите примерные значения '$ bb' и' $ aa' с ожидаемым результатом. – anubhava

+0

, если вы знаете длину стека стека по умолчанию, вы, вероятно, могли бы использовать что-то вроде 'grep Exception -B 1 -A TraceLength-1' –

ответ

2
besc="\\${bb}";aesc="\\${aa}" 

sed -n "/${besc}/,/${aesc}/ { 
    /\\(ERROR\\)|\\(ORA\\)|\\(Exception\\)|\(at.*\\.java\\:.*\\)/ p 
    }" ${k} 
  • спасаясь от [ (или не использовать его)
  • нормально никакой потребности задать расширенное, СЭД не может принять это также в процессе суб
+2

Если вы использовали '-r', вам не понадобилось бы столько обратных косых черт. –

+0

ok, привычка использовать версию te posix, где нет '-r' – NeronLeVelu

0

Это может быть то, что вы ищете :

$ cat tst.awk 
/^[^[:blank:]]/ { 
    dt = $1 " " $2 
    found = (((sd=="")||(dt>=sd)) && ((ed=="")||(dt<=ed))) 
} 
found 

$ awk -v sd='[2015-01-07 18:40:34,281]' -f tst.awk file 
[2015-01-07 18:40:34,281] cessor32 ERROR com.host123 .email.DirectMailer - Unable to connect to server {1.1.1.1}: 
     javax.mail.MessagingException: Could not connect to SMTP host: 1.1.1.1, port: 25, response: 451 
     at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:996) 
     at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:197) 
     at javax.mail.Service.connect(Service.java:233) 
     at javax.mail.Service.connect(Service.java:134) 
     at com.host123.email.DirectMailer.deliverMessage(DirectMailer.java:191) 
     at com.host123.email.DirectMailer.send(DirectMailer.java:153) 
     at com.host123.webface.util.Notifications.sendEmailX(Notifications.java:126) 
     at com.host123.webface.util.Notifications.sendEmail(Notifications.java:91) 
     at com.host123.webface.util.Notifications.sendEmail(Notifications.java:145) 
     at com.host123.edp.webface.action.DocRecoveryActionProcessor.perform(DocRecoveryActionProcessor.java:81) 

Если вы не укажете sd начинается в начале файла, и если йо u не указывать ed, он идет в конец файла. Если вы укажете, как вы будете получать записи в этом диапазоне, включительно.

Я понятия не имею, для чего цель для egrep "ERROR|ORA|Exception|at.*\.java\:.*" находится в вашем вопросе - если у нее есть цель, пожалуйста, обновите свой вопрос, чтобы уточнить с помощью конкретного примера ввода и вывода, показывающего, для чего он предназначен, и я обновлю этот ответ любым тривиальная настройка необходима, чтобы делать то, что вы хотите.

+0

egrep используется для извлечения любых исключений, возникающих в журнале. – atul329

+0

Вам не хватает моей точки. «любые исключения, происходящие в журнале» означают что-то для ВАС, но это абсолютно ничего не значит для меня. Обновите свой вопрос, чтобы показать, что вы подразумеваете под строками в своем входном файле и полями в этих строках, с хорошим вводом проб и ожидаемым выходом.Для меня это всего лишь конкретные значения в определенных строках и столбцах - я не знаю и не забочусь о том, что такое «исключение». –