Skip to content

Commit 453ae4c

Browse files
committed
添加lograge日志配置
1 parent ecf2d69 commit 453ae4c

8 files changed

Lines changed: 632 additions & 16 deletions

File tree

Gemfile

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,9 @@ gem "omniauth-github"
133133
gem "omniauth-wechat-oauth2"
134134

135135
# 使用JWT实现Token认证
136-
gem 'jwt', '~> 2.1'
136+
gem 'jwt'
137+
# 符合 JWT (JSON Web Token) 规范的认证 API
138+
gem 'knock'
137139

138140
# grape 可以帮助我们快速的构建和 Rails 完美融合的 API 接口。
139141
gem 'grape'
@@ -163,6 +165,9 @@ gem 'graphql', '~> 1.9'
163165
# RPC远程过程调用
164166
# gem 'grpc'
165167

168+
# 用于处理跨域资源共享(CORS)的机架中间件,这使得跨域AJAX成为可能。
169+
# gem 'rack-cors'
170+
166171
# 文档工具
167172
# gem "sdoc", "~> 1.0.0.rc3"
168173

@@ -197,6 +202,20 @@ gem "rack-attack"
197202
gem "bugsnag", "~> 6.12"
198203
gem "uniform_notifier"
199204

205+
# URL 友好的 ID,可以把一些不想暴露的url地址中的信息给使用id替代掉。
206+
gem 'friendly_id'
207+
208+
# 所见即所得编辑器
209+
gem 'ckeditor'
210+
211+
# 改变 rails 默认的日志,使变得更好。更简洁且高效的显示日志内容。
212+
gem "lograge"
213+
# Logstash与Beats,Elasticsearch和Kibana一起是Elastic Stack的一部分。
214+
# Logstash是服务器端数据处理管道,它同时从多个源中提取数据,进行转换,然后将其发送到您喜欢的“stash”。
215+
gem 'logstash-event'
216+
217+
# 状态机
218+
gem 'aasm'
200219
group :development, :test do
201220
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
202221
gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
@@ -219,11 +238,11 @@ group :development, :test do
219238
# gem 'timecop'
220239

221240
# 生成文档工具
222-
# gem 'sdoc'
241+
gem 'sdoc'
223242
end
224243

225244
group :development do
226-
# web-console是RubyonRails应用程序的调试工具,报错的时候可以调试的。
245+
# web-console是RubyonRails应用程序在浏览器上的调试工具,报错的时候可以调试的。
227246
gem 'web-console', '>= 3.3.0'
228247

229248
# 监听文件变动,并你去通知修改
@@ -295,8 +314,8 @@ group :development do
295314
# 在日志中写入请求源信息
296315
gem 'active_record_query_trace'
297316

298-
# 在应用的每个页面底部显示请求信息,并链接到源码(可通过 TextMate 打开);
299-
# gem 'rails-footnotes', '~> 4.0'
317+
# 给你的MacOS的发送通知消息
318+
# gem 'terminal-notifier'
300319
end
301320

302321
group :test do

