如何保存 2 个以上的日志文件?

如何保存 2 个以上的日志文件?

为了查找偶尔出现的启动问题,我希望在日志文件中保留现在保留的 2 个以上的文件。例如,在 /var/log 中,我有 Xorg.0.log 和 Xorg.0.log.old,它们是由两次启动创建的,我需要跟踪例如最后 10 个日志文件。其他主日志文件(如 dmesg)也类似(现在是 dmesg 和 dmesg.0)。

答案1

以下脚本将复制已定义的日志文件 ( source)(最多可定义一个数量max_number,脚本现在最多为 99 个)到您可以设置的目录中(dest)。日志文件将命名为“01logfilename”、02logfilename 等,最多可定义一个数量。

如果达到最大副本数,脚本将始终保留最后(定义)数量的日志,并在每次运行脚本时重命名文件。

您可以通过将脚本添加到启动应用程序(Dash > 启动应用程序)来运行该脚本。请注意,如果您在登录时运行它,则需要对目标具有足够的权限。

剧本

#!/usr/bin/python3
import os
import shutil

source = "/path/to/logfile"
dest = "/path/to/destination/to_keep_the_logs"
max_number = 10 # set number up to 99

files_indest = [i for i in sorted(os.listdir(dest)) if not i.endswith("~")]
sections = [(item[:3], item[3:]) for item in files_indest]
number_oflogs = len(files_indest)

def convert_figures(number):
    if len(str(number)) < 2:
        return "0"+str(number)
    else:
        return str(number)

def lognumbers():
    return [convert_figures(number+1) for number in range(0, number_oflogs+1)]

lognumbers = lognumbers()

if number_oflogs >= max_number:
    os.remove(dest+"/"+files_indest[0])
    for index in range(1, number_oflogs):
        shutil.move(dest+"/"+files_indest[index],
        dest+"/"+lognumbers[index-1]+files_indest[index][2:])
    shutil.copyfile(source, dest+"/"+lognumbers[-2]+source.split("/")[-1])
else:
    shutil.copyfile(source, dest+"/"+lognumbers[-1]+source.split("/")[-1])

如何使用

  • 复制脚本并粘贴到空文本文件中,并将其保存为 logscript.py
  • source在(例如source = "/var/log/Xorg.0.log")之后设置源(日志)文件
  • 设置目标文件夹,用于保存日志文件,之后dest
  • 设置保留的最大日志文件数量
  • 将以下命令添加到启动应用程序:python3 /path/to/script/script.py

不用说,如果您想/需要在登录前运行脚本,您需要在另一个级别启动它。

答案2

Ubuntu 在 cron 任务中运行 logrotate,负责处理 /var/log。似乎他们针对桌面与服务器对其进行了配置(如果我没记错的话,服务器会保留所有内容的最后 8 条日志)。这是该文档的作者。 http://manpages.ubuntu.com/manpages/jaunty/man8/logrotate.8.html

相关内容