jetpack 0.1.0 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. data/.gitignore +2 -1
  2. data/LICENSE +14 -0
  3. data/README.markdown +35 -6
  4. data/Rakefile +14 -3
  5. data/bin/jetpack +39 -6
  6. data/bin_files/launch.erb +16 -0
  7. data/gems/bundler-1.1.0.gem +0 -0
  8. data/jetpack.gemspec +3 -3
  9. data/jetty_files/etc/fake.crt +31 -0
  10. data/jetty_files/etc/fake.jceks +0 -0
  11. data/jetty_files/etc/fake.key +51 -0
  12. data/jetty_files/etc/fake.pem +89 -0
  13. data/jetty_files/etc/jetty.xml.erb +53 -25
  14. data/jetty_files/jetty-init.erb +4 -0
  15. data/lib/jetpack/settings.rb +24 -10
  16. data/script/ci +1 -1
  17. data/spec/bundler_spec.rb +1 -1
  18. data/spec/filter_spec.rb +59 -0
  19. data/spec/rack_spec.rb +40 -0
  20. data/spec/sample_projects/has_gems_via_bundler/config/jetpack.yml +1 -1
  21. data/spec/sample_projects/has_gems_via_bundler_19/config/jetpack.yml +1 -1
  22. data/spec/sample_projects/has_gems_via_bundler_bad_gemfile_lock/config/jetpack.yml +1 -1
  23. data/spec/sample_projects/no_dependencies/config/jetpack.yml +1 -1
  24. data/spec/sample_projects/rack_19/Gemfile +3 -0
  25. data/spec/sample_projects/rack_19/Gemfile.lock +11 -0
  26. data/spec/sample_projects/rack_19/config.ru +8 -0
  27. data/spec/sample_projects/rack_19/config/jetpack.yml +9 -0
  28. data/spec/sample_projects/webapp/config/jetpack.yml +8 -5
  29. data/spec/sample_projects/webapp_filters/Gemfile +3 -0
  30. data/spec/sample_projects/webapp_filters/Gemfile.lock +88 -0
  31. data/spec/sample_projects/webapp_filters/app/controllers/application_controller.rb +5 -0
  32. data/spec/sample_projects/webapp_filters/config.ru +4 -0
  33. data/spec/sample_projects/webapp_filters/config/application.rb +46 -0
  34. data/spec/sample_projects/webapp_filters/config/boot.rb +6 -0
  35. data/spec/sample_projects/webapp_filters/config/environment.rb +5 -0
  36. data/spec/sample_projects/webapp_filters/config/environments/development.rb +25 -0
  37. data/spec/sample_projects/webapp_filters/config/environments/test.rb +35 -0
  38. data/spec/sample_projects/webapp_filters/config/initializers/secret_token.rb +7 -0
  39. data/spec/sample_projects/webapp_filters/config/jetpack.yml +10 -0
  40. data/spec/sample_projects/webapp_filters/config/jetpack_files/vendor/jetty/etc/custom-project-specific-jetty.xml +5 -0
  41. data/spec/sample_projects/webapp_filters/config/jetpack_files/vendor/jetty/etc/template-from-project-jetty.xml.erb +9 -0
  42. data/spec/sample_projects/webapp_filters/config/routes.rb +60 -0
  43. data/spec/sample_projects/webapp_filters/public/index.html +239 -0
  44. data/spec/sample_projects/webapp_filters/script/rails +6 -0
  45. data/spec/spec_helper.rb +0 -7
  46. data/spec/web_spec.rb +25 -9
  47. data/src/java/jetpack/filter/IgnoreUnknownHttpMethodsFilter.java +43 -0
  48. data/src/java/jetpack/filter/ValidUrlFilter.java +62 -0
  49. data/web_inf_files/web.xml.erb +46 -4
  50. metadata +110 -32
  51. data/gems/bundler-1.0.18.gem +0 -0
  52. data/gems/bundler-1.1.rc.gem +0 -0
data/.gitignore CHANGED
@@ -1,4 +1,5 @@
1
1
  spec/local_mirror
2
2
  pkg