Gemfile.lock

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
GEM
22
remote: https://gems.ruby-china.com/
33
specs:
4+
aasm (5.0.8)
5+
concurrent-ruby (~> 1.0)
46
actioncable (5.2.4.2)
57
actionpack (= 5.2.4.2)
68
nio4r (~> 2.0)
@@ -111,6 +113,8 @@ GEM
111113
xpath (~> 3.2)
112114
childprocess (3.0.0)
113115
chronic (0.10.2)
116+
ckeditor (5.1.0)
117+
orm_adapter (~> 0.5.0)
114118
code_analyzer (0.5.1)
115119
sexp_processor
116120
coderay (1.1.2)
@@ -200,6 +204,8 @@ GEM
200204
flog (4.2.1)
201205
ruby_parser (~> 3.1, > 3.1.0)
202206
sexp_processor (~> 4.4)
207+
friendly_id (5.3.0)
208+
activerecord (>= 4.0.0)
203209
get_process_mem (0.2.5)
204210
ffi (~> 1.0)
205211
globalid (0.4.2)
@@ -238,7 +244,11 @@ GEM
238244
jbuilder (2.10.0)
239245
activesupport (>= 5.0.0)
240246
json (2.3.0)
241-
jwt (2.2.1)
247+
jwt (1.5.6)
248+
knock (2.1.1)
249+
bcrypt (~> 3.1)
250+
jwt (~> 1.5)
251+
rails (>= 4.2)
242252
launchy (2.5.0)
243253
addressable (~> 2.7)
244254
letter_opener (1.7.0)
@@ -247,6 +257,12 @@ GEM
247257
rb-fsevent (~> 0.9, >= 0.9.4)
248258
rb-inotify (~> 0.9, >= 0.9.7)
249259
ruby_dep (~> 1.2)
260+
lograge (0.11.2)
261+
actionpack (>= 4)
262+
activesupport (>= 4)
263+
railties (>= 4)
264+
request_store (~> 1.0)
265+
logstash-event (1.2.02)
250266
loofah (2.5.0)
251267
crass (~> 1.0.2)
252268
nokogiri (>= 1.5.9)
@@ -346,8 +362,6 @@ GEM
346362
rails-dom-testing (2.0.3)
347363
activesupport (>= 4.2.0)
348364
nokogiri (>= 1.6)
349-
rails-footnotes (4.1.8)
350-
rails (>= 3.2)
351365
rails-html-sanitizer (1.3.0)
352366
loofah (~> 2.3)
353367
rails-i18n (5.0.4)
@@ -373,6 +387,7 @@ GEM
373387
rb-fsevent (0.10.3)
374388
rb-inotify (0.10.1)
375389
ffi (~> 1.0)
390+
rdoc (6.2.1)
376391
redis (4.0.3)
377392
redis-actionpack (5.2.0)
378393
actionpack (>= 5, < 7)
@@ -401,6 +416,8 @@ GEM
401416
ruby_parser (~> 3.3)
402417
sexp_processor
403418
regexp_parser (1.7.0)
419+
request_store (1.5.0)
420+
rack (>= 1.4)
404421
require_all (3.0.0)
405422
responders (3.0.0)
406423
actionpack (>= 5.0)
@@ -487,6 +504,8 @@ GEM
487504
sprockets (> 3.0)
488505
sprockets-rails
489506
tilt
507+
sdoc (1.1.0)
508+
rdoc (>= 5.0)
490509
seed-fu (2.3.9)
491510
activerecord (>= 3.1)
492511
activesupport (>= 3.1)
@@ -569,6 +588,7 @@ PLATFORMS
569588
x86_64-darwin-17
570589

571590
DEPENDENCIES
591+
aasm
572592
active_record_query_trace
573593
annotate
574594
bcrypt (~> 3.1.7)
@@ -587,6 +607,7 @@ DEPENDENCIES
587607
capistrano-sidekiq
588608
capistrano3-puma
589609
capybara (>= 2.15)
610+
ckeditor
590611
coffee-rails (~> 4.2)
591612
database_cleaner
592613
derailed
@@ -596,6 +617,7 @@ DEPENDENCIES
596617
factory_bot_rails
597618
faker
598619
figaro
620+
friendly_id
599621
grape
600622
grape-entity
601623
grape-swagger
@@ -607,10 +629,13 @@ DEPENDENCIES
607629
hiredis (~> 0.6.1)
608630
i18n
609631
jbuilder (~> 2.5)
610-
jwt (~> 2.1)
632+
jwt
633+
knock
611634
launchy
612635
letter_opener
613636
listen (>= 3.0.5, < 3.2)
637+
lograge
638+
logstash-event
614639
meta_request
615640
mysql2
616641
omniauth
@@ -625,7 +650,6 @@ DEPENDENCIES
625650
rack-attack
626651
rack-contrib
627652
rails (~> 5.2.0)
628-
rails-footnotes (~> 4.0)
629653
rails-i18n (~> 5.0.3)
630654
rails_best_practices
631655
redis (~> 4.0.2)
@@ -647,6 +671,7 @@ DEPENDENCIES
647671
rubycritic
648672
rvm1-capistrano3
649673
sass-rails (~> 5.0)
674+
sdoc
650675
seed-fu
651676
selenium-webdriver
652677
sidekiq

