Issue #984 Improve module listing

Simplified start.jar ini mechanism
updated logging modules to have file handlers
This commit is contained in:
Greg Wilkins 2016-10-13 16:01:03 +11:00
parent 438ecb8dc3
commit d5a4f0f6d4
30 changed files with 171 additions and 159 deletions

View File

@ -15,7 +15,7 @@ etc/sessions/session-data-cache/session-caching-store.xml
[ini]
session-data-cache=xmemcached
session-data-cache|=xmemcached
[ini-template]

View File

@ -15,7 +15,7 @@ sessions/jdbc/${db-connection-type}
etc/sessions/jdbc/session-store.xml
[ini]
db-connection-type=datasource
db-connection-type|=datasource
[ini-template]
##

View File

@ -50,11 +50,15 @@ public class Modules implements Iterable<Module>
this._baseHome = basehome;
this._args = args;
String java_version = System.getProperty("java.version");
if (java_version!=null)
// Allow override mostly for testing
if (!args.getProperties().containsKey("java.version"))
{
args.setProperty("java.version",java_version,"<internal>",false);
}
String java_version = System.getProperty("java.version");
if (java_version!=null)
{
args.setProperty("java.version",java_version,"<internal>");
}
}
}
public void dump(List<String> tags)
@ -279,14 +283,7 @@ public class Modules implements Iterable<Module>
{
// If the already enabled module is transitive and this enable is not
if (p.isTransitive() && !transitive)
{
p.clearTransitiveEnable();
if (p.hasDefaultConfig())
{
for (String a : p.getDefaultConfig())
_args.removeProperty(a,p.getName());
}
}
else
throw new UsageException("%s provides %s, which is already provided by %s enabled in %s",module.getName(),name,p.getName(),p.getEnableSources());
}
@ -307,7 +304,7 @@ public class Modules implements Iterable<Module>
if (module.hasDefaultConfig())
{
for(String line:module.getDefaultConfig())
_args.parse(line,module.getName(),false);
_args.parse(line,module.getName()+"[ini]");
for (Module m:_modules)
m.expandProperties(_args.getProperties());
}

View File

@ -181,7 +181,8 @@ public final class Props implements Iterable<Prop>
public boolean containsKey(String key)
{
return props.containsKey(key);
Prop prop = props.get(key);
return prop!=null && prop.value!=null;
}
public String expand(String str)
@ -381,17 +382,4 @@ public final class Props implements Iterable<Prop>
{
return props.toString();
}
public void remove(String key, String value, String source)
{
Prop prop = props.get(key);
if (prop!=null && value.equals(prop.value) && source.equals(prop.origin))
{
if (prop.overrides==null)
props.remove(key);
else
props.put(key,prop.overrides);
}
}
}

View File

