如何在不崩溃的情况下查看’/ var / log / syslog’内容

由于各种原因,我有必要在/var/log/syslog检查我的计算机的/var/log/syslog ,但这已经成为一个问题,因为我实际上无法查看该文件中的日志,因为每次我打开它(无论我使用哪个程序)都会崩溃。 例如,如果我在nanogeditcat甚至主日志查看程序中打开它,我会遇到这样的崩溃,因为要加载的文件中有太多数据:

主日志veiwer GUI崩溃

所以我的问题是,如何在没有查看器崩溃的情况下查看syslog ? 难道我做错了什么? 或者只是一个更好的方式,每个人都使用,我不知道?


OS信息:

 Description: Ubuntu 15.04 Release: 15.04 

TL; DR:

问题是由于文件var/log/syslog大小非常大,特别是ufw定期UFW_AUDIT大量的UFW_AUDIT日志。 要解决这个问题,我们需要在ufw配置文件/etc/ufw/ufw.conf中将ufwLOGLEVEL设置为low

 sudo sed -i '/^LOGLEVEL/s/=.*/=low/' /etc/ufw/ufw.conf 

来自man ufw

 Loglevels above medium generate a lot of logging output, and may quickly fill up your disk. Loglevel medium may generate a lot of logging output on a busy system. 

细节 :

错误可能有很多原因

 Stream has outstanding operation 

显示。 最常见的两个是文件太大而无法读取,文件具有无法读取的exception内容。

起初我们考虑了第一个原因,即文件太大(我将逐步显示步骤,因为我们已经完成了):

  • 首先,我们需要检查/var/log/syslog中有多少行,结果certificate这很不寻常:

     $ wc -l /var/log/syslog 1308061 /var/log/syslog 
  • 由于文件有1308061行数很大,我们需要检查如何为logrorate配置logrorate

     sed -n '/\/var\/log\/syslog/,/^}$/p' /etc/logrotate.d/rsyslog 

这表明/var/log/syslog将每天轮换,删除超过一周的日志,这是默认值。

  • 接下来,我们需要检查/var/log/syslog以查看哪个进程正在使用以下命令将大多数日志写入文件:

     less /var/log/syslog | tr -s ' ' | cut -d' ' -f5 | sort | uniq -c | sort -rn 

这将向我们展示以降序编写文件中大多数行的过程。 我们发现kernel写入文件最高,计数非常高(1761519)。 接下来是thermald ,它的几个进程写了​​大约5K次。

  • 考虑到1kernel1作为此exception的来源,我们检查了/var/log/syslog中定期发生的模式:

     grep "kernel" /var/log/syslog | less 

并找到了一个关于UFW AUDIT ,它非常经常地写在日志文件中。

  • 如果将LOGLEVEL设置为medium且更多,则ufw将转储这些消息。 要查找当前值:

     $ grep -i "^loglevel" /etc/ufw/ufw.conf LOGLEVEL=full 

这是问题的根源,要摆脱这些常规消息,它需要LOGLEVEL=low ,在大多数情况下应该足够了。 来自man ufw

 low logs all blocked packets not matching the default policy (with rate limiting), as well as packets matching logged rules. 

检查man ufwLOGGING部分,以便更好地了解ufw日志记录。

尝试less /var/log/syslog

按shift-f转到文件末尾并监视tail -f /var/log/syslog等更改

您应该看到您的日志文件。

必须有一些垃圾或可能阻止Syslog应用程序查看它们的大小问题。 因此,重命名它并尝试再次打开Syslog应用程序。 您应该能够看到新的日志文件。