293739 - Deprecate static Jetty Log usage in favor of named logs
+ Adding StdErrLog.setPrintLongNames(boolean) to allow configuration of long form or condensed form log names.
This commit is contained in:
parent
f6d45d5650
commit
953b3512f7
|
@ -119,10 +119,20 @@ public class Log
|
|||
initialized();
|
||||
return __log;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the root logger.
|
||||
* @return the root logger
|
||||
*/
|
||||
public static Logger getRootLogger() {
|
||||
initialized();
|
||||
return __log;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated anonymous logging is deprecated, use a named {@link Logger} obtained from {@link #getLogger(String)}
|
||||
*/
|
||||
@Deprecated
|
||||
static boolean isIgnored()
|
||||
{
|
||||
return __ignored;
|
||||
|
|
|
@ -32,7 +32,11 @@ import org.eclipse.jetty.util.DateCache;
|
|||
* source method/file of a log is logged. For named debuggers, the system
|
||||
* property name+".SOURCE" is checked. If it is not not set, then
|
||||
* "org.eclipse.jetty.util.log.SOURCE" is used as the default.
|
||||
*
|
||||
* <p>
|
||||
* If the system property "org.eclipse.jetty.util.log.LONG" is set, then the
|
||||
* full, unabbreviated name of the logger is used for logging.
|
||||
* For named debuggers, the system property name+".LONG" is checked.
|
||||
* If it is not not set, then "org.eclipse.jetty.util.log.LONG" is used as the default.
|
||||
*/
|
||||
public class StdErrLog implements Logger
|
||||
{
|
||||
|
@ -44,6 +48,8 @@ public class StdErrLog implements Logger
|
|||
private final static boolean __source = Boolean.parseBoolean(
|
||||
System.getProperty("org.eclipse.jetty.util.log.SOURCE",
|
||||
System.getProperty("org.eclipse.jetty.util.log.stderr.SOURCE", "false")));
|
||||
private final static boolean __long = Boolean.parseBoolean(
|
||||
System.getProperty("org.eclipse.jetty.util.log.stderr.LONG", "false"));
|
||||
|
||||
private final static ConcurrentMap<String,StdErrLog> __loggers = new ConcurrentHashMap<String, StdErrLog>();
|
||||
|
||||
|
@ -61,7 +67,12 @@ public class StdErrLog implements Logger
|
|||
|
||||
private boolean _debug = __debug;
|
||||
private boolean _source = __source;
|
||||
private final String _name;
|
||||
// Print the long form names, otherwise use abbreviated
|
||||
private boolean _printLongNames = __long;
|
||||
// The full log name, as provided by the system.
|
||||
private final String _name;
|
||||
// The abbreviated log name (used by default, unless _long is specified)
|
||||
private final String _abbrevname;
|
||||
private boolean _hideStacks = false;
|
||||
|
||||
public StdErrLog()
|
||||
|
@ -72,6 +83,7 @@ public class StdErrLog implements Logger
|
|||
public StdErrLog(String name)
|
||||
{
|
||||
this._name = name == null ? "" : name;
|
||||
this._abbrevname = condensePackageString(this._name);
|
||||
|
||||
try
|
||||
{
|
||||
|
@ -91,11 +103,52 @@ public class StdErrLog implements Logger
|
|||
_source = __source;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Condenses a classname by stripping down the package name to just the first character of each package name
|
||||
* segment.
|
||||
* <p>
|
||||
*
|
||||
* <pre>
|
||||
* Examples:
|
||||
* "org.eclipse.jetty.test.FooTest" = "oejt.FooTest"
|
||||
* "org.eclipse.jetty.server.logging.LogTest" = "orjsl.LogTest"
|
||||
* </pre>
|
||||
*
|
||||
* @param classname
|
||||
* the fully qualified class name
|
||||
* @return the condensed name
|
||||
*/
|
||||
protected static String condensePackageString(String classname)
|
||||
{
|
||||
String parts[] = classname.split("\\.");
|
||||
StringBuilder dense = new StringBuilder();
|
||||
for (int i = 0; i < (parts.length - 1); i++)
|
||||
{
|
||||
dense.append(parts[i].charAt(0));
|
||||
}
|
||||
if (dense.length() > 0)
|
||||
{
|
||||
dense.append('.');
|
||||
}
|
||||
dense.append(parts[parts.length - 1]);
|
||||
return dense.toString();
|
||||
}
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return _name;
|
||||
}
|
||||
|
||||
public void setPrintLongNames(boolean printLongNames)
|
||||
{
|
||||
this._printLongNames = printLongNames;
|
||||
}
|
||||
|
||||
public boolean isPrintLongNames()
|
||||
{
|
||||
return this._printLongNames;
|
||||
}
|
||||
|
||||
public boolean isHideStacks()
|
||||
{
|
||||
|
@ -223,7 +276,13 @@ public class StdErrLog implements Logger
|
|||
buffer.append(".0");
|
||||
else
|
||||
buffer.append(".00");
|
||||
buffer.append(ms).append(tag).append(_name).append(':');
|
||||
buffer.append(ms).append(tag);
|
||||
if(_printLongNames) {
|
||||
buffer.append(_name);
|
||||
} else {
|
||||
buffer.append(_abbrevname);
|
||||
}
|
||||
buffer.append(':');
|
||||
if (_source)
|
||||
{
|
||||
Throwable source = new Throwable();
|
||||
|
@ -234,10 +293,11 @@ public class StdErrLog implements Logger
|
|||
String clazz = frame.getClassName();
|
||||
if (clazz.equals(StdErrLog.class.getName())|| clazz.equals(Log.class.getName()))
|
||||
continue;
|
||||
if (clazz.startsWith("org.eclipse.jetty."))
|
||||
buffer.append("o.e.j.").append(clazz,18,clazz.length());
|
||||
else
|
||||
if (!_printLongNames && clazz.startsWith("org.eclipse.jetty.")) {
|
||||
buffer.append(condensePackageString(clazz));
|
||||
} else {
|
||||
buffer.append(clazz);
|
||||
}
|
||||
buffer.append('#').append(frame.getMethodName());
|
||||
if (frame.getFileName()!=null)
|
||||
buffer.append('(').append(frame.getFileName()).append(':').append(frame.getLineNumber()).append(')');
|
||||
|
@ -328,6 +388,10 @@ public class StdErrLog implements Logger
|
|||
if (logger==null)
|
||||
{
|
||||
StdErrLog sel=new StdErrLog(fullname);
|
||||
// Preserve configuration for new loggers configuration
|
||||
sel.setPrintLongNames(_printLongNames);
|
||||
sel.setDebugEnabled(_debug);
|
||||
sel.setSource(_source);
|
||||
logger=__loggers.putIfAbsent(fullname,sel);
|
||||
if (logger==null)
|
||||
logger=sel;
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
|
||||
package org.eclipse.jetty.util.log;
|
||||
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.PrintStream;
|
||||
|
@ -77,28 +77,28 @@ public class LogTest
|
|||
@Test
|
||||
public void testStdErrLogFormat()
|
||||
{
|
||||
StdErrLog log = new StdErrLog("test");
|
||||
StdErrLog log = new StdErrLog(LogTest.class.getName());
|
||||
|
||||
log.info("testing:{},{}","test","format");
|
||||
logContains("INFO:test:testing:test,format");
|
||||
logContains("INFO:oejul.LogTest:testing:test,format");
|
||||
|
||||
log.info("testing:{}","test","format");
|
||||
logContains("INFO:test:testing:test format");
|
||||
logContains("INFO:oejul.LogTest:testing:test format");
|
||||
|
||||
log.info("testing","test","format");
|
||||
logContains("INFO:test:testing test format");
|
||||
logContains("INFO:oejul.LogTest:testing test format");
|
||||
|
||||
log.info("testing:{},{}","test",null);
|
||||
logContains("INFO:test:testing:test,null");
|
||||
logContains("INFO:oejul.LogTest:testing:test,null");
|
||||
|
||||
log.info("testing {} {}",null,null);
|
||||
logContains("INFO:test:testing null null");
|
||||
logContains("INFO:oejul.LogTest:testing null null");
|
||||
|
||||
log.info("testing:{}",null,null);
|
||||
logContains("INFO:test:testing:null");
|
||||
logContains("INFO:oejul.LogTest:testing:null");
|
||||
|
||||
log.info("testing",null,null);
|
||||
logContains("INFO:test:testing");
|
||||
logContains("INFO:oejul.LogTest:testing");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -125,6 +125,7 @@ public class LogTest
|
|||
public void testStdErrLogName()
|
||||
{
|
||||
StdErrLog log = new StdErrLog("test");
|
||||
log.setPrintLongNames(true);
|
||||
Assert.assertEquals("test",log.getName());
|
||||
|
||||
Logger next=log.getLogger("next");
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package org.eclipse.jetty.util.log;
|
||||
|
||||
import static org.hamcrest.Matchers.*;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.PrintStream;
|
||||
|
||||
|
@ -14,18 +15,19 @@ public class NamedLogTest
|
|||
private PrintStream orig;
|
||||
private ByteArrayOutputStream logstream;
|
||||
private PrintStream perr;
|
||||
private Logger origLogger;
|
||||
|
||||
@Before
|
||||
public void setUp()
|
||||
{
|
||||
origLogger = Log.getRootLogger();
|
||||
|
||||
orig = System.err;
|
||||
logstream = new ByteArrayOutputStream();
|
||||
perr = new PrintStream(logstream);
|
||||
System.setErr(perr);
|
||||
|
||||
StdErrLog logger = new StdErrLog();
|
||||
logger.setDebugEnabled(true);
|
||||
logger.setHideStacks(false);
|
||||
Log.setLog(logger);
|
||||
}
|
||||
|
||||
|
@ -34,6 +36,8 @@ public class NamedLogTest
|
|||
{
|
||||
System.out.println(logstream.toString());
|
||||
System.setErr(orig);
|
||||
|
||||
Log.setLog(origLogger);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -42,6 +46,10 @@ public class NamedLogTest
|
|||
Red red = new Red();
|
||||
Green green = new Green();
|
||||
Blue blue = new Blue();
|
||||
|
||||
setLoggerOptions(Red.class);
|
||||
setLoggerOptions(Green.class);
|
||||
setLoggerOptions(Blue.class);
|
||||
|
||||
red.generateLogs();
|
||||
green.generateLogs();
|
||||
|
@ -53,4 +61,14 @@ public class NamedLogTest
|
|||
Assert.assertThat(rawlog,containsString(Green.class.getName()));
|
||||
Assert.assertThat(rawlog,containsString(Blue.class.getName()));
|
||||
}
|
||||
|
||||
private void setLoggerOptions(Class<?> clazz)
|
||||
{
|
||||
Logger logger = Log.getLogger(clazz);
|
||||
logger.setDebugEnabled(true);
|
||||
|
||||
if(logger instanceof StdErrLog) {
|
||||
((StdErrLog)logger).setPrintLongNames(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@ public class StdErrLogTest extends TestCase
|
|||
{
|
||||
public void testNullValues()
|
||||
{
|
||||
StdErrLog log = new StdErrLog();
|
||||
StdErrLog log = new StdErrLog(StdErrLogTest.class.getName());
|
||||
log.setDebugEnabled(true);
|
||||
log.setHideStacks(true);
|
||||
|
||||
|
|
Loading…
Reference in New Issue