Skip to main content

Navigating the log files

 


Often you may find yourselves in the middle of searching for a keyword in your log files.  On the linux environment , you will easily find by using the command 

        grep 'your keyword' filename.log

Sometime you may want to know what happens before and after the occurrence of your keyword. 

In the example below I tried to look for an exception using grep command.



The output alone is not really helpful to identify the problem that I'm looking for. We need to understand what happened before and after the exception that occurred.


The first step is to get the line number of the first occurrence of this error.

Let's use the command with grep -n command



We can now see the line numbers; 2449 and 2515.

The next step is to find out the content of the log few lines adjacent to line 2449 in this example.

The following command gives the desired result that is connect of the log file between the lines shown in the example below.


sed -n '2440,2460 {  p; }' < nohup.out




This output helps us identifying the root cause of error which is, in this case, "sftp connection" error. There are alternate ways to find similar solution such as using awk, tail, head etc.

example: head -n 2450 nohup.out | tail -10




Comments

Popular posts from this blog

Grails - cross-field Date validation

Often we run into domain classes with date fields. If the domain class has two datefields, startDate and endDate, and the rule for a valid combination is "endDate to be greater than startDate", how do we handle? I listed below two of the options, either using domain level constraints or using the domain classes. Option 1: Using domain constraints. Let us take a sample Grails Domain class class Student{ String name String school Date startDate Date endDate } Add the following constraints to enforce validation rules where name, school, startDate cannot be blank and endDate if present should be greater than startDate.

Grails - Querying complex associations

Criteria class allows performing complex searches on grails objects. There are number of shortcut methods for performing queries but these methods have limitations in terms of number of conditions used in "where clauses". Traditional sql "joins" are not possible as shown in some of the Grails "Finder" methods shown below. Sample 1: def list = AccountTransaction.findAllByCompanyCodeAndVoucherDateBetween(branch, fromDate, toDate, params) Sample 2: def list = AccountTransaction.findAllByCompanyCodeAndVoucherDateGreaterThanEquals(branch, fromDate, params) Sample 3: def list = AccountTransaction.findAllByCompanyCodeAndTransGroup(branch, group, params) "params" contains attributes related to sorting, paging etc. It is very easy to use finder methods but when you want to filter objects by more conditions we need to look for alternatives. For understanding the relationships used in this sample, I listed the grails domain classes. class TransactionTyp

Implementing advanced sort in Grails

The "list" pages generated by inbuilt scaffolding/template features of grails have pagination and sorting features. However, if the domain object displayed in the list is a nested object having another domain object as a property, you may notice that sort is not enabled for that field. Boiler plate code for the header of the list is shown below. As you would have noticed few columns have sortable columns automatically generated by Grails command, generate-all or generate-views. The properties 'partyAccount' and 'bankAccount' in this sample are domain classes nested in the domain class 'partyTransaction'. We could convert them to sortable columns by using the tag g:sortableColum