# strace-log-merge

## NAME



           strace-log-merge - merge strace -ff -tt output
    


## SYNOPSIS



           **strace-log-merge** _STRACE_LOG_
    
           **strace-log-merge --help**
    


## DESCRIPTION



           **strace-log-merge** merges log files produced by the **strace -ff**
           **-tt[t]** command.  It prepends the Process ID (PID) to each line and
           sorts the combined output chronologically by timestamp.
    


## OPTIONS



           **--help** Show program usage and exit.
    
           _STRACE_LOG_
                  Specifies the file name prefix for the log files produced
                  by a **strace -ff -tt[t]** command.  The utility will read all
                  files matching the STRACE_LOG.* pattern.
    


## EXIT STATUS



           **0** Success
    
           **Non-zero**
                  An error occurred.  This can be due to a missing argument
                  (in which case usage information is printed) or a failure
                  during the processing of the _STRACE_LOG_.*  files.
    


## USAGE EXAMPLE



           $ strace -o sleepy -ff -tt -e trace=execve,nanosleep \
                   sh -c 'sleep 0.1 & sleep 0.2 & sleep 0.3'
           $ strace-log-merge sleepy | fold -w 72 -s
           13475 21:13:52.040837 execve("/bin/sh", ["sh", "-c", "sleep 0.1 & sleep
           0.2 & sleep 0."...], 0x7ffde54b2450 /* 33 vars */) = 0
           13478 21:13:52.044050 execve("/bin/sleep", ["sleep", "0.3"],
           0x5631be4f87a8 /* 33 vars */) = 0
           13476 21:13:52.044269 execve("/bin/sleep", ["sleep", "0.1"],
           0x5631be4f87a8 /* 33 vars */) = 0
           13477 21:13:52.044389 execve("/bin/sleep", ["sleep", "0.2"],
           0x5631be4f87a8 /* 33 vars */) = 0
           13478 21:13:52.046207 nanosleep({tv_sec=0, tv_nsec=300000000}, NULL) = 0
           13476 21:13:52.046303 nanosleep({tv_sec=0, tv_nsec=100000000}, NULL) = 0
           13477 21:13:52.046318 nanosleep({tv_sec=0, tv_nsec=200000000}, NULL) = 0
           13476 21:13:52.146852 +++ exited with 0 +++
           13475 21:13:52.146942 --- SIGCHLD {si_signo=SIGCHLD,
           si_code=CLD_EXITED, si_pid=13476, si_uid=1000, si_status=0, si_utime=0,
           si_stime=0} ---
           13477 21:13:52.247782 +++ exited with 0 +++
           13475 21:13:52.247885 --- SIGCHLD {si_signo=SIGCHLD,
           si_code=CLD_EXITED, si_pid=13477, si_uid=1000, si_status=0, si_utime=0,
           si_stime=0} ---
           13478 21:13:52.347680 +++ exited with 0 +++
           13475 21:13:52.347786 --- SIGCHLD {si_signo=SIGCHLD,
           si_code=CLD_EXITED, si_pid=13478, si_uid=1000, si_status=0, si_utime=0,
           si_stime=0} ---
           13475 21:13:52.348069 +++ exited with 0 +++
    


## NOTES



           _strace-log-merge_ may fail to correctly sort logs that were
           generated with **-tt** and span across midnight.  This is because the
           standard **-tt** timestamp lacks date information, which is required
           for proper sorting.  Using the **-ttt** option with **strace** solves this
           problem, as its timestamp format includes the date.
    


## BUGS



           _strace-log-merge_ does not validate the format of the input files.
           It assumes that all files matching the _STRACE_LOG_.*  glob pattern
           are correctly formatted log files from a single **strace** session.
    


* * *