我使用以下代码跟踪ssh登录:
def follow(thefile):
thefile.seek(0,2)
while True:
line = thefile.readline()
if not line:
time.sleep(0.1)
continue
yield line
if __name__ == '__main__':
logfile = open('/var/log/auth.log', 'r')
loglines = follow(logfile)
for line in loglines:
print 'do something here'
我注意到该脚本在几天后突然停止工作。我没有任何错误,它不会终止,只会停止工作,好像readline()
永远不会返回。
所以我执行了a echo 'test' >> auth.log.1
,这的确最终被脚本处理了,因为前一段时间auth.log
将其重命名为auth.log.1
如何跟踪这种日志轮换的时间并进行相应调整?
使用e4c5的答案,我得到了这段代码,该代码还解决了readline()
每秒调用多次的问题。
在第一次调用期间,它会跳到文件末尾并等待修改。移动文件后,它将重新打开文件并读取全部内容,然后开始等待。
import os
import time
import traceback
import threading
import inotify.adapters
logfile = b'/var/log/auth.log'
#logfile = b'logfile.log'
##################################################################
def process(line, history=False):
if history:
print '=', line.strip('\n')
else:
print '>', line.strip('\n')
##################################################################
from_beginning = False
notifier = inotify.adapters.Inotify()
while True:
try:
#------------------------- check
if not os.path.exists(logfile):
print 'logfile does not exist'
time.sleep(1)
continue
print 'opening and starting to watch', logfile
#------------------------- open
file = open(logfile, 'r')
if from_beginning:
for line in file.readlines():
process(line, history=True)
else:
file.seek(0,2)
from_beginning = True
#------------------------- watch
notifier.add_watch(logfile)
try:
for event in notifier.event_gen():
if event is not None:
(header, type_names, watch_path, filename) = event
if set(type_names) & set(['IN_MOVE_SELF']): # moved
print 'logfile moved'
notifier.remove_watch(logfile)
file.close()
time.sleep(1)
break
elif set(type_names) & set(['IN_MODIFY']): # modified
for line in file.readlines():
process(line, history=False)
except (KeyboardInterrupt, SystemExit):
raise
except:
notifier.remove_watch(logfile)
file.close()
time.sleep(1)
#-------------------------
except (KeyboardInterrupt, SystemExit):
break
except inotify.calls.InotifyError:
time.sleep(1)
except IOError:
time.sleep(1)
except:
traceback.print_exc()
time.sleep(1)
##################################################################
要有效地管理Web服务器,就有必要反馈服务器的活动、性能以及出现的问题。Apache HTTP服务器提供了非常全面而灵活的日志记录功能。本文将阐述如何配置文件以及如何理解日志内容。 安全警告 任何人只要对Apache存放日志文件的目录具有写权限,也就当然地可以获得启动Apache的用户(通常是root)的权限,绝对不要随意给予任何人存放日志文件目录的写权限。细节请参见安全方面的提示。 另外,日志文
Navicat 提供数个日志文件记录在 Navicat 已运行的动作,它们在子目录 logs,例如: C:\Users\Guest\Documents\Navicat\Premium\logs\。你可以在选项中改变日志文件的位置。 HttpDump.log 保存从你的 HTTP 服务器答复的数据。 LogHistory.txt 记录在 Navicat 数据库及数据库对象上全部已运行的作业上的全部
Navicat Monitor 日志文件具有各种服务器错误和信息的详细记录。这些文件可以帮助跟踪 Navicat Monitor 的任何问题。请按照以下步骤下载日志文件: 前往“ 配置”。 点击“关于”。 滚动到“诊断”部分。 点击“检索全部日志文件”以下载包含日志文件的一份 .zip 文件。
Navicat 提供数个日志文件记录在 Navicat 已执行的操作,它们位于“logs”目录,例如:C:\Users\Guest\Documents\Navicat\Premium\logs\。你可以在选项中更改日志文件的位置。 文件 描述 history.log 保存在 Navicat 数据库和数据库对象上所有已运行的操作的所有语句或脚本。若要在“历史日志查看器”打开 history.log
Navicat 提供数个日志文件记录在 Navicat 已执行的操作,它们位于默认文件夹,例如:~/Library/Application Support/PremiumSoft CyberTech/Navicat CC/Navicat Premium/Logs。你可以在偏好设置中更改日志文件的位置。 文件 描述 QueryExec.log 保存在 Navicat 数据库和数据库对象上所有已运行的
日志路径 指定保存日志文件的路径。 写入已运行的查询的日志 保存在 Navicat 数据库和数据库对象上所有已运行的操作的所有 SQL 语句。 【提示】需要重新启动 Navicat 才生效。 写入批处理作业日志(仅适用于非 Essentials 版) 保存 Navicat 命令列进程和运行批处理作业时所有操作的信息。