Rakefile

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,24 @@
44
require_relative 'config/application'
55

66
Rails.application.load_tasks
7+
8+
# 用来配置 rdoc 用来生成文档。
9+
# 执行 rails rerdoc 就可以生成了,文档将会到 配置项中设置的 rdoc_dir 目录。
10+
# 访问可以直接找到对应的文件夹,直接在浏览器中打开index.html文件进行访问。也可以直接根目录下访问 doc/index.html
11+
require "sdoc"
12+
require "rdoc/task"
13+
14+
rdoc_files = %w[
15+
README.md
16+
app/models
17+
app/controllers
18+
app/helpers
19+
]
20+
21+
RDoc::Task.new do |rdoc|
22+
rdoc.rdoc_dir = "public/doc"
23+
rdoc.generator = "sdoc"
24+
rdoc.template = "rails"
25+
rdoc.main = "README.md"
26+
rdoc.rdoc_files.include(*rdoc_files)
27+
end

app/controllers/application_controller.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,17 @@ def extract_locale_from_header
6565
# 参考:https://github.com/rack/rack-contrib/blob/master/lib/rack/contrib/locale.rb
6666
end
6767

68+
# 定义日志中要额外添加保存的信息,信息放在 event.payload 的哈希中,可以在 config/environments/* 配置中添加的 custom_options 选项获取。
69+
def append_info_to_payload(payload)
70+
super
71+
payload[:host] = request.host
72+
end
73+
74+
# 处理不存在的路由信息。
75+
def route_not_found
76+
render file: 'public/404', status: 404
77+
end
78+
6879
private
6980

7081
# 自定义全局用户无权限操作的时候的处理方法

config/environments/development.rb

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,4 +119,43 @@
119119
# devise这个gem的配置,注意不同的环境配置内容是不同的。
120120
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
121121

122+
# 配置 lograge 的支持。一般是在生产环境下配置的。日志是保存在 #{Rails.env}.log 中。
123+
config.lograge.enabled = true
124+
# 可以添加自定义内容。
125+
config.lograge.custom_options = lambda do |event|
126+
{ time: Time.now.strftime("%Y-%m-%d %H:%M:%S"), host: event.payload[:host]}
127+
end
128+
# 可以添加一个钩子以直接访问控制器方法(例如request和current_user)。 该哈希将自动合并到日志数据中。
129+
config.lograge.custom_payload do |controller|
130+
{
131+
protocol: controller.request.protocol.match(/([a-zA-Z]*)/)[0].to_s
132+
}
133+
end
134+
# 保持rails原本的日志信息
135+
# config.lograge.keep_original_rails_log = true
136+
# config.lograge.logger = ActiveSupport::Logger.new "#{Rails.root}/log/lograge_#{Rails.env}.log"
137+
138+
# 为了进一步清理日志,您还可以告诉Lograge跳过满足给定条件的日志消息。您可以跳过某些控制器操作生成的日志消息,也可以编写自定义处理程序以根据
139+
# 日志事件中的数据跳过消息:
140+
# config.lograge.ignore_actions = ['HomeController#index', 'AController#an_action']
141+
# config.lograge.ignore_custom = lambda do |event|
142+
# return true here if you want to ignore based on the event
143+
# end
144+
145+
# Lograge支持多种输出格式。 最常见的是上述默认Lograge键值格式。 另外,您还可以生成Logstash使用的json_event格式的JSON日志。
146+
# 使用logstash输出时,需要添加 gem logstash-event
147+
config.lograge.formatter = Lograge::Formatters::Logstash.new
148+
# 可用的日志格式有:
149+
# Lograge::Formatters::Lines.new
150+
# Lograge::Formatters::Cee.new
151+
# Lograge::Formatters::Graylog2.new
152+
# Lograge::Formatters::KeyValue.new # lograge 的默认格式
153+
# Lograge::Formatters::Json.new
154+
# Lograge::Formatters::Logstash.new
155+
# Lograge::Formatters::LTSV.new
156+
# Lograge::Formatters::Raw.new # 返回一个ruby的哈希对象
157+
# 除了格式化程序,您还可以通过传递一个响应#call的对象来自己操作数据:
158+
# config.lograge.formatter = ->(data) { "Called #{data[:controller]}" } # data is a ruby hash
159+
160+
122161
end

