2014/12/31

Merge multiple log files preserving entries order

Problem

When solving issues occurred in bigger, especially multi-threading or even multi-processes, applications it happens there is a need to work with multiple log files written at the same time.
To get a full view of what's happened in such an app the most convenient would be to have a single log file combined with chronological order of log entries preserved.

This article shows how to achieve this with just a linux sort command without breaking multi-lines entries (f.g. Java stacktraces).

Example

As my case was almost the same I took below samples from stackoverflow question (which features my answer as well).
Additionally, I prepended each entry with date to match my case better. This doesn't change anything though.

Input

To simplify example all log entries are from the same date, hour and minute, but solution works for any date/time log entries.

file1.log
2014-12-31 11:48:18.825 [main] INFO  org.hibernate.cfg.Environment - HHH000206: hibernate.properties not found
2014-12-31 11:48:55.784 [main] INFO  o.h.tool.hbm2ddl.SchemaUpdate - HHH000396: Updating schema

file2.log
2014-12-31 11:48:35.377 [qtp1484319352-19] ERROR c.w.b.c.ControllerErrorHandler -
org.springframework.beans.TypeMismatchException: Failed to convert value of type   'java.lang.String' to required type 'org.joda.time.LocalDate'; nested exception is    org.springframework.core.convert.ConversionFailedException: Failed to convert from type     java.lang.String to type @org.springframework.web.bind.annotation.RequestParam   @org.springframework.format.annotation.DateTimeFormat org.joda.time.LocalDate for value    '[2013-03-26]'; nested exception is java.lang.IllegalArgumentException: Invalid format: "    [2013-03-26]"
    at org.springframework.beans.TypeConverterSupport.doConvert(TypeConverterSupport.java:68) ~[spring-beans-3.2.1.RELEASE.jar:3.2.1.RELEASE]
at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:45) ~[spring-beans-3.2.1.RELEASE.jar:3.2.1.RELEASE]
at org.springframework.validation.DataBinder.convertIfNecessary(DataBinder.java:595) ~[spring-context-3.2.1.RELEASE.jar:3.2.1.RELEASE]
at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:98) ~[spring-web-3.2.1.RELEASE.jar:3.2.1.RELEASE]
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:77) ~[spring-web-3.2.1.RELEASE.jar:3.2.1.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:162) ~[spring-web-3.2.1.RELEASE]

Expected output

As you can see to preserve chronological order upon merge entry from file2.log has to get between two entries from file1.log. We want stacktrace to stick with its entry as well.

2014-12-31 11:48:18.825 [main] INFO  org.hibernate.cfg.Environment - HHH000206: hibernate.properties not found
2014-12-31 11:48:35.377 [qtp1484319352-19] ERROR c.w.b.c.ControllerErrorHandler -
org.springframework.beans.TypeMismatchException: Failed to convert value of type   'java.lang.String' to required type 'org.joda.time.LocalDate'; nested exception is    org.springframework.core.convert.ConversionFailedException: Failed to convert from type     java.lang.String to type @org.springframework.web.bind.annotation.RequestParam   @org.springframework.format.annotation.DateTimeFormat org.joda.time.LocalDate for value    '[2013-03-26]'; nested exception is java.lang.IllegalArgumentException: Invalid format: "    [2013-03-26]"
    at org.springframework.beans.TypeConverterSupport.doConvert(TypeConverterSupport.java:68) ~[spring-beans-3.2.1.RELEASE.jar:3.2.1.RELEASE]
at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:45) ~[spring-beans-3.2.1.RELEASE.jar:3.2.1.RELEASE]
at org.springframework.validation.DataBinder.convertIfNecessary(DataBinder.java:595) ~[spring-context-3.2.1.RELEASE.jar:3.2.1.RELEASE]
at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:98) ~[spring-web-3.2.1.RELEASE.jar:3.2.1.RELEASE]
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:77) ~[spring-web-3.2.1.RELEASE.jar:3.2.1.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:162) ~[spring-web-3.2.1.RELEASE]
2014-12-31 11:48:55.784 [main] INFO  o.h.tool.hbm2ddl.SchemaUpdate - HHH000396: Updating schema