3
+ .rvmrc
3
4
  .idea/*
4
- .DS_STORE
5
+ .DS_STORE
data/LICENSE ADDED
@@ -0,0 +1,14 @@
1
+ Copyright 2012 Square Inc.
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
14
+
@@ -1,14 +1,33 @@
1
1
  # Jetpack
2
2
 
3
- Jetpack prepares your (j)ruby project for jvm deployment.
3
+ jet.pack: package your JRuby webapp for Jetty.
4
4
 
5
- Jetpack, 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.
5
+ There are already many tools in existence that help developers run JRuby webapps on popular servlet containers,
6
+ such as [trinidad](https://github.com/trinidad/trinidad), [warbler](https://github.com/jruby/warbler), [mizuno](https://github.com/matadon/mizuno), and [kirk](https://github.com/strobecorp/kirk).
7
+ Jetpack is not fundamentally different from these tools: like the rest of them it uses the [jruby-rack](https://github.com/jruby/jruby-rack) jar as a foundation. The key differences are stylistic.
8
+
9
+ Jetpack:
10
+
11
+ * Uses [Jetty](http://jetty.codehaus.org/jetty/)... in all of its
12
+ out-of-the-box, XML-configuration-file glory.
13
+ * Uses bundler to "vendor" all of your gems.
14
+ * Uses the [jruby-complete jar](http://jruby.org/download), and provides
15
+ convenience wrapper scripts (`bin/ruby` and `bin/rake`) in your project.
16
+ * Does not attempt to run Jetty in a ruby-first, embedded manner.
17
+ * Does not assume JRuby is already installed in your server environment (a
18
+ basic JRE will do just fine).
19
+ * Does not force your ruby webapp to load files from a jar or war.
20
+
21
+ In short, Jetpack creates a little self-contained JRuby/Jetty/vendored-gem world around your ruby project,
22
+ which you only need to transport to a server and fire up using a JRE.
23
+
24
+ Jetpack's implementation mainly consists of an [honest, proletarian, bash-like ruby script](https://github.com/square/jetpack/blob/master/bin/jetpack).
6
25
 
7
26
  ## Install
8
27
 
9
28
  Deploys need to be performed using MRI. Here is a sample section of a project Gemfile:
10
29
 
11
- platforms :ruby_19 do
30
+ platforms :mri do
12
31
  gem 'jetpack'
13
32
  end
14
33
 
@@ -21,11 +40,21 @@ Create `config/jetpack.yml` in your project:
21
40
  app_user: "myapp"
22
41
  app_root: "/usr/local/myapp/myapp"
23
42
 
24
- Run jetpack:
43
+ Some other settings you might care about:
44
+
45
+ java_options: "-Xmx2048m"
46
+ http_port: 4080
47
+ https_port: 4443
48
+ max_concurrent_connections: 20
49
+ ruby_version: 1.8
50
+ app_type: rack
51
+ keystore_type: JCEKS
52
+ keystore: /data/app/secrets/mystore.jceks
53
+ keystore_password: sekret
25
54
 
26
- gem install jetpack
55
+ Run Jetpack:
27
56
 
28
- jetpack [your project directory]
57
+ bundle exec jetpack .
29
58
 
30
59
  Of note, you'll now have:
31
60
 
data/Rakefile CHANGED
@@ -1,5 +1,14 @@
1
1
  require 'bundler'
2
2
  Bundler::GemHelper.install_tasks
3
+ require 'rspec/core/rake_task'
4
+
5
+ task :default => :spec
6
+
7
+ desc "Run all specs in spec directory"
8
+ RSpec::Core::RakeTask.new(:spec => "spec:setup") do |t|
9
+ t.skip_bundler = true
10
+ t.pattern = "./spec/**/*_spec.rb"
11
+ end
3
12
 
4
13
  namespace :spec do
5
14
  desc "Download required support files for running specs."
@@ -9,8 +18,10 @@ namespace :spec do
9
18
  `curl #{url} > #{local_path}` unless File.exists?(local_path)
10
19
  end
11
20
 
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"
21
+ FileUtils.mkdir_p "spec/local_mirror" unless File.directory?("spec/local_mirror")
22
+
23
+ local_mirror "http://jruby.org.s3.amazonaws.com/downloads/1.6.7/jruby-complete-1.6.7.jar"
24
+ local_mirror "http://repo1.maven.org/maven2/org/mortbay/jetty/jetty-hightide/8.1.3.v20120416/jetty-hightide-8.1.3.v20120416.zip"
25
+ local_mirror "http://repo1.maven.org/maven2/org/jruby/rack/jruby-rack/1.1.5/jruby-rack-1.1.5.jar"
15
26
  end
16
27
  end
@@ -49,13 +49,16 @@ end
49
49
 
50
50
  script_start_time = Time.now
51
51
 
52
- @jruby_jar_file = "vendor/jruby.jar"
53
- @jetpack_dir = File.expand_path(File.join(File.dirname(__FILE__), ".."))
52
+ @jruby_jar_file = "vendor/jruby.jar"
53
+ @jetpack_dir = File.expand_path(File.join(File.dirname(__FILE__), ".."))
54
54
 
