jetpack 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. data/.gitignore +4 -0
  2. data/.wrong +1 -0
  3. data/Gemfile +8 -0
  4. data/Gemfile.lock +23 -0
  5. data/README.markdown +35 -0
  6. data/Rakefile +16 -0
  7. data/bin/preflight +175 -0
  8. data/bin_files/.rake_runner.erb +36 -0
  9. data/bin_files/rake.erb +12 -0
  10. data/bin_files/ruby.erb +4 -0
  11. data/gems/bundler-1.0.18.gem +0 -0
  12. data/gems/bundler-1.1.rc.gem +0 -0
  13. data/gems/jruby-openssl-0.7.4.gem +0 -0
  14. data/install_gem.sh +5 -0
  15. data/jetpack.gemspec +19 -0
  16. data/jetty_files/etc/fake.p12 +0 -0
  17. data/jetty_files/etc/jetty.xml.erb +113 -0
  18. data/jetty_files/jetty-init.erb +702 -0
  19. data/jetty_files/run/.gitkeep +0 -0
  20. data/jetty_files/start.ini +69 -0
  21. data/jetty_files/webapps/.gitkeep +0 -0
  22. data/lib/preflight/settings.rb +48 -0
  23. data/script/ci +57 -0
  24. data/spec/basics_spec.rb +84 -0
  25. data/spec/bundler_spec.rb +120 -0
  26. data/spec/ruby_19_spec.rb +34 -0
  27. data/spec/sample_projects/has_gems_via_bundler/Gemfile +4 -0
  28. data/spec/sample_projects/has_gems_via_bundler/Gemfile.lock +13 -0
  29. data/spec/sample_projects/has_gems_via_bundler/Rakefile +18 -0
  30. data/spec/sample_projects/has_gems_via_bundler/config/preflight.yml +1 -0
  31. data/spec/sample_projects/has_gems_via_bundler/true} +0 -0
  32. data/spec/sample_projects/has_gems_via_bundler_19/Gemfile +8 -0
  33. data/spec/sample_projects/has_gems_via_bundler_19/Gemfile.lock +13 -0
  34. data/spec/sample_projects/has_gems_via_bundler_19/Rakefile +18 -0
  35. data/spec/sample_projects/has_gems_via_bundler_19/config/preflight.yml +2 -0
  36. data/spec/sample_projects/has_gems_via_bundler_bad_gemfile_lock/Gemfile +4 -0
  37. data/spec/sample_projects/has_gems_via_bundler_bad_gemfile_lock/Rakefile +18 -0
  38. data/spec/sample_projects/has_gems_via_bundler_bad_gemfile_lock/config/preflight.yml +1 -0
  39. data/spec/sample_projects/no_dependencies/Rakefile +30 -0
  40. data/spec/sample_projects/no_dependencies/config/preflight.yml +1 -0
  41. data/spec/sample_projects/webapp/Gemfile +3 -0
  42. data/spec/sample_projects/webapp/Gemfile.lock +88 -0
  43. data/spec/sample_projects/webapp/app/controllers/application_controller.rb +5 -0
  44. data/spec/sample_projects/webapp/config.ru +4 -0
  45. data/spec/sample_projects/webapp/config/application.rb +46 -0
  46. data/spec/sample_projects/webapp/config/boot.rb +6 -0
  47. data/spec/sample_projects/webapp/config/environment.rb +5 -0
  48. data/spec/sample_projects/webapp/config/environments/development.rb +25 -0
  49. data/spec/sample_projects/webapp/config/environments/test.rb +35 -0
  50. data/spec/sample_projects/webapp/config/initializers/secret_token.rb +7 -0
  51. data/spec/sample_projects/webapp/config/preflight.yml +6 -0
  52. data/spec/sample_projects/webapp/config/preflight_files/vendor/jetty/etc/custom-project-specific-jetty.xml +5 -0
  53. data/spec/sample_projects/webapp/config/preflight_files/vendor/jetty/etc/template-from-project-jetty.xml.erb +9 -0
  54. data/spec/sample_projects/webapp/config/routes.rb +60 -0
  55. data/spec/sample_projects/webapp/public/index.html +239 -0
  56. data/spec/sample_projects/webapp/script/rails +6 -0
  57. data/spec/spec_helper.rb +48 -0
  58. data/spec/suite.rb +1 -0
  59. data/spec/web_spec.rb +67 -0
  60. data/web_inf_files/web.xml.erb +47 -0
  61. metadata +175 -0
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ spec/local_mirror
2
+ pkg
3
+ .idea/*
4
+ .DS_STORE
data/.wrong ADDED
@@ -0,0 +1 @@
1
+ color
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem "rake"
4
+
5
+ group :test do
6
+ gem "rspec"
7
+ gem "open4"
8
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,23 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ diff-lcs (1.1.3)
5
+ open4 (1.1.0)
6
+ rake (0.9.2.2)
7
+ rspec (2.6.0)
8
+ rspec-core (~> 2.6.0)
9
+ rspec-expectations (~> 2.6.0)
10
+ rspec-mocks (~> 2.6.0)
11
+ rspec-core (2.6.4)
12
+ rspec-expectations (2.6.0)
13
+ diff-lcs (~> 1.1.2)
14
+ rspec-mocks (2.6.0)
15
+
16
+ PLATFORMS
17
+ java
18
+ ruby
19
+
20
+ DEPENDENCIES
21
+ open4
22
+ rake
23
+ rspec
data/README.markdown ADDED
@@ -0,0 +1,35 @@
1
+ # Preflight
2
+
3
+ Preflight prepares your (j)ruby project for jvm deployment.
4
+
5
+ Preflight, as much as possible, uses standard ruby-world tools to prepare the app for deployment, and then presents the ruby app to jetty as a Java EE web application.
6
+
7
+ ## Install
8
+
9
+ Deploys need to be performed using MRI. Here is a sample section of a project Gemfile:
10
+
11
+ platforms :ruby_19 do
12
+ gem 'preflight'
13
+ end
14
+
15
+
16
+ Create `config/preflight.yml` in your project:
17
+
18
+ jruby: "http://jruby.org.s3.amazonaws.com/downloads/1.6.5.1/jruby-complete-1.6.5.1.jar"
19
+ jetty: "http://dist.codehaus.org/jetty/jetty-hightide-7.4.5/jetty-hightide-7.4.5.v20110725.zip"
20
+ jruby-rack: "http://repository.codehaus.org/org/jruby/rack/jruby-rack/1.0.10/jruby-rack-1.0.10.jar"
21
+ app_user: "myapp"
22
+ app_root: "/usr/local/myapp/myapp"
23
+
24
+ Run preflight:
25
+
26
+ gem install preflight
27
+
28
+ preflight [your project directory]
29
+
30
+ Of note, you'll now have:
31
+
32
+ * a `bin` directory, with scripts that run ruby and rake, using jruby and with the gems defined in your project.
33
+ * a `vendor/jetty directory`, containing everything necessary to run your app using jetty.
34
+ * You can try your app out by cd'ing into `vendor/jetty` and running `RAILS_ENV=development java -jar start.jar`
35
+ * `vendor/jetty/jetty-init` is an init script that starts your project. You should symlink `/etc/init.d/[appuser]-jetty` to this file, and then point monit at `/etc/init.d/[appuser]-jetty`
data/Rakefile ADDED
@@ -0,0 +1,16 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ namespace :spec do
5
+ desc "Download required support files for running specs."
6
+ task :setup do
7
+ def local_mirror(url)
8
+ local_path = "spec/local_mirror/" + File.basename(url)
9
+ `curl #{url} > #{local_path}` unless File.exists?(local_path)
10
+ end
11
+
12
+ local_mirror "http://jruby.org.s3.amazonaws.com/downloads/1.6.4/jruby-complete-1.6.4.jar"
13
+ local_mirror "http://repo1.maven.org/maven2/org/mortbay/jetty/jetty-hightide/7.4.5.v20110725/jetty-hightide-7.4.5.v20110725.zip"
14
+ local_mirror "http://repo1.maven.org/maven2/org/jruby/rack/jruby-rack/1.0.10/jruby-rack-1.0.10.jar"
15
+ end
16
+ end
data/bin/preflight ADDED
@@ -0,0 +1,175 @@
1
+ #!/usr/bin/ruby
2
+
3
+ #think: bash-like ruby
4
+
5
+ require "yaml"
6
+ require "erb"
7
+ require "fileutils"
8
+ require "etc"
9
+
10
+ local_lib_dir = File.join(File.dirname(__FILE__), "../lib")
11
+ $LOAD_PATH << local_lib_dir if File.directory?(local_lib_dir)
12
+
13
+ #Env vars like RUBYOPT get passed on to jruby.
14
+ #Cleanse the environment of these vars so that jruby is not affected.
15
+ ENV.delete_if{|k,v|k =~ /(^RUBY|^BUNDLE)/}
16
+
17
+ require "preflight/settings"
18
+
19
+ include FileUtils
20
+
21
+ def halt(message)
22
+ $stderr.puts message
23
+ exit 1
24
+ end
25
+
26
+ def x!(cmd)
27
+ puts cmd if ENV['VERBOSE']
28
+ system(cmd) || halt("'#{cmd}' failed.")
29
+ end
30
+
31
+
32
+ halt("usage: preflight <project_path>") unless ARGV.length==1 && File.directory?(ARGV[0])
33
+
34
+ @path_to_project = ARGV.shift
35
+ @created = []
36
+
37
+ @settings = Preflight::Settings.load_from_project(@path_to_project)
38
+
39
+ puts @settings.inspect
40
+
41
+ unless @settings.jruby?
42
+ halt(%{Your config/preflight.yml must at least contain a pointer to the desired jruby-complete jar.
43
+ Ex:
44
+
45
+ jruby: http://jruby.org.s3.amazonaws.com/downloads/1.6.4/jruby-complete-1.6.4.jar
46
+ jetty: http://dist.codehaus.org/jetty/jetty-hightide-7.4.5/jetty-hightide-7.4.5.v20110725.zip
47
+ })
48
+ end
49
+
50
+ script_start_time = Time.now
51
+
52
+ @jruby_jar_file = "vendor/jruby.jar"
53
+ @preflight_dir = File.expand_path(File.join(File.dirname(__FILE__), ".."))
54
+
55
+ @gem_home = "file:" + File.expand_path(File.join(@settings.app_root, @jruby_jar_file)) + "!/META-INF/jruby.home/lib/ruby/gems/1.8"
56
+ @gem_path = @gem_home + ":vendor/bundler_gem"
57
+
58
+ @java_dash_jar = "PATH=$PATH:$(dirname $0) GEM_HOME=\"#{@gem_home}\" GEM_PATH=\"#{@gem_path}\" exec java #{@settings.java_options} -jar"
59
+ @jruby_opts = @settings.ruby_version.to_s == '1.9' ? '--1.9' : ''
60
+
61
+ def jruby!(cmd)
62
+ x! "cd #{@path_to_project} && #{@java_dash_jar} #{@jruby_jar_file} #{@jruby_opts} #{cmd}"
63
+ end
64
+
65
+ def download(url, local_file)
66
+ x! "curl --silent --show-error -o #{local_file} #{url}"
67
+ end
68
+
69
+ def unzip(file, directory, pattern="")
70
+ x! "unzip -qq #{file} #{pattern} -d #{directory}"
71
+ end
72
+
73
+ def install_bundler_gem
74
+ unless File.exists?("#{@path_to_project}/vendor/bundler_gem")
75
+ jruby! " -S gem install #{@preflight_dir}/gems/bundler-1.1.rc.gem -i vendor/bundler_gem --no-rdoc --no-ri"
76
+ end
77
+ end
78
+
79
+ def regenerate_gemfile_lock_if_platform_java_is_not_found
80
+ gemfile_lock_lines = File.read(File.join(@path_to_project, "Gemfile.lock")).split("\n")
81
+ platforms_start = gemfile_lock_lines.find_index{|line|line == "PLATFORMS"} + 1
82
+ platforms_count = gemfile_lock_lines.slice(platforms_start..-1).find_index{|line|line == ""} - 1
83
+ platforms = gemfile_lock_lines.slice(platforms_start..(platforms_start+platforms_count)).map{|platform_str|platform_str.strip}
84
+ unless platforms.include?("java")
85
+ $stderr.puts %{
86
+ WARNING: Your Gemfile.lock does not contain PLATFORM java.
87
+ Automtically regenerating and overwriting Gemfile.lock using jruby
88
+ - because otherwise, jruby-specific gems would not be installed by bundler.
89
+ To make this message go away, you must re-generate your Gemfile.lock using jruby.
90
+ }
91
+ jruby! " -e 'require \"rubygems\"; require \"bundler\"; Bundler.definition.lock(Bundler.default_lockfile)'"
92
+ end
93
+ end
94
+
95
+ def bundle_install
96
+ install_bundler_gem
97
+ regenerate_gemfile_lock_if_platform_java_is_not_found
98
+ #Do the equivalent of 'bundle' in code so we know exactly which bundler we're using.
99
+ jruby! " -e 'require \"rubygems\"; require \"bundler\"; require \"bundler/cli\"; cli=Bundler::CLI.new; cli.options={:deployment=>true}; cli.install'"
100
+ end
101
+
102
+ def install_jetty(vendor_dir)
103
+ jetty_dir = File.join(vendor_dir, "jetty")
104
+ Dir["#{vendor_dir}/jett*"].to_a.each{|f|rm_rf(f)}
105
+ download @settings.jetty, File.join(vendor_dir, "jetty.zip")
106
+ unzip File.join(vendor_dir, "jetty.zip"), vendor_dir
107
+ rm File.join(vendor_dir, "jetty.zip")
108
+ mv Dir["#{vendor_dir}/jetty*"].to_a.first, jetty_dir
109
+ rm_rf "#{jetty_dir}/webapps"
110
+ jetty_dir
111
+ end
112
+
113
+ def install_jruby_rack_jar(vendor_dir)
114
+ download @settings.jruby_rack, File.join(vendor_dir, "jruby-rack.jar")
115
+ end
116
+
117
+ def process_template_files(erb_files)
118
+ erb_files.each do |erb_file|
119
+ evaled_contents = ERB.new(File.read(erb_file)).result(binding)
120
+ target_file = erb_file.sub(/\.erb$/, "")
121
+ File.open(target_file, "w"){|f|f<<evaled_contents}
122
+ File.new(target_file).chmod(File.stat(erb_file).mode)
123
+ rm erb_file
124
+
125
+ @created.delete(erb_file)
126
+ @created << target_file
127
+ end
128
+ end
129
+
130
+ def note_files_created(dir)
131
+ before = Dir["#{dir}/**/{*,.*}"]
132
+ yield
133
+ after = Dir["#{dir}/**/{*,.*}"]
134
+ after - before
135
+ end
136
+
137
+ def overlay_files(overlay_dir, target_dir)
138
+ files_created = note_files_created(target_dir) do
139
+ x! "cp -pR #{overlay_dir}/ #{target_dir}/"
140
+ end
141
+
142
+ process_template_files files_created.select{|f|f=~/\.erb$/}
143
+ end
144
+
145
+ bin_dir = File.join(@path_to_project, "bin")
146
+ mkdir_p bin_dir
147
+ overlay_files File.join(@preflight_dir, "bin_files"), bin_dir
148
+
149
+ vendor_dir = File.join(@path_to_project, "vendor")
150
+ mkdir_p vendor_dir
151
+ download @settings.jruby, File.join(@path_to_project, @jruby_jar_file)
152
+
153
+ bundle_install if File.exists?(File.join(@path_to_project, "Gemfile.lock"))
154
+ if @settings.jetty?
155
+ jetty_dir = install_jetty(vendor_dir)
156
+ install_jruby_rack_jar vendor_dir #raise if jar not found
157
+
158
+ overlay_files File.join(@preflight_dir, "jetty_files"), File.join(@path_to_project, "vendor/jetty")
159
+
160
+ web_inf_dir = File.join(@path_to_project, "WEB-INF")
161
+ mkdir_p web_inf_dir
162
+ overlay_files File.join(@preflight_dir, "web_inf_files"), web_inf_dir
163
+ end
164
+
165
+ config_preflight_dir_in_project = File.join(@path_to_project, "config/preflight_files")
166
+ if File.directory?(config_preflight_dir_in_project)
167
+ overlay_files config_preflight_dir_in_project, @path_to_project
168
+ end
169
+
170
+ elapsed_seconds = (Time.now - script_start_time).to_i
171
+
172
+ puts %{Created:
173
+ #{@created.uniq.sort.join("\n ")}
174
+ Time: #{elapsed_seconds} s
175
+ }
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env ruby
2
+ #!/usr/bin/env ruby
3
+ #
4
+ # This file was generated by RubyGems.
5
+ #
6
+ # The application 'rake' is installed as part of a gem, and
7
+ # this file is here to facilitate running it.
8
+ #
9
+
10
+ require 'rubygems'
11
+
12
+ version = ">= 0"
13
+
14
+ if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
15
+ version = $1
16
+ ARGV.shift
17
+ end
18
+
19
+ if File.exists?(File.expand_path('../../Gemfile.lock', __FILE__))
20
+ rake_line = `grep -E "rake \\\\([0-9]" Gemfile.lock`.chomp
21
+ if rake_line.length > 0
22
+ rake_line =~ /\((.*)\)/
23
+ $LOAD_PATH.unshift(File.expand_path("vendor/bundle/jruby/<%= @settings.ruby_version %>/gems/rake-#{$1}/lib"))
24
+ version = "= #{$1}"
25
+ loaded = true
26
+ require 'rake'
27
+
28
+ # Can't use Gem.bin_path below since rake hasn't been loaded as a gem.
29
+ Rake.application.run
30
+ end
31
+ end
32
+
33
+ unless loaded
34
+ gem 'rake', version
35
+ load Gem.bin_path('rake', 'rake', version)
36
+ end
@@ -0,0 +1,12 @@
1
+ #!/bin/bash
2
+
3
+ set -e
4
+
5
+ export FULL_DIR=`cd $(dirname $0); pwd`
6
+ export PATH=$FULL_DIR:$PATH
7
+ export GEM_HOME="<%=@gem_home%>"
8
+ export GEM_PATH="<%=@gem_path%>"
9
+
10
+ cd $(dirname $0)/..
11
+
12
+ .rake_runner "$@"
@@ -0,0 +1,4 @@
1
+ #!/bin/bash
2
+
3
+ cd $(dirname $0)/..
4
+ <%=@java_dash_jar%> <%=@jruby_jar_file%> <%=@jruby_opts%> "$@"
Binary file
Binary file
Binary file
data/install_gem.sh ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env bash
2
+
3
+ cd $(dirname $0)
4
+ rake build
5
+ gem install $(ls -tr pkg/*.gem | tail -n 1)
data/jetpack.gemspec ADDED
@@ -0,0 +1,19 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = "jetpack"
5
+ s.version = "0.0.3"
6
+ s.platform = Gem::Platform::RUBY
7
+ s.authors = ["Steve Conover"]
8
+ s.email = ["steve@squareup.com"]
9
+ s.homepage = "https://github.com/square/jetpack"
10
+ s.summary = %q{Jetpack prepares your jRuby project for jvm deployment.}
11
+
12
+ s.add_development_dependency "bundler"
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
16
+ s.test_files = `git ls-files -- spec/*`.split("\n")
17
+ s.require_paths = ["lib"]
18
+ # s.executables = %w(bundle)
19
+ end
Binary file
@@ -0,0 +1,113 @@
1
+ <?xml version="1.0"?>
2
+ <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
3
+
4
+ <!-- =============================================================== -->
5
+ <!-- Configure the Jetty Server -->
6
+ <!-- -->
7
+ <!-- Documentation of this file format can be found at: -->
8
+ <!-- http://wiki.eclipse.org/Jetty/Reference/jetty.xml_syntax -->
9
+ <!-- -->
10
+ <!-- Additional configuration files are available in $JETTY_HOME/etc -->
11
+ <!-- and can be mixed in. For example: -->
12
+ <!-- java -jar start.jar etc/jetty-ssl.xml -->
13
+ <!-- -->
14
+ <!-- See start.ini file for the default configuraton files -->
15
+ <!-- =============================================================== -->
16
+
17
+
18
+
19
+ <Configure id="Server" class="org.eclipse.jetty.server.Server">
20
+
21
+ <Set name="ThreadPool">
22
+ <New class="org.eclipse.jetty.util.thread.QueuedThreadPool">
23
+ <Set name="minThreads">10</Set>
24
+ <Set name="maxThreads"><%=@settings.max_concurrent_connections %></Set>
25
+ <Set name="detailedDump">false</Set>
26
+ </New>
27
+ </Set>
28
+
29
+ <Call name="addConnector">
30
+ <Arg>
31
+ <New class="org.eclipse.jetty.server.ssl.SslSelectChannelConnector">
32
+ <Set name="port"><%=@settings.https_port%></Set>
33
+ <Set name="maxIdleTime">30000</Set>
34
+ <Set name="password"><SystemProperty name="jetty.ssl.password" default="foobar" /></Set>
35
+ <Set name="keystore"><SystemProperty name="jetty.ssl.keystore" default="etc/fake.p12" /></Set>
36
+ <Set name="keystoreType">PKCS12</Set>
37
+ </New>
38
+ </Arg>
39
+ </Call>
40
+
41
+ <Call name="addConnector">
42
+ <Arg>
43
+ <New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
44
+ <Set name="port"><%=@settings.http_port%></Set>
45
+ <Set name="maxIdleTime">30000</Set>
46
+ </New>
47
+ </Arg>
48
+ </Call>
49
+
50
+ <!-- set the rails.env java system property based on the RAILS_ENV environment variable -->
51
+ <!-- this is used by jruby-rack to set Rails.env -->
52
+ <Call class="java.lang.System" name="setProperty">
53
+ <Arg>rails.env</Arg>
54
+ <Arg>
55
+ <Call class="java.lang.System" name="getenv">
56
+ <Arg>RAILS_ENV</Arg>
57
+ </Call>
58
+ </Arg>
59
+ </Call>
60
+
61
+ <Set name="handler">
62
+ <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
63
+ <Set name="handlers">
64
+ <Array type="org.eclipse.jetty.server.Handler">
65
+ <Item>
66
+ <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
67
+ </Item>
68
+ <Item>
69
+ <New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"/>
70
+ </Item>
71
+ <Item>
72
+
73
+ <!-- Set up the webapp context for the rails root, which is ../../ from here -->
74
+ <New class="org.eclipse.jetty.webapp.WebAppContext">
75
+ <Arg><Ref id="Contexts"/></Arg>
76
+ <Arg>../../</Arg> <!-- "resource base" -->
77
+ <Arg>/</Arg> <!-- webapp root -->
78
+ <Set name="extraClasspath">../jruby.jar;../jruby-rack.jar</Set>
79
+ <!-- cp that makes ruby+rack work -->
80
+ </New>
81
+ </Item>
82
+ </Array>
83
+ </Set>
84
+ </New>
85
+ </Set>
86
+
87
+ <Set name="stopAtShutdown">true</Set>
88
+ <Set name="sendServerVersion">true</Set>
89
+ <Set name="sendDateHeader">true</Set>
90
+ <Set name="gracefulShutdown">1</Set>
91
+ <Set name="dumpAfterStart">false</Set>
92
+ <Set name="dumpBeforeStop">false</Set>
93
+
94
+ <Ref id="Handlers">
95
+ <Call name="addHandler">
96
+ <Arg>
97
+ <New id="RequestLog" class="org.eclipse.jetty.server.handler.RequestLogHandler">
98
+ <Set name="requestLog">
99
+ <New id="RequestLogImpl" class="org.eclipse.jetty.server.NCSARequestLog">
100
+ <Set name="filename">../../log/jetty_request_yyyy_mm_dd.log</Set>
101
+ <Set name="filenameDateFormat">yyyy_MM_dd</Set>
102
+ <Set name="retainDays">90</Set>
103
+ <Set name="append">true</Set>
104
+ <Set name="extended">false</Set>
105
+ <Set name="logCookies">false</Set>
106
+ <Set name="LogTimeZone">GMT</Set>
107
+ </New>
108
+ </Set>
109
+ </New>
110
+ </Arg>
111
+ </Call>
112
+ </Ref>
113
+ </Configure>