是否有一种简单的方法可以仅使用 shell 脚本在日志文件前面插入数据/时间?

是否有一种简单的方法可以仅使用 shell 脚本在日志文件前面插入数据/时间?

假设我想在一夜之间监控一个 Java 进程的内存使用情况。

我可以做类似的事情

顶部 | grep java > out.log

我将得到一个包含很多行内容的日志文件。

有没有简单的方法可以在每行前面插入数据/时间?

答案1

不要重新发明轮子。使用以下命令将消息写入系统日志:记录器(1),几乎所有 Unix 版本都支持它。Syslog 将为您处理时间戳。您的日志数据将存储到系统日志中,例如/var/log/messages(这是可配置的)。您无需担心稍后清理日志文件(特别是如果此作业永远运行),因为系统日志由 logrotate/newsyslog 自动轮换。

top | grep java | logger -t java_cpuhog

或者,如果你确实想将其写入你自己的文件。但之后你需要清理文件:

top | grep java | logger -t java_cpuhog -f /var/log/java-top.log

答案2

... | awk -f timetag.awk > ...

时间标签.awk:

{
  print "[" strftime() "] " $0
}

答案3

在 shell 中: top | grep java | while read LINE ; do date "+%F %T ${LINE}" ; done

答案4

您可以创建类似stamp包含

#!/usr/bin/perl -p
s/^/localtime()." "/e;

然后运行

top -b | grep java | stamp > out.log

如果您不是以交互方式使用它,请不要忘记使用top -b。当然,top 每次运行时都会添加一个时间戳。如果您不一定需要每行上的日期,只需单独使用 top 即可,因为它会在每次迭代上添加一个时间戳。我有时会使用它来获取一整天的 10 秒样本,以便稍后查看:

top -b -d 10 -c -n 8640

相关内容