55
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
56
  @gem_path = @gem_home + ":vendor/bundler_gem"
57
57
 
58
- @java_dash_jar = "PATH=$PATH:$(dirname $0) GEM_HOME=\"#{@gem_home}\" GEM_PATH=\"#{@gem_path}\" exec java #{@settings.java_options} -jar"
58
+ # Don't set min memory size when making the build artifact
59
+ @jar_build_options = @settings.java_options.gsub(/(\s*)-Xms\S+/,'\1')
60
+
61
+ @java_dash_jar = "PATH=$PATH:$(dirname $0) GEM_HOME=\"#{@gem_home}\" GEM_PATH=\"#{@gem_path}\" exec java #{@jar_build_options} -jar"
59
62
  @jruby_opts = @settings.ruby_version.to_s == '1.9' ? '--1.9' : ''
60
63
 
61
64
  def jruby!(cmd)
@@ -72,7 +75,7 @@ end
72
75
 
73
76
  def install_bundler_gem
74
77
  unless File.exists?("#{@path_to_project}/vendor/bundler_gem")
75
- jruby! " -S gem install #{@jetpack_dir}/gems/bundler-1.1.rc.gem -i vendor/bundler_gem --no-rdoc --no-ri"
78
+ jruby! " -S gem install #{@jetpack_dir}/gems/bundler-1.1.0.gem -i vendor/bundler_gem --no-rdoc --no-ri"
76
79
  end
77
80
  end
78
81
 
@@ -96,7 +99,7 @@ def bundle_install
96
99
  install_bundler_gem
97
100
  regenerate_gemfile_lock_if_platform_java_is_not_found
98
101
  #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'"
102
+ jruby! " -e 'require \"rubygems\"; require \"bundler\"; require \"bundler/cli\"; cli=Bundler::CLI.new; cli.options={:deployment=>true, :without=> [\"test\", \"cucumber\"]}; cli.install'"
100
103
  end
101
104
 
102
105
  def install_jetty(vendor_dir)
@@ -110,6 +113,16 @@ def install_jetty(vendor_dir)
110
113
  jetty_dir
111
114
  end
112
115
 
116
+ def install_commons_validator(lib_dir)
117
+ commons_validator_zip = File.join(lib_dir, "commons-validator.zip")
118
+ download "http://mirrors.axint.net/apache//commons/validator/binaries/commons-validator-1.4.0-bin.zip", commons_validator_zip
119
+ unzip commons_validator_zip, lib_dir
120
+ mv File.join(lib_dir, "commons-validator-1.4.0", "commons-validator-1.4.0.jar"), lib_dir
121
+ rm_rf(File.join(lib_dir, "commons-validator-1.4.0"))
122
+ rm commons_validator_zip
123
+ lib_dir
124
+ end
125
+
113
126
  def install_jruby_rack_jar(vendor_dir)
114
127
  download @settings.jruby_rack, File.join(vendor_dir, "jruby-rack.jar")
115
128
  end
@@ -136,7 +149,7 @@ end
136
149
 
137
150
  def overlay_files(overlay_dir, target_dir)
138
151
  files_created = note_files_created(target_dir) do
139
- x! "cp -pR #{overlay_dir}/ #{target_dir}/"
152
+ FileUtils.cp_r(Dir.glob("#{overlay_dir}/**/{*,.[^.]*}"), target_dir, :preserve => true)
140
153
  end
141
154
 
142
155
  process_template_files files_created.select{|f|f=~/\.erb$/}
@@ -159,7 +172,27 @@ if @settings.jetty?
159
172
 
160
173
  web_inf_dir = File.join(@path_to_project, "WEB-INF")
161
174
  mkdir_p web_inf_dir
175
+ FileUtils.mkdir_p(File.join(@path_to_project, "log"))
176
+ @listener = if @settings.rails?
177
+ "org.jruby.rack.rails.RailsServletContextListener"
178
+ else
179
+ "org.jruby.rack.RackServletContextListener"
180
+ end
162
181
  overlay_files File.join(@jetpack_dir, "web_inf_files"), web_inf_dir