@ -793,11 +793,6 @@ public class StartArgs
}
}
public void parse(final String rawarg, String source)
{
parse(rawarg,source,true);
}
/**
* Parse a single line of argument.
*
@ -805,17 +800,15 @@ public class StartArgs
* the raw argument to parse
* @param source
* the origin of this line of argument
* @param replaceProps
* true if properties in this parse replace previous ones, false to not replace.
*/
public void parse(final String rawarg, String source, boolean replaceProps)
public void parse(final String rawarg, String source)
{
if (rawarg == null)
{
return;
}
StartLog.debug("parse(\"%s\", \"%s\", %b)",rawarg,source,replaceProps);
StartLog.debug("parse(\"%s\", \"%s\")",rawarg,source);
final String arg = rawarg.trim();
@ -1026,11 +1019,11 @@ public class StartArgs
{
case 2:
System.setProperty(assign[0],assign[1]);
setProperty(assign[0],assign[1],source,replaceProps);
setProperty(assign[0],assign[1],source);
break;
case 1:
System.setProperty(assign[0],"");
setProperty(assign[0],"",source,replaceProps);
setProperty(assign[0],"",source);
break;
default:
break;
@ -1060,32 +1053,32 @@ public class StartArgs
{
key = key.substring(0,key.length()-1);
String orig = getProperties().getString(key);
if (orig != null && !orig.isEmpty())
if (orig == null || orig.isEmpty())
{
if (value.startsWith(","))
value=value.substring(1);
}
else
{
value=orig+value;
source=propertySource.get(key)+","+source;
}
}
else if (key.endsWith(","))
if (key.endsWith("|"))
{
key = key.substring(0,key.length()-1);
String orig = getProperties().getString(key);
if (orig != null && !orig.isEmpty())
{
value=value.isEmpty()?orig:(orig+","+value);
source=propertySource.get(key)+","+source;
}
if (getProperties().containsKey(key))
return;
}
else if (replaceProps)
else if (propertySource.containsKey(key))
{
if (propertySource.containsKey(key))
{
if(!propertySource.get(key).endsWith("[ini]"))
StartLog.warn("Property %s in %s already set in %s",key,source,propertySource.get(key));
}
propertySource.put(key,source);
}
setProperty(key,value,source,replaceProps);
setProperty(key,value,source);
return;
}
@ -1166,7 +1159,7 @@ public class StartArgs
this.allModules = allModules;
}
public void setProperty(String key, String value, String source, boolean replaceProp)
public void setProperty(String key, String value, String source)
{
// Special / Prevent override from start.ini's
if (key.equals("jetty.home"))
@ -1182,33 +1175,18 @@ public class StartArgs
return;
}
if (value==null || value.isEmpty())
properties.remove(key,value,source);
else if (replaceProp || (!properties.containsKey(key)))
properties.setProperty(key,value,source);
if(key.equals("java.version"))
{
properties.setProperty(key,value,source);
if(key.equals("java.version"))
{
Version ver = new Version(value);
Version ver = new Version(value);
properties.setProperty("java.version",ver.toShortString(),source);
properties.setProperty("java.version.major",Integer.toString(ver.getLegacyMajor()),source);
properties.setProperty("java.version.minor",Integer.toString(ver.getMajor()),source);
properties.setProperty("java.version.revision",Integer.toString(ver.getRevision()),source);
properties.setProperty("java.version.update",Integer.toString(ver.getUpdate()),source);
}
properties.setProperty("java.version",ver.toShortString(),source);
properties.setProperty("java.version.major",Integer.toString(ver.getLegacyMajor()),source);
properties.setProperty("java.version.minor",Integer.toString(ver.getMajor()),source);
properties.setProperty("java.version.revision",Integer.toString(ver.getRevision()),source);
properties.setProperty("java.version.update",Integer.toString(ver.getUpdate()),source);
}
}
public void removeProperty(String rawPropValue, String source)
{
int idx = rawPropValue.indexOf('=');
String key = rawPropValue.substring(0,idx);
String value = rawPropValue.substring(idx + 1);
properties.remove(key,value,source);
}
public void setRun(boolean run)
{

View File

@ -153,10 +153,13 @@ Properties:
name+=value
Add to an existing property.
name,=value
name+=,value
Add to an existing property as a comma separated list.
name|=value
Set a property only if it is not already set.
STOP.HOST=[string]
The host to use to stop the running Jetty server (defaults to 127.0.0.1)
Required along with STOP.PORT if you want to use the --stop option above.

View File

@ -3,6 +3,6 @@ port=9090
add+=beginning
add+=middle
add+=end
list,=one
list,=two
list,=three
list+=,one
list+=,two
list+=,three

View File

@ -12,7 +12,7 @@
<New id="ServerLog" class="java.io.PrintStream">
<Arg>
<New class="org.eclipse.jetty.util.RolloverFileOutputStream">
<Arg><Property name="jetty.logging.dir" deprecated="jetty.logs" default="./logs"/>/yyyy_mm_dd.stderrout.log</Arg>
<Arg><Property name="jetty.logging.dir" deprecated="jetty.logs" default="./logs"/>/yyyy_mm_dd.jetty.log</Arg>
<Arg type="boolean"><Property name="jetty.logging.append" default="false"/></Arg>
<Arg type="int"><Property name="jetty.logging.retainDays" default="90"/></Arg>
<Arg>

View File

@ -8,6 +8,7 @@ jcl
internal
[depends]
resources
[provides]
jcl-api
@ -15,9 +16,11 @@ jcl-impl
[files]
maven://commons-logging/commons-logging/${jcl.version}|lib/jcl/commons-logging-${jcl.version}.jar
basehome:modules/jcl/commons-logging.properties|resources/commons-logging.properties
logs/
[lib]
lib/jcl/commons-logging-${jcl.version}.jar
lib/jcl/*.jar
[license]
Log4j is released under the Apache 2.0 license.
@ -26,6 +29,3 @@ http://www.apache.org/licenses/LICENSE-2.0.html
[ini]
jcl.version=1.1.3
[ini-template]
## After changing versions, run 'java -jar $JETTY_HOME/start.jar --create-files'
#jcl.version=1.1.3

View File

@ -0,0 +1 @@
org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog

View File

@ -0,0 +1,22 @@
[description]
Configures the Java Util Logging mechanism
[tags]
logging
jul
internal
[depends]
resources
[provides]
jul-api
jul-impl
[files]
basehome:modules/jul/java-util-logging.properties|etc/java-util-logging.properties
logs/
[exec]
-Djava.util.logging.config.file=etc/java-util-logging.properties

View File

@ -0,0 +1,31 @@
handlers = java.util.logging.FileHandler
# Default global logging level.
# This specifies which kinds of events are logged across
# all loggers. For any given facility this global level
# can be overriden by a facility specific level
# Note that the ConsoleHandler also has a separate level
# setting to limit messages printed to the console.
.level = INFO
############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################
# default file output is in user's home directory.
java.util.logging.FileHandler.pattern = logs/jetty%u.log
java.util.logging.FileHandler.limit = 50000
java.util.logging.FileHandler.count = 1
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
# Limit the message that are printed on the console to INFO and above.
java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
# Example to customize the SimpleFormatter output format
# to print one-line log message like this:
# <level>: <log message> [<date/time>]
#
# java.util.logging.SimpleFormatter.format=%4$s: %5$s [%1$tc]%n

View File

@ -17,9 +17,10 @@ log4j-impl
[files]
basehome:modules/log4j/log4j.properties|resources/log4j.properties
maven://log4j/log4j/${log4j.version}|lib/log4j/log4j-${log4j.version}.jar
logs/
[lib]
lib/log4j/log4j-${log4j.version}.jar
lib/log4j/*.jar
[license]
Log4j is released under the Apache 2.0 license.
@ -28,6 +29,3 @@ http://www.apache.org/licenses/LICENSE-2.0.html
[ini]
log4j.version=1.2.17
[ini-template]
## After changing versions, run 'java -jar $JETTY_HOME/start.jar --create-files'
#log4j.version=1.2.17

View File

@ -1,7 +1,18 @@
log4j.rootLogger=INFO, stdout
log4j.rootLogger=INFO, file
#log4j.rootLogger=INFO, stderr
log4j.appender.stderr.Target=System.err
log4j.appender.stderr=org.apache.log4j.ConsoleAppender
log4j.appender.stderr.layout=org.apache.log4j.PatternLayout
log4j.appender.stderr.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=${jetty.base}/logs/jetty.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

View File

@ -20,6 +20,3 @@ http://www.apache.org/licenses/LICENSE-2.0.html
[ini]
log4j2.version=2.6.1
[ini-template]
## After changing versions, run 'java -jar $JETTY_HOME/start.jar --create-files'
#log4j2.version=2.6.1

View File

@ -16,9 +16,10 @@ resources
log4j2-impl
[files]
maven://org.apache.logging.log4j/log4j-core/${log4j2.version}|lib/log4j2/log4j-core-${log4j2.version}.jar
basehome:modules/log4j2/log4j2.xml|resources/log4j2.xml
maven://org.apache.logging.log4j/log4j-core/${log4j2.version}|lib/log4j/log4j-core-${log4j2.version}.jar
logs/
[lib]
lib/log4j/log4j-core-${log4j2.version}.jar
lib/log4j2/*.jar

View File

@ -1,14 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="console" target="SYSTEM_ERR">
<PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="info" additivity="false">
<AppenderRef ref="console"/>
</Root>
</Loggers>
<Configuration status="warn" name="Jetty" >
<Appenders>
<RollingFile name="RollingFile" fileName="logs/jetty.log" filePattern="logs/jetty-%d{MM-dd-yyyy}.log.gz" ignoreExceptions="false">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
<TimeBasedTriggeringPolicy />
</RollingFile>
<Console name="Console" target="SYSTEM_ERR">
<PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>

View File

@ -6,11 +6,16 @@ and logback-access
logging
internal
[depends]
resources
[files]
maven://ch.qos.logback/logback-core/${logback.version}|lib/logback/logback-core-${logback.version}.jar
basehome:modules/logback/logback.xml|resources/logback.xml
logs/
[lib]
lib/logback/logback-core-${logback.version}.jar
lib/logback/*.jar
[license]
Logback: the reliable, generic, fast and flexible logging framework.
@ -32,6 +37,3 @@ or (per the licensee's choosing) under
[ini]
logback.version=1.1.7
[ini-template]
## After changing versions, run 'java -jar $JETTY_HOME/start.jar --create-files'
#logback.version=1.1.7

View File

@ -15,6 +15,5 @@ logging
[exec]
-Dorg.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.Slf4jLog
[ini-template]
## Hide logging classes from deployed webapps
[ini]
jetty.webapp.addServerClasses,=file:${jetty.base}/lib/slf4j/,file:${jetty.base}/lib/jul

View File

@ -7,6 +7,7 @@ logging
[depends]
resources
stderrout-logging
[provide]
logging

View File

@ -1,8 +1,8 @@
## Setup jetty logging implementation
org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StdErrLog
## Force jetty logging implementation
#org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StdErrLog
## Levels are ALL, DEBUG, INFO, WARN, OFF
org.eclipse.jetty.LEVEL=INFO
## Set logging levels from: ALL, DEBUG, INFO, WARN, OFF
#org.eclipse.jetty.LEVEL=INFO
#com.example.LEVEL=INFO
## Hide stacks traces in logs?

View File

@ -14,6 +14,5 @@ logging
[exec]
-Dorg.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.Slf4jLog
[ini-template]
## Hide logging classes from deployed webapps
[ini]
jetty.webapp.addServerClasses,=file:${jetty.base}/lib/slf4j/

View File

@ -15,6 +15,5 @@ logging
[exec]
-Dorg.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.Slf4jLog
[ini-template]
## Hide logging classes from deployed webapps
jetty.webapp.addServerClasses,=file:${jetty.base}/lib/slf4j/,file:${jetty.base}/lib/log4j/
[ini]
jetty.webapp.addServerClasses+=,file:${jetty.base}/lib/slf4j/,file:${jetty.base}/lib/log4j/

View File

@ -15,6 +15,5 @@ logging
[exec]
-Dorg.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.Slf4jLog
[ini-template]
## Hide logging classes from deployed webapps
[ini]
jetty.webapp.addServerClasses,=file:${jetty.base}/lib/slf4j/,file:${jetty.base}/lib/log4j/

View File

@ -15,6 +15,5 @@ logging
[exec]
-Dorg.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.Slf4jLog
[ini-template]
## Hide logging classes from deployed webapps
[ini]
jetty.webapp.addServerClasses,=file:${jetty.base}/lib/slf4j/,file:${jetty.base}/lib/logback

View File

@ -14,6 +14,5 @@ logging
[exec]
-Dorg.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.Slf4jLog
[ini-template]
## Hide logging classes from deployed webapps
[ini]
jetty.webapp.addServerClasses,=file:${jetty.base}/lib/slf4j/

View File

@ -1,23 +0,0 @@
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
<Configure id="Server" class="org.eclipse.jetty.server.Server">
<Call class="org.eclipse.jetty.webapp.WebAppContext" name="addSystemClasses">
<Arg><Ref refid="Server"/></Arg>
<Arg>
<Call class="org.eclipse.jetty.util.StringUtil" name="csvSplit">
<Arg><Property name="jetty.webapp.addSystemClasses"/></Arg>
</Call>
</Arg>
</Call>
<Call class="org.eclipse.jetty.webapp.WebAppContext" name="addServerClasses">
<Arg><Ref refid="Server"/></Arg>
<Arg>
<Call class="org.eclipse.jetty.util.StringUtil" name="csvSplit">
<Arg><Property name="jetty.webapp.addServerClasses"/></Arg>
</Call>
</Arg>
</Call>
</Configure>

View File

@ -16,10 +16,6 @@ lib/slf4j/slf4j-api-${slf4j.version}.jar
[ini]
slf4j.version=1.7.21
[ini-template]
## After changing versions, run 'java -jar $JETTY_HOME/start.jar --create-files'
#slf4j.version=1.7.21
[license]
SLF4J is distributed under the MIT License.
Copyright (c) 2004-2013 QOS.ch

View File

@ -9,12 +9,15 @@ internal
[depend]
slf4j-api
resources
[provide]
slf4j-impl
[files]
maven://org.slf4j/slf4j-simple/${slf4j.version}|lib/slf4j/slf4j-simple-${slf4j.version}.jar
basehome:modules/slf4j/simplelogger.properties|resources/simplelogger.properties
logs/
[lib]
lib/slf4j/slf4j-simple-${slf4j.version}.jar
lib/slf4j/*.jar

View File

@ -0,0 +1,6 @@
org.slf4j.simpleLogger.logFile=logs/jetty.log
org.slf4j.simpleLogger.defaultLogLevel=info
org.slf4j.simpleLogger.showDateTime=true
org.slf4j.simpleLogger.showThreadName=true
#org.slf4j.simpleLogger.log.org.eclipse.jetty=debug