Solution

sort -nmbs -k1.1,1.4 -k1.6,1.7 -k1.9,1.10 -k2.1,2.2 -k2.4,2.5 -k2.7,2.8 -k2.10,2.12 file1.log file2.log > merged.log
The above command does the trick. Of course, input may be provided with wildcards as well. Like file?.log or *.log instead specifying each file separately.

Explanation

According to the man pages used switches mean:
-n, --numeric-sort - compare according to string numerical value.
-b, --ignore-leading-blanks - ignore leading blanks.
-s, --stable - stabilize sort by disabling last-resort comparison
-m, --merge - merge already sorted files; do not sort
-k, --key=POS1[,POS2] - start a key at POS1 (origin 1), end it at POS2 (default end of line)
It's not easy to get comprehensive info about sort command. However while experimenting with the command I got some insight and I'll try to give a some explanation. If you find any inaccuracies or mistakes please leave a comment.

Compare only numeric values

The -n switch is supposed to speed up numeric comparison. We want that.

Apart from this however, apparently it stops comparing key whenever there is a non-numeric character in it. That's crucial for keeping multi-lines entries like stacktraces in place (see below).

Merge, don't sort

Log files are already ordered so we don't want to sort them again, only determine which line goes first upon merging. That's why -m switch is used.

When merge switch is combined with numeric sort, lines which doesn't have numeric values for specified keys 'are preferred' in comparison over lines with proper keys (those containing date/time). This way stacktrace lines are copied to output file until next line with date/time key is spotted.

I think that's a bit accidental behaviour but really crucial for our case.

Specify proper keys

The most important part are keys for sort (merge) comparison. A key is specified with -k switch followed by a column position in a file line. Let say -k1,5 means that sort (merge) comparison is done by all columns from column 1 to column 5. By default columns are delimited by blanks, like spaces or tabs.
Specifying only a single column like -k2 results with comparison done by the column and everything behind it till the end of a line. That's why it's important to specify at least two columns or the same column twice, like -k1,1 if there is only one column we want to order by.

As we are concern in preserving date-time log entries order, it seems that in our case sufficient should be a key like -k1,2. First column is date, second column is time, voila!. There is a catch though. As mentioned above, key comparison with -n switch used will stop on any non-numeric character, which is dash after year in the sample log entries. This means that only a year going to be compared as a sort key upon merging and we'd end up with a the same result as if cat *.log > merged.log command was used -considering all log entries in input files are from the same year. Which is usually the case, obviously.
On the other hand not using -n switch sorts input files which will result with all the stactrace lines (for all the stacktraces) clustered in alphabetical order at the top of the file. Not good...
That's why keys needs to be specified in more granular way by pointing to specific character positions in each column. It can be done with a dot and in-a-column-position of a character like -k1.1,1.4 for four digits of a year, then -k1.6,1.7 for first and second digit of a month, -k1.9,1.10 for day digits, -k2.1,2.2 for hour digits, and so on.

Keys themselves may be provided in a different order for the command if your logs format is different (all input files need to share the same format though). Let say each entry starts with a date but written as 12/31/2014. Just go with following key switches then:
-k1.7,1.10 -k1.1,1.2 -k1.4,1.5  (year, month, day).

Ignore leading blanks

This probably doesn't changes anything for our particular case but I left -b just in case as the most of stactrace lines begin with spaces.

Stabilize sort

The -s switch disables last-resort comparison. That's the default behaviour which, whenever keys by which two lines are being compared are the same, falls back to full string comparison of the whole lines.
We like to preserve original order of log entries even for lines logged in the exact same millisecond. That's why this switch may be helpful for our case. Moreover it may slightly speed up the command as well.

