<html><head><style type='text/css'>p { margin: 0; }</style></head><body><div style='font-family: arial,helvetica,sans-serif; font-size: 12pt; color: #000000'>You are very kind to go to all that trouble. In many cases I'm still using the commands I was using 10-30 years ago, and I mostly wanted to make sure a fairly standard command to do it hadn't crept in the mix along the way. Thanks also to Doug for the ruby snippet and the other help. In my case I don't have root on this particular box so using logger would have been more trouble than it's worth but I do want to learn more about customizing syslog. I see uucp is still one of the standard syslog facilities! That takes me back.&nbsp;<div><br></div><div>If this C program were to be a standard util included in Linux, I'd like to see the same time format options as the date command. Does this seem like something of general use? I can see piping a slow rsync to it or other commands that generate output periodically. Usually I suppose it would feed to a proper logging system that would put the timestamps on, but it still seems useful for ad hoc usage.</div><div><br></div><div>Scott<br><br><hr id="zwchr"><div style="color:#000;font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt;"><b>From: </b>"Horkan Smith" &lt;ale@horkan.net&gt;<br><b>To: </b>"Atlanta Linux Enthusiasts" &lt;ale@ale.org&gt;<br><b>Sent: </b>Wednesday, November 13, 2013 7:43:52 AM<br><b>Subject: </b>Re: [ale] line timestamp command<br><br>While I was procrastinating on something else....<br><br>-----begin-----<br><br>/* add_timestamp.c */<br>/* This messy, poorly commented code was authored by Horkan Smith, and I hearby release it into the public domain. No warranties expressed or implied. */<br><br>/* Copy stdin to stdout, printing the current time at the start of each line. */<br><br>#include &lt;stdio.h&gt;<br>#include &lt;stdlib.h&gt;<br>#include &lt;string.h&gt;<br>#include &lt;time.h&gt;<br><br><br>/* dump the current time to 'outstream' using 'ctime()' format w/out newline */<br>void showtime (FILE *outstream) {<br><br>&nbsp;&nbsp; time_t t;<br>&nbsp;&nbsp; char *p;<br>&nbsp;&nbsp; int len;<br><br>&nbsp;&nbsp; /* current time */<br>&nbsp;&nbsp; t = time(NULL);<br><br>&nbsp;&nbsp; /* shouldn't ever happen w/ a NULL ptr arg, but it doesn't hurt. */<br>&nbsp;&nbsp; if ( ((time_t) -1) == t ) {<br>&nbsp;&nbsp; &nbsp; perror("\ntime(NULL)");<br>&nbsp;&nbsp; &nbsp; exit(-1);<br>&nbsp;&nbsp; }<br><br>&nbsp;&nbsp; /* return a pointer to a string version of current time */<br>&nbsp;&nbsp; /* note: not thread safe - use ctime_r() if you use threads! */<br>&nbsp;&nbsp; p = ctime(&amp;t);<br><br>&nbsp;&nbsp; /* We've got to get rid of the newline at the end */<br>&nbsp;&nbsp; len = strlen(p) -1;<br><br>&nbsp;&nbsp; if ((len &gt;= 0) &amp;&amp; (*(p + len) == '\n')) {<br>&nbsp;&nbsp; &nbsp; &nbsp;*(p + len) = (char) 0;<br>&nbsp;&nbsp; }<br><br>&nbsp;&nbsp; /* could use printf, but sometimes it'll link smaller this way. */<br>&nbsp;&nbsp; fputs(p, outstream); fputc(':', outstream); fputc(' ', outstream);<br><br>}<br><br>int main (int argc, char *argv[], char *envp[]) {<br><br>&nbsp;&nbsp; FILE *instream = stdin;<br>&nbsp;&nbsp; FILE *outstream = stdout;<br>&nbsp;&nbsp; int ch;<br>&nbsp;&nbsp; int lastch;<br><br>&nbsp;&nbsp; /* the ctime() man page says ctime is asctime(localtime(&amp;t)) */<br>&nbsp;&nbsp; /* the localtime() man page suggests calling tzset before using localtime(),<br>&nbsp;&nbsp; &nbsp; &nbsp;if you want to be portable */<br>&nbsp;&nbsp; tzset();<br><br><br>&nbsp;&nbsp; /* main loop,<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; get a char<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if the last one was a newline, write the timestamp<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; write the char out<br>&nbsp;&nbsp; &nbsp;*/<br><br>&nbsp;&nbsp; lastch = '\n';<br>&nbsp;&nbsp; while (EOF != (ch = fgetc(instream))) {<br>&nbsp;&nbsp; &nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp; &nbsp;if ('\n' == lastch) {<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; showtime(outstream);<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; fflush(outstream);<br>&nbsp;&nbsp; &nbsp; &nbsp;}<br><br>&nbsp;&nbsp; &nbsp; &nbsp;fputc(ch, outstream);<br>&nbsp;&nbsp; &nbsp; &nbsp;lastch = ch;<br><br>&nbsp;&nbsp; }<br>}<br><br>------end------<br><br>On Tue, Nov 12, 2013 at 01:34:22PM -0500, Scott Plante wrote:<br>&gt; Does anyone happen to know of a command line tool that will read lines from standard input and write them to std out, pre-pending a timestamp? I have a process that emits messages to std out periodically as it processes and I'd like to write that to a log file, but with a time at the start of the line. I could do it with a script but a nice little command would be better, if it exists. <br>&gt; <br>&gt; <br>&gt; I'm looking for something that would perform the function of this script, maybe with an option for format: <br>&gt; <br>&gt; <br>&gt; while read line; <br>&gt; do <br>&gt; echo $(date +"%D %T") "$line"; <br>&gt; done <br>&gt; <br>&gt; <br>&gt; <br>&gt; Scott <br><br>&gt; _______________________________________________<br>&gt; Ale mailing list<br>&gt; Ale@ale.org<br>&gt; http://mail.ale.org/mailman/listinfo/ale<br>&gt; See JOBS, ANNOUNCE and SCHOOLS lists at<br>&gt; http://mail.ale.org/mailman/listinfo<br><br><br>-- <br>Horkan Smith<br>678-777-3263 cell, ale@horkan.net<br>_______________________________________________<br>Ale mailing list<br>Ale@ale.org<br>http://mail.ale.org/mailman/listinfo/ale<br>See JOBS, ANNOUNCE and SCHOOLS lists at<br>http://mail.ale.org/mailman/listinfo<br></div><br></div></div></body></html>