`
z2009zxiaolong
  • 浏览: 77120 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

Rails日志分析-将日志导出为csv

    博客分类:
  • Ruby
阅读更多

众所周知,Rails的日志文件是文本类型的,如果要对日志文件进行分析时,比如延迟分析,不能像看图表一样直观。

我们可以先将日志文件转换为excel格式的xls、csv文件,然后转换成图表格式。

 

#encoding:utf-8
require "csv.rb"

log_file_path = "production.log"
# csv_file_path = log_file_path.match('(\w+)\.log')[1] + ".csv"
csv_file_path = "log.csv"

puts "limit response time(default 0ms):"
(limit_response_time = gets.to_i) >= 0 ? limit_response_time : 0

def response_regex
	'Completed \d+ \w+ in (\d+)ms'
end

def get_status(paragraph)
	request_regex = 'Started GET \"(\/.*)\" for ([\d]+\.[\d]+\.[\d]+\.[\d]+) at [\d]*-([\d]*-[\d]* [\d]*:[\d]*:[\d]*)'
	controller_regex = 'Processing by ([\w]+#[\w]+)'

	if paragraph.match(request_regex) != nil
		request_url = paragraph.match(request_regex)[1]
		request_host = paragraph.match(request_regex)[2]
		request_at =  paragraph.match(request_regex)[3]
	end

	if paragraph.match(controller_regex) != nil
		controller_name = paragraph.match(controller_regex)[1]
	end

	if paragraph.match(response_regex) != nil
		total_time = paragraph.match(response_regex)[1]
	end

	request_status = [request_url, request_host, request_at, 
		controller_name, total_time]
	# request_status.each do |each_status|
	# 	puts each_status
	# end
	request_status
end

CSV.open(csv_file_path, "wb:gbk") do |csv|
	csv << ["请求发送的地址", "请求发送的主机", "请求发送的时间", "请求回复的模块名称","响应时间(ms)"]
	File.open(log_file_path, "r:utf-8") do |file|
		paragraph = ""
		begin_flag = false
		# 对每一行进行判断
		file.each do |line|
			# 以"Started GET "开头为一个paragraph
			if line.start_with?("Started GET ")
				if !begin_flag
					begin_flag = true
					paragraph.concat(line)
				else
					# 另一个paragraph的开头
					# puts paragraph
					# gets
					
					if (paragraph.match(response_regex) != nil)
						if paragraph.match(response_regex)[1].to_i >= limit_response_time
							csv << get_status(paragraph)
						end
					end
					begin_flag = true
					paragraph = line	
				end
			else
				if begin_flag
					paragraph.concat(line)
				else
					# p "无效日志行"
				end
			end
		end 
	end
end

 

 生成的csv格式如下图所示:

log.png

1
0
分享到:
评论

相关推荐

    rails-dev-box, 面向 Ruby on Rails 核心开发的虚拟机.zip

    rails-dev-box, 面向 Ruby on Rails 核心开发的虚拟机 用于 Ruby on Rails 核心开发的虚拟机简介注意:这个虚拟机不是为 Rails 应用程序开发而设计的,只是为。 这个项目自动设置开发环境,以便在 Ruby on Rails ...

    to_csv-rails:导出到 csv 文件

    导出为CSV on Rails的 这个简单的插件使您能够调用 to_csv 到一系列活动记录。 除了 :include 之外,构建器选项与 to_json / to_xml 相同。入门 在您的 Gemfile 中: gem 'to_csv-rails' # Last officially released...

    Ruby-Rails日志分析器查看您的视图渲染的速度

    例如,`File.readlines('path/to/logfile.log')` 可以将日志文件的每一行作为一个元素存入数组。 2. **解析日志条目**:Rails的日志格式通常包含时间戳、请求类型、URL、HTTP状态码以及执行时间等信息。使用正则...

    rails-documentation-2-0-2

    rails-documentation-2-0-2

    rails-exporter-源码.rar

    源码分析将帮助我们深入理解其内部工作原理,以便更好地利用它来优化我们的应用。 一、Rails 框架基础 Rails 是 Ruby 语言的一个 web 开发框架,以其 MVC(Model-View-Controller)架构闻名,提供了一套高效、简洁...

    rails-beginner-s-guide

    rails-beginner-s-guide是Rails 指导手册,帮组学习了解rails开发

    rails应用--导航栏实例工程

    在本项目"rails应用--导航栏实例工程"中,我们将探讨如何在Ruby on Rails框架下构建一个实用的导航栏。Rails是一个流行的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,使得开发过程更加高效且结构...

    sclo-ror42-rubygem-rails-html-sanitizer-1.0.3-1.el7.noarch.rpm

    官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装

    rails-react-components-源码.rar

    本文将深入探讨"rails-react-components-源码.rar"中的关键知识点,帮助开发者理解如何在Rails应用中集成React组件。 1. **React组件化开发** React的核心概念是组件,它允许我们将UI拆分为独立、可重用的部分。在...

    rails-dev-box:用于Ruby on Rails核心开发的虚拟机

    用于Ruby on Rails核心开发的虚拟机 介绍 请注意,该虚拟机并非为...host $ cd rails-dev-box host $ vagrant up 而已。 安装完成后,您可以使用以下命令访问虚拟机: host $ vagrant ssh Welcome to Ubuntu 20.10

    rails-documentation-1-2-0-rc1.chm

    rails-documentation-1-2-0-rc1.chm

    rails-documentation-1-2-1.zip

    标题 "rails-documentation-1-2-1.zip" 暗示这是一份关于 Ruby on Rails 框架的文档,版本为 1.2.1。Ruby 是一种面向对象的编程语言,而 Rails 是一个基于 Ruby 的开源 Web 应用程序框架,遵循 Model-View-...

    rails-ftw-v0.18-2.1.5-4.1.8

    rails-ftw-v0.18-2.1.5-4.1.8.exe用于在windows环境下搭建readmine环境

    rails-2.1.0-gem

    "rails-2.1.0-gem"是Rails框架的一个特定版本,即2.1.0的gem包,用于在Ruby环境中安装和管理Rails框架。 Rails的核心理念是“约定优于配置”(Convention over Configuration),这意味着开发者可以遵循一套预设的...

    rails-chm-2-0-2.rar

    `rails-documentation-2-0-2.chm` 文件详细涵盖了这些概念,包含了关于Rails 2.0.2的API参考、教程和指南。通过仔细阅读和实践,开发者能够深入理解Rails的工作原理,并有效地开发出高效、可维护的Web应用。

    rails-yelp-mvp-源码.rar

    【标题】"rails-yelp-mvp-源码" 指的是一个基于Rails框架开发的类似于Yelp(美国知名餐饮评论网站)的最小可行产品(Minimum Viable Product, MVP)的源代码。Rails是Ruby编程语言的一个流行Web开发框架,以其“约定...

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    ### Ruby on Rails Guides v2 - Ruby on Rails 4.2.5 #### 一、重要概念及基础假设 - **重要概念**:本指南旨在帮助...随着对Rails的深入了解,你将会发现更多高级特性和应用场景,为实际项目开发提供更多可能性。

    rails-development-environment-master.rar

    标题 "rails-development-environment-master.rar" 暗示这是一个关于Ruby on Rails开发环境的压缩包。Rails是基于Ruby语言的一个开源Web应用框架,遵循MVC(Model-View-Controller)架构模式,广泛用于构建数据库...

    关于rails 3.1 cucumber-rails 1.2.0

    Rails 3.1 和 Cucumber-Rails 1.2.0 是两个在Web开发领域非常重要的工具,尤其对于Ruby on Rails框架的测试和自动化流程。本文将深入探讨这两个组件,以及它们如何协同工作来增强软件开发的效率和质量。 首先,...

Global site tag (gtag.js) - Google Analytics