182
+
183
+ if @settings.jetty_filters?
184
+ web_inf_lib_dir = File.join(web_inf_dir, "lib")
185
+ mkdir_p web_inf_lib_dir
186
+
187
+ install_commons_validator web_inf_lib_dir
188
+
189
+ web_inf_classes_dir = File.join(web_inf_dir, "classes")
190
+ mkdir_p web_inf_classes_dir
191
+
192
+ puts "Compiling Jetty filters"
193
+ x! "javac -classpath #{vendor_dir}/jetty/lib/servlet-api-3.0.jar -d #{web_inf_classes_dir} #{@jetpack_dir}/src/java/jetpack/filter/IgnoreUnknownHttpMethodsFilter.java"
194
+ x! "javac -classpath #{vendor_dir}/jetty/lib/servlet-api-3.0.jar:#{web_inf_lib_dir}/commons-validator-1.4.0.jar -d #{web_inf_classes_dir} #{@jetpack_dir}/src/java/jetpack/filter/ValidUrlFilter.java"
195
+ end
163
196
  end
164
197
 
165
198
  config_jetpack_dir_in_project = File.join(@path_to_project, "config/jetpack_files")
@@ -0,0 +1,16 @@
1
+ #!/bin/bash
2
+
3
+ # trace back to the original location of the launch file,
4
+ # or else /../vendor/jetty will be relative to a symlink
5
+ # see: http://stackoverflow.com/a/246128
6
+ source="${BASH_SOURCE[0]}"
7
+ while [ -h "$source" ] ; do source="$(readlink "$source")"; done
8
+ this_dir="$( cd -P "$( dirname "$source" )" && pwd )"
9
+
10
+ cd $this_dir/../vendor/jetty
11
+
12
+ exec java -jar <%= @settings.java_options %> \
13
+ -Djetty.logs=$this_dir/../log \
14
+ -Djetty.home=$this_dir/../vendor/jetty \
15
+ -Djava.io.tmpdir=/tmp \
16
+ start.jar
Binary file
@@ -2,10 +2,10 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "jetpack"
5
- s.version = "0.1.0"
5
+ s.version = "0.1.3"
6
6
  s.platform = Gem::Platform::RUBY
7
- s.authors = ["Steve Conover"]
8
- s.email = ["steve@squareup.com"]
7
+ s.authors = ["Steve Conover", "Xavier Shay", "Taylor Phillips", "Chris Heisterkamp"]
8
+ s.email = ["steve@squareup.com", "xavier@squareup.com", "taylor@squareup.com", "cheister@squareup.com"]
9
9
  s.homepage = "https://github.com/square/jetpack"
10
10
  s.summary = %q{Jetpack prepares your jRuby project for jvm deployment.}
11
11
 
@@ -0,0 +1,31 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ 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
31
+ -----END CERTIFICATE-----
@@ -0,0 +1,51 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ 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
51
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,89 @@
1
+ Bag Attributes
2
+ localKeyID: 03 AB 04 EF 7F 65 5F 38 EC F7 FF 04 B3 E6 C1 AD 00 AC 45 4E
3
+ subject=/C=US/ST=California/L=San Francisco/O=Square, Inc. (fake)/CN=*.squareup.com
4
+ issuer=/C=US/ST=California/L=San Francisco/O=Square, Inc. (fake)/CN=*.squareup.com
5
+ -----BEGIN CERTIFICATE-----
6
+ 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
35
+ -----END CERTIFICATE-----
36
+ Bag Attributes
37
+ localKeyID: 03 AB 04 EF 7F 65 5F 38 EC F7 FF 04 B3 E6 C1 AD 00 AC 45 4E
38
+ Key Attributes: <No Attributes>
39
+ -----BEGIN RSA PRIVATE KEY-----
40
+ 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
89
+ -----END RSA PRIVATE KEY-----
@@ -26,18 +26,31 @@
26
26
  </New>
27
27
  </Set>
28
28
 
29
+ <% unless @settings.https_port.to_s.empty? %>
29
30
  <Call name="addConnector">
30
31
  <Arg>
31
32
  <New class="org.eclipse.jetty.server.ssl.SslSelectChannelConnector">
32
33
  <Set name="port"><%=@settings.https_port%></Set>
33
34
  <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>
35
+ <Set name="password"><%= @settings.keystore_password %></Set>
36
+ <Set name="keystore"><%= @settings.keystore %></Set>
37
+ <!-- Using RC4 to avoid the Rizzo/Duong attack on block ciphers. -->
38
+ <Set name="IncludeCipherSuites">
39
+ <Array type="java.lang.String">
40
+ <Item>TLS_ECDHE_ECDSA_WITH_RC4_128_SHA</Item>
41
+ <Item>TLS_ECDHE_RSA_WITH_RC4_128_SHA</Item>
42
+ <Item>TLS_ECDH_ECDSA_WITH_RC4_128_SHA</Item>
43
+ <Item>TLS_ECDH_RSA_WITH_RC4_128_SHA</Item>
44
+ <Item>SSL_RSA_WITH_RC4_128_SHA</Item>
45
+ </Array>
46
+ </Set>
47
+ <Set name="keystoreType"><%= @settings.keystore_type %></Set>
37
48
  </New>
