我正在尝试在python中创建一个脚本,该脚本连续ping特定主机并将其结果打印到每日轮换的日志文件中。 应保留最近30天的日志,所有旧的日志都应删除。 我绝对没有使用python的经验。
答案 0 :(得分:0)
您可以使用标准的python日志记录模块:
下面是使用日志记录包中“ TimedRotatingFileHandler”的代码示例。基本上,我们创建了一个日志记录处理程序,该程序将登录文件30天,然后将其替换为新文件。每次我们使用log方法时,日志都会自动进入该文件。 对于ping部分,我们使用子进程包,并在后台运行ping命令以捕获其输出。
string searchName = Console.ReadLine();
if (PeopleList.Contains(new People {
Name = searchName
})) {
//Display name, age, address here
} else {
Console.WriteLine("Name not found");
}
当您定义构造函数“ TimedRotatingFileHandler”时,您可以传递如下参数:
(路径)名称为日志文件的路径
(当是)间隔类型时,我们用“ d”表示“ day”,其他可能的值为“ m”,“ s”,“ h”
(interval)实际间隔为整数,我们定义了30天
(backupCount)那里有多少个日志副本,如果指定的副本数大于1,则会保留更多日志文件
如果您想实时测试它,请将“ d”替换为“ s”(秒)
该脚本需要保持运行才能正常工作。
您可以在linux shell中在后台运行它:
import logging
import time
import subprocess
from logging.handlers import TimedRotatingFileHandler
def ping_host(path, hostname, ping_delay=20):
""""""
logger = logging.getLogger("Rotating Log")
logger.setLevel(logging.INFO)
handler = TimedRotatingFileHandler(path,
when="d",
interval=30,
backupCount=1)
logger.addHandler(handler)
while True:
response = subprocess.Popen(["/bin/ping", "-c1", "-w100",
hostname], stdout=subprocess.PIPE).stdout.read()
logger.info("Ping at {0}, result: {1}".format(time.time(),
response))
time.sleep(ping_delay)
if __name__ == "__main__":
hostname = "google.com"
log_file = "timed_test.log"
ping_host(log_file, hostname)