config/environments/production.rb

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,4 +153,42 @@
153153
enable_starttls_auto: true }
154154

155155

156+
# 配置 lograge 的支持。一般是在生产环境下配置的。
157+
config.lograge.enabled = true
158+
# 可以添加自定义内容。
159+
config.lograge.custom_options = lambda do |event|
160+
{ time: Time.now.strftime("%Y-%m-%d %H:%M:%S"), host: event.payload[:host]}
161+
end
162+
# 可以添加一个钩子以直接访问控制器方法(例如request和current_user)。 该哈希将自动合并到日志数据中。
163+
config.lograge.custom_payload do |controller|
164+
{
165+
protocol: controller.request.protocol.match(/([a-zA-Z]*)/)[0].to_s
166+
}
167+
end
168+
# 保持rails原本的日志信息
169+
# config.lograge.keep_original_rails_log = true
170+
# config.lograge.logger = ActiveSupport::Logger.new "#{Rails.root}/log/lograge_#{Rails.env}.log"
171+
172+
# 为了进一步清理日志,您还可以告诉Lograge跳过满足给定条件的日志消息。您可以跳过某些控制器操作生成的日志消息,也可以编写自定义处理程序以根据
173+
# 日志事件中的数据跳过消息:
174+
# config.lograge.ignore_actions = ['HomeController#index', 'AController#an_action']
175+
# config.lograge.ignore_custom = lambda do |event|
176+
# return true here if you want to ignore based on the event
177+
# end
178+
179+
# Lograge支持多种输出格式。 最常见的是上述默认Lograge键值格式。 另外,您还可以生成Logstash使用的json_event格式的JSON日志。
180+
# 使用logstash输出时,需要添加 gem logstash-event
181+
# config.lograge.formatter = Lograge::Formatters::Logstash.new
182+
#
183+
# 可用的日志格式有:
184+
# Lograge::Formatters::Lines.new
185+
# Lograge::Formatters::Cee.new
186+
# Lograge::Formatters::Graylog2.new
187+
# Lograge::Formatters::KeyValue.new # lograge 的默认格式
188+
# Lograge::Formatters::Json.new
189+
# Lograge::Formatters::Logstash.new
190+
# Lograge::Formatters::LTSV.new
191+
# Lograge::Formatters::Raw.new # 返回一个ruby的哈希对象
192+
# 除了格式化程序,您还可以通过传递一个响应#call的对象来自己操作数据:
193+
# config.lograge.formatter = ->(data) { "Called #{data[:controller]}" } # data is a ruby hash
156194
end

config/routes.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,10 @@
7070

7171
# get "/auth/:action/callback", :controller => "authentications", :constraints => { :action => /wechat|github/ }
7272
# get "/auth/:provider/callback" => "authentications#github"
73+
74+
# 匹配未定义的路由到 application下的route_not_found 方法中。
75+
get '*unmatched_route', to: 'application#route_not_found'
76+
7377
# sidekiq的路由相关开始
7478
# 注意该路由(/sidekiq/stats)可以看到json格式sidekiq的一些状态信息。
7579
require 'sidekiq/web'

0 commit comments

Comments
 (0)