38
49
  </Arg>
39
50
  </Call>
51
+ <% end %>
40
52
 
53
+ <% unless @settings.http_port.to_s.empty? %>
41
54
  <Call name="addConnector">
42
55
  <Arg>
43
56
  <New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
@@ -46,17 +59,20 @@
46
59
  </New>
47
60
  </Arg>
48
61
  </Call>
62
+ <% end %>
49
63
 
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>
64
+ <% if @settings.rails? %>
65
+ <!-- set the rails.env java system property based on the RAILS_ENV environment variable -->
66
+ <!-- this is used by jruby-rack to set Rails.env -->
67
+ <Call class="java.lang.System" name="setProperty">
68
+ <Arg>rails.env</Arg>
69
+ <Arg>
70
+ <Call class="java.lang.System" name="getenv">
71
+ <Arg>RAILS_ENV</Arg>
72
+ </Call>
73
+ </Arg>
74
+ </Call>
75
+ <% end %>
60
76
 
61
77
  <Set name="handler">
62
78
  <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
@@ -65,17 +81,14 @@
65
81
  <Item>
66
82
  <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
67
83
  </Item>
68
- <Item>
69
- <New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"/>
70
- </Item>
71
84
  <Item>
72
85
 
73
86
  <!-- Set up the webapp context for the rails root, which is ../../ from here -->
74
87
  <New class="org.eclipse.jetty.webapp.WebAppContext">
75
88
  <Arg><Ref id="Contexts"/></Arg>
76
- <Arg>../../</Arg> <!-- "resource base" -->
89
+ <Arg><Property name="jetty.home"/>/../../</Arg> <!-- "resource base" -->
77
90
  <Arg>/</Arg> <!-- webapp root -->
78
- <Set name="extraClasspath">../jruby.jar;../jruby-rack.jar</Set>
91
+ <Set name="extraClasspath"><Property name="jetty.home"/>/../jruby.jar;<Property name="jetty.home"/>/../jruby-rack.jar</Set>
79
92
  <!-- cp that makes ruby+rack work -->
80
93
  </New>
81
94
  </Item>
@@ -91,22 +104,37 @@
91
104
  <Set name="dumpAfterStart">false</Set>
92
105
  <Set name="dumpBeforeStop">false</Set>
93
106
 
107
+ <New id="ServerLog" class="java.io.PrintStream">
108
+ <Arg>
109
+ <New class="org.eclipse.jetty.util.RolloverFileOutputStream">
110
+ <Arg><Property name="jetty.home"/>/../../log/jetty_stderr_yyyy_mm_dd.log</Arg>
111
+ <Arg type="boolean">false</Arg>
112
+ <Arg type="int">30</Arg>
113
+ <Arg><Call class="java.util.TimeZone" name="getTimeZone"><Arg>GMT</Arg></Call></Arg>
114
+ <Get id="ServerLogName" name="datedFilename"/>
115
+ </New>
116
+ </Arg>
117
+ </New>
118
+
94
119
  <Ref id="Handlers">
95
120
  <Call name="addHandler">
96
121
  <Arg>
97
122
  <New id="RequestLog" class="org.eclipse.jetty.server.handler.RequestLogHandler">
98
- <Set name="requestLog">
123
+ <Set name="requestLog">
99
124
  <New id="RequestLogImpl" class="org.eclipse.jetty.server.NCSARequestLog">
100
- <Set name="filename">../../log/jetty_request_yyyy_mm_dd.log</Set>
125
+ <Set name="filename"><Property name="jetty.home"/>/../../log/jetty_request_yyyy_mm_dd.log</Set>
101
126
  <Set name="filenameDateFormat">yyyy_MM_dd</Set>
102
- <Set name="retainDays">90</Set>
127
+ <Set name="retainDays">30</Set>
103
128
  <Set name="append">true</Set>
104
- <Set name="extended">false</Set>
129
+ <Set name="extended">true</Set>
130
+ <Set name="logLatency">true</Set>
131
+ <Set name="logDispatch">true</Set>
132
+ <Set name="preferProxiedForAddress">true</Set>
105
133
  <Set name="logCookies">false</Set>
106
134
  <Set name="LogTimeZone">GMT</Set>
107
- </New>
108
- </Set>
109
- </New>
135
+ </New>
136
+ </Set>
137
+ </New>
110
138
  </Arg>
111
139
  </Call>
112
140
  </Ref>