44 comments:

  1. Java is the best programming language that are serving as a entry point for fresher like me. The content you have provided here tells me that clearly. This will be useful for my training program. Thanks for sharing this useful information here. You are running a great blog though.

    JAVA J2EE Training in Chennai | JAVA Training in Chennai | web designing course in chennai

    ReplyDelete
  2. Responsive desing can yield a very good revenue to a business. It has been discovered since the usage of multiple devices increase. The content furnished above too tells the same. Thanks for sharing this information in here. Please keep bloging content like this.

    Web designing course in chennai | Web design training | PHP Training in Chennai

    ReplyDelete
  3. Thanks for sharing those useful basic programming stuff’s, it helps me to explore my knowledge in programming...if you want to switch your career in developing area you should know the basic of programming’s for that you have to read python because it was the first programming language for more visit.
    python training in chennai|Python Course in Chennai

    ReplyDelete
  4. This information is impressive; I am inspired with your post writing style & how continuously you describe this topic. After reading your post, thanks for taking the time to discuss this, I feel happy about it and I love learning more about this topic.
    Regards,
    sas training in Chennai|sas course in Chennai|sas courses in chennai

    ReplyDelete
  5. Cloud has beome the common word that is being used by most of the professional these day. The reason for relying on this technology is security. Your content too lecture the same. Thanks for sharing this worth able information in here. Keep blogging article like this.

    Hadoop Training Chennai
    | Hadoop Course in Chennai | Manual testing training in Chennai

    ReplyDelete
  6. We are offering e-commerce designing and service in affordable price....

    ReplyDelete
  7. very informative blog. Helps to gain knowledge about new concepts and techniques. Thanks for posting information in this blog
    Hadoop Training in Chennai

    ReplyDelete
  8. Nice..Its informative...You have clearly explained about the concept..Its very useful for me to understand..Keep on sharing..
    SAS training in chennai

    ReplyDelete
  9. HTML5 is the recently arrived most trending technology that has bright future. If you are interested in studying HTML5 training visit this website.
    html5 training in chennai | html5 training chennai | html5 course in chennai

    ReplyDelete
  10. I will be really happy to see this. It is a incredibly beneficial subject that you will be chosen. continue.guerrilla marketing strategies

    ReplyDelete
  11. Great Article I love to read your articles because your writing style is too good, its is very very helpful for all of us and I never get bored while reading your article because it becomes more and more interesting from the starting lines until the end. So Thank you for sharing a COOL Meaningful stuff with us Keep it up..!

    SAP training in Chennai

    ReplyDelete
  12. The strategy you have posted on this technology helped me to get into the next level and had lot of information in it. The Struts, Spring, Hibernate are the advanced level of programming language which are most widely used.
    hibernate training in chennai | hibernate training

    ReplyDelete
  13. Ethical hacking describes hacking performed by a company or individual to help them to identify potential threats on a computer or network.
    Ethical hacking Course in Chennai | Ethical hacking Training in Chennai

    ReplyDelete
  14. لدينا مميزات في خدمات كشف تسربات التي تقدمها شركة ركن البيت التي تكون متخصصة فيها فتعاملك مع شركة كشف تسربات المياه بالدمام لديها امكانيات جيدة يساعدك علي التخلص من مشاكل التسريب التي توجد لديك بسهولة دون التعرض للخطر حيث نمتلك في شركة كشف تسربات بالدمام الامكانيات والفنين المتميزين الذين يقدمون الخدمة بتميز فاذا كنت فى حيرة من امر التسريب الذي يوجد لديك فعليك ان تعلم ان خدماتنا منتشرة في جميع انحاء المملكة مثل خدمات شركة كشف تسربات المياه بالرياض التي تحل لك المشاكل المتكررة المتعلقة بالتسربات فلا داعى للقلق من الان لانك سوف تملك فني جيد منزلك يحل لك كل مشاكل التسربات و كيفية القيام بهذه الخدمة وتذكر ان الحل الامثل فى شركة كشف تسربات بالرياض ان توفر كل الامكانيات التى تساعدك علي حل مشكلاتك

    ReplyDelete
  15. Very useful content thanks for sharing such a informative content which provided me the required information on the various technology.
    AngularJS Training in Chennai | AngularJS course in Chennai

    ReplyDelete

  16. كما تقدم الشركة شركة القائد عميلى العزيز اتصل بنا على شركة القائد وسوف نصلك اينما كنت نحن نهتم بالعميل جدا افضل شركة تنظيف بيوت بالدمام تنظيف منازل كبير يتم العامل بتنظيف الشقق باحدث المنظفات ويقوم بتنظيف الحوائط والارضيات على اكمل وجة لان  الشقه الكبيرة تحتاج الى عمال ممتازون وعمال جيدون فى مجال التنظيف ولزم الشقه الكبيرة تحتاج عمال كتير جدا لان الشقة الكبيرة تحتاج الى شركة القائد لان شركة القائد لديها عمال كتير جدا وهم يعملون فى شركتنا منذ سنوات كثيره جدا ويقوم بتنظيف المطابخ على اكمل وجه وتنظيف الشقق الصغيره عن طريق التنظيف بالمطهرات ويوجد لدين فى الشركة كل عامل لهو جوند يتم التنظيف بهاذا الجوند لاداعى للقلق شركة تنظيف بالدمام ويقوم المنظف بتنظيف الحمامات على اكمل وجة حيث ان عمالنا لديهم الخبرة فى تنظيف الحمامات الكبيرة ام الصغيرة ونحن افضل شركة تنظيف منازل بالدمام التنظيف هو عبارة عن تنظيف البيت كامل ويشمل جميع التنظيف شركتنا هى تعمل على تنظيف الفلل والشقق بالدمام عميلى العزيز اذا كنت تريد افضل شركة تنظيف منازل بالدمام اتصل بنا على افضل شركة فى الدمام اتصل بنا على افضل شركة تنظيف بالرياض ونحن نعمل داخل وخارج بجازان شركتنا تعمل فى جميغ انحاء المملكة العربية السعودية كما نقدم لكم خدمة التنظيف بجازان على اكمل وجة وفى الفترة الاخيرة تعد شركة القائد من افضل وارخص الشركات الموجودة فى جازان وفى الخبر ونحن نعمل فى الخبر وفى جازان وفى جميع انحاء المنطقة الشرقية شركة تنظيف بجازانعمال شركة القائد فى بالدمام يعملون على المكافحة باحدث الاجهزة الحديثة الموجودة فى شركة القائد نحن فى شركتنا لدينا جميع العمال الذين يعملون فى المكافحة والرش بالدمام هذه الشركة هى الشركة الممتازه فى الدمام اتصل بنا الان على افضل شركة مكافحة النمل الابيض بالدمام نحن نعمل فى ينبع منذ اكثر من سنوات كثيرة شركة مكافحة حشرات بالدمام عمال شركة القائد يعملون فى المكافحة منذ اكثر من اعوام كثيرة جدا اتصل الان نصلك عبر الهاتف المحمول عميلى العزيز انت تعلم ان شركة القائد هى الشركة الوحيدة التى تمتلك كبر عدد فى بجازان من الاجهزة الحديثة والمعدات الموجودة فى شركة القائد نحن نعمل فى جازان وفى جميع انحاء المملكة العربية السعودية تقدم شركة القائد افضل وارخص شركة مكافحة الفئران والصراصير بجازان كما تقدم شركة القائد افضل شركة مكافحة حشرات بجازان افضل الخدمات فى جازان منها شركة مكافحة حشرات بجازان ونحن فى جازان نعمل على مدار 24 ساعة يومين ولا نمل من مكافحة الحشرات لان الحشرات هى الوحيدة التى تسبب للاطفال امراض كثيره وكما تقدم شركة القائد خدمةشركة تسليك مجارى بالرياض نحن افضل شركة تسليك مجارى بالرياض اتصل بنا على افضل شركة فى الرياض لان شركة القائد من الشركات التى تمتلك الخبرة والكفائه العالة وهى التى تمتلك اكبر عدد من الاجهزة التى تستخدمها فى مجال تسليك المجارى بالرياض. تقدم الشركة افضل شركة نقل اثاث بجازان شركة القائد هى التى تعمل فى بجازان باحدث الاجهزة الحديثة الموجودة فى جازان اتصل بنا على افضل شركة نقل اثاث بجازان نحن الافضل فى جازان شركتنا من الشركات الموجوده فى جازان هى الشركة الوحيدة التى تمتلك اكبر عدد من السيارات لنقل الاثاث ونقل العفش بجازان اتصل بنا الان على افضل شركة نقل اثاث بجازان نصلك اينما كنت وفى اسرع وقت ممكن.

    ReplyDelete
  17. Well Said, you have furnished the right information that will be useful to anyone at all time. Thanks for sharing your Ideas.
    Web Designing Course in Chennai | web designing training in chennai

    ReplyDelete
  18. Nice interesting information on the latest arrived technology which helped me to get update according to the recent trends.
    Salesforce Training in Chennai | Salesforce Course in Chennai

    ReplyDelete
  19. Very interesting content which helps me to get the in depth knowledge about the technology. To know more details about the course visit this website.
    Digital marketing course in Chennai | Digital marketing training in Chennai

    ReplyDelete

  20. شركة تاج لتسليك المجارى بالدمام 0551844053 والاعتماد على حل كافة مشاكل انسداد مواسير الصرف الصحى
    شركة تسليك مجارى بالدمام
    نعمل على حل مشاكل انسداد الحمامات والمطابخ واذابة الدهون المتراكمه ويوجد تسليك للبيارات مع تنظيفها مع الضمان 3 شهور تمتلك
    افضل المعدات الحديثة والادوات التى تجعلنا دائما فى طليعة شركات التسليك بالدمام ولا تقل اهمية عن شركة طيوب لتسليك المجارى بالدمام
    شركة تسليك مجارى بالقطيف
    شركة تسليك مجارى بالخبر
    شركة تسليك مجارى بالجبيل
    شركة تسليك مجارى بصفوى وسيهات وراس تنورة
    شركة تسليك مجارى بالاحساء
    شركة طيوب لتسليك المجارى بالدمام
    شركة طيوب لتسليك المجارى بالقطيف
    شركة طيوب لتسليك المجاري بالخبر
    شركة رش مبيد بالدمام والخبر

    ReplyDelete

  21. شركة تاج لمكافحة الحشرات بالمملكة العربية السعودية 0551844053 من اوائل الشركات التى تتميز بالقضاء على الحشرات ابادة فورية
    وتامه مع الضمان القضاء على كافة انواع الحشرات الزاحفه والطائرة (النمل - الصراصير -البق - الثعابين_ الوزغ_ النمل الابيض _ الفئران
    ويوجد قسم خاص وعروض هائله لرش الدفان ومكافحة النمل الابيض بالدمام والرياض
    شركة مكافحة الحمام بالدمام والخبر
    شركة مكافحة حشرات بالدمام
    شركة مكافحة حشرات بالقطيف
    شركة مكافحة حشرات بالجبيل
    شركة مكافحة حشرات بالخبر
    شركة مكافحة النمل الابيض بالدمام
    شركة رش دفان بالرياض
    شركة مكافحة حشرات بالرياض
    شركة مكافحة الحمام بالجبيل والقطيف
    شركة مكافحة حشرات بالاحساء

    ReplyDelete
  22. توفر الشركة لعملاؤها الكرام الكثير من خيارات و برامج عمليات تنظيف المنازل
    شركة تنظيف منازل بالجبيل
    وخبرتنا العملية و استطلاعنا الدائم لسوق خدمات تنظيف الشقق يؤكد لكم عملاؤنا الكرام انكم حتما ستجدون ما يناسب
    احتياجاتكم ضمن شرائحنا المختلفة والمتعددة المصممة خصيصا لتلبى مختلف احتياجاتكم فى اعمال تنظيف المنازل بالجبيل
    تنظيف المنازل بالقطيف انتشر بكثرة بين الناس لضمان الحصول على افضل اسعار تنظيف الشقق ذلك لأن شركات التنظيف لديها من
    العمالة ما يكفي لأنجاز المهام فى اقل مدة زمنية، ايضاَ كل شركة تنظيف من المفروض ان يتوفر بها ماكينات تنظيف مخصصة فى
    تنظيف الفلل و تنظيف القصور ونظافة المنازل وكل ماكينة تنظيف تقوم بمهام معينة يصعب على ربة المنزل القيام بها بمفردها
    مثل تنظيف القماش و لهذا يفضل إسناد المهمة إلي افضل شركة تنظيف منازل بالقطيف شركة تاج الافضل دائما 0551844053
    شركة تنظيف بالجبيل
    شركة تنظيف سجاد بالجبيل
    شركة تنظيف شقق بالجبيل
    شركة تنظيف فلل بالجبيل
    شركة تنظيف مجالس بالجبيل
    شركة تنظيف منازل بالقطيف
    شركة تنظيف مجالس بالقطيف
    شركة تنظيف سجاد بالقطيف
    شركة تنظيف شقق بالقطيف

    ReplyDelete
  23. خدمات شركة ركن الامثل بمدينة الجبيل 0502644550

    تقدم شركة ركن الامثل افضل العروض والخصومات بعملائها بمدينة الجبيل ومن خدماتنا التى تشمل تقديم كافة الخدمات المنزلية ومنها :
    شركة تنظيف منازل بالجبيل
    وغيرها من الخدمات المنزلية التى تهدف دائما الي العناية والتركيز على كافة مشاكل عملائنا الكرام

    شركة تسليك مجاري بالجبيل
    شركة تنظيف خزانات بالجبيل
    شركة مكافحة حشرات بالجبيل
    شركة رش مبيدات بالجبيل
    شركة كشف تسربات المياه بالجبيل
    شركة تنظيف سجاد بالجبيل
    شركة تنظيف شقق بالجبيل
    شركة تنظيف فلل بالجبيل
    شركة تنظيف مجالس بالجبيل

    ReplyDelete

  24. خدمات شركة ركن الامثل بمدينة الدمام 0502644550

    شركة ركن الامثل للخدمات المنزلية بالدمام وتقدم الشركة افضل ما لديها فى خدمات الصيانة والبحث دائما عن كافة الحلول للمشاكل
    الموجودة لدي عملائها الكرام ومنها شركة تسليك مجاري بالدمام
    وتختص الشركة دائما بكونها من افضل وارخص الشركات الموجودة بالدمام ك ارخص شركة تسليك مجاري بالدمام
    ومن خدمات شركة ركن الامثل بمدينة الدمام ومنها على سبيل المثال :
    شركة طيوب لتسليك المجاري بالدمام
    شركة طيوب للمجاري
    شركة مكافحة حشرات بالدمام
    شركة كشف تسربات المياه بالدمام
    شركة تنظيف مجالس وكنب بالدمام والخبر

    ReplyDelete
  25. خدمات شركة ركن الامثل بمدينة القطيف 0502644550

    شركة ركن الامثل من افضل الشركات التى تقدم الخدمات المنزلية بشكل كامل ونهائي ومنها تسليك المجارى وتنظيف
    شامل للمنازل والشقق والفلل شركة تسليك مجاري بالقطيف
    كافضل شركة لتسليك المجاري بالمنطقة الشرقيه وتنظيف وشفط البيارات بالقطيف من خلال احدث السيارات وتسليك لبلاعات وصفايات الحمامات
    والمطابخ مع اضافة المواد الخاصة لتفتيت واذابة الدهون ارخص شركة تسليك مجاري بالقطيف

    ومن الخدمات المنزلية المقدمة من شركة ركن الامثل بالقطيف ومنها على سبيل المثال :

    شركة طيوب للمجاري بالقطيف
    شركة طيوب لتسليك المجاري بالقطيف
    شركة مكافحة حشرات بالقطيف
    شركة كشف تسربات المياه بالقطيف
    شركة كشف تسربات المياه بالاحساء
    شركة كشف تسربات المياه بسيهات وراس تنورة



    ReplyDelete
  26. Web analytics is the study of the behaviour of website visitors. Web analytics especially refers to the use of data collected from a web site to determine which pages of the website meet user requirement and helps business objectives.
    seo log analyzer

    ReplyDelete