You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2021/02/10 01:43:50 UTC
[lucene-solr] 06/09: @1333 More cleanup and correctness.
This is an automated email from the ASF dual-hosted git repository.
markrmiller pushed a commit to branch reference_impl_dev
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
commit 132fd422a4165e0fe2884d5f0e8000f0384d087e
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Thu Feb 4 14:00:26 2021 -0600
@1333 More cleanup and correctness.
# Conflicts:
# versions.props
---
solr/core/build.gradle | 1 +
.../processor/LogUpdateProcessorFactory.java | 2 +-
solr/server/resources/log4j2.xml | 31 ++--
.../org/apache/solr/common/util/NamedList.java | 198 +++++++++++----------
.../src/resources/logconf/log4j2-std-debug.xml | 7 +-
versions.props | 3 +-
6 files changed, 131 insertions(+), 111 deletions(-)
diff --git a/solr/core/build.gradle b/solr/core/build.gradle
index 011a374..6098be9 100644
--- a/solr/core/build.gradle
+++ b/solr/core/build.gradle
@@ -96,6 +96,7 @@ dependencies {
implementation 'org.apache.logging.log4j:log4j-api'
implementation 'org.apache.logging.log4j:log4j-core'
implementation 'org.apache.logging.log4j:log4j-slf4j-impl'
+ implementation 'com.vlkan.log4j2:log4j2-logstash-layout'
api 'org.bitbucket.b_c:jose4j'
implementation 'org.codehaus.janino:commons-compiler'
diff --git a/solr/core/src/java/org/apache/solr/update/processor/LogUpdateProcessorFactory.java b/solr/core/src/java/org/apache/solr/update/processor/LogUpdateProcessorFactory.java
index 5f299c9..2be93c3 100644
--- a/solr/core/src/java/org/apache/solr/update/processor/LogUpdateProcessorFactory.java
+++ b/solr/core/src/java/org/apache/solr/update/processor/LogUpdateProcessorFactory.java
@@ -62,7 +62,7 @@ public class LogUpdateProcessorFactory extends UpdateRequestProcessorFactory imp
@Override
public UpdateRequestProcessor getInstance(SolrQueryRequest req, SolrQueryResponse rsp, UpdateRequestProcessor next) {
- return (log.isDebugEnabled() || slowUpdateThresholdMillis >= 0 || Boolean.getBoolean("solr.logUpdateProcOnInfo")) ?
+ return (log.isInfoEnabled() || slowUpdateThresholdMillis >= 0) ?
new LogUpdateProcessor(req, rsp, this, next) : next;
}
diff --git a/solr/server/resources/log4j2.xml b/solr/server/resources/log4j2.xml
index 411de14..03a5c06 100644
--- a/solr/server/resources/log4j2.xml
+++ b/solr/server/resources/log4j2.xml
@@ -21,22 +21,20 @@
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
- <PatternLayout>
- <Pattern>
- %maxLen{%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t) [%X{node_name} %X{core}] %c{1.} %m%notEmpty{ =>%ex{short}}}{10240}%n
- </Pattern>
- </PatternLayout>
+ <LogstashLayout dateTimeFormatPattern="yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"
+ eventTemplateUri="classpath:LogstashJsonEventLayoutV1.json"
+ prettyPrintEnabled="true"
+ stackTraceEnabled="true"/>
</Console>
<RollingRandomAccessFile
name="MainLogFile"
fileName="${sys:solr.log.dir}/solr.log"
filePattern="${sys:solr.log.dir}/solr.log.%i" >
- <PatternLayout>
- <Pattern>
- %maxLen{%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t) [%X{node_name} %X{core}] %c{1.} %m%notEmpty{ =>%ex{short}}}{10240}%n
- </Pattern>
- </PatternLayout>
+ <LogstashLayout dateTimeFormatPattern="yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"
+ eventTemplateUri="classpath:LogstashJsonEventLayoutV1.json"
+ prettyPrintEnabled="true"
+ stackTraceEnabled="true"/>
<Policies>
<OnStartupTriggeringPolicy />
<SizeBasedTriggeringPolicy size="64 MB"/>
@@ -48,11 +46,10 @@
name="SlowLogFile"
fileName="${sys:solr.log.dir}/solr_slow_requests.log"
filePattern="${sys:solr.log.dir}/solr_slow_requests.log.%i" >
- <PatternLayout>
- <Pattern>
- %maxLen{%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t) [%X{node_name} %X{core}] %c{1.} %m%notEmpty{ =>%ex{short}}}{10240}%n
- </Pattern>
- </PatternLayout>
+ <LogstashLayout dateTimeFormatPattern="yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"
+ eventTemplateUri="classpath:LogstashJsonEventLayoutV1.json"
+ prettyPrintEnabled="true"
+ stackTraceEnabled="true"/>
<Policies>
<OnStartupTriggeringPolicy />
<SizeBasedTriggeringPolicy size="32 MB"/>
@@ -67,10 +64,12 @@
<AsyncLogger name="org.eclipse.jetty" level="WARN"/>
<AsyncLogger name="org.eclipse.jetty.server.Server" level="WARN"/>
<AsyncLogger name="org.apache.hadoop" level="WARN"/>
- <AsyncLogger name="org.apache.solr.update.LoggingInfoStream" level="OFF"/>
<AsyncLogger name="org.apache.zookeeper" level="WARN"/>
<AsyncLogger name="org.apache.zookeeper.ClientCnxn" level="ERROR"/>
<AsyncLogger name="org.apache.zookeeper.server.ZooKeeperCriticalThread" level="OFF"/>
+
+ <AsyncLogger name="org.apache.solr.update.processor.LogUpdateProcessorFactory" level="DEBUG"/>
+ <AsyncLogger name="org.apache.solr.update.LoggingInfoStream" level="OFF"/>
<AsyncLogger name="org.apache.solr.core.SolrCore.SlowRequest" level="INFO" additivity="false">
<AppenderRef ref="SlowLogFile"/>
</AsyncLogger>
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/NamedList.java b/solr/solrj/src/java/org/apache/solr/common/util/NamedList.java
index a05ffbc..3aabf32 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/NamedList.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/NamedList.java
@@ -182,7 +182,13 @@ public class NamedList<T> implements Cloneable, Serializable, Iterable<Map.Entry
* @return null if no name exists
*/
public String getName(int idx) {
- return (String)nvPairs.get(idx << 1);
+ Object name = null;
+ try {
+ name = nvPairs.get(idx << 1);
+ return (String) name;
+ } catch (ClassCastException e) {
+ return String.valueOf(name);
+ }
}
/**
@@ -422,96 +428,7 @@ public class NamedList<T> implements Cloneable, Serializable, Iterable<Map.Entry
return asShallowMap(false);
}
public Map<String,T> asShallowMap(boolean allowDps) {
- return new Map<String, T>() {
- @Override
- public int size() {
- return NamedList.this.size();
- }
-
- @Override
- public boolean isEmpty() {
- return size() == 0;
- }
-
- public boolean containsKey(Object key) {
- return NamedList.this.get((String) key) != null ;
- }
-
- @Override
- public boolean containsValue(Object value) {
- return false;
- }
-
- @Override
- public T get(Object key) {
- return NamedList.this.get((String) key);
- }
-
- @Override
- public T put(String key, T value) {
- if (allowDps) {
- NamedList.this.add(key, value);
- return null;
- }
- int idx = NamedList.this.indexOf(key, 0);
- if (idx == -1) {
- NamedList.this.add(key, value);
- } else {
- NamedList.this.setVal(idx, value);
- }
- return null;
- }
-
- @Override
- public T remove(Object key) {
- return NamedList.this.remove((String) key);
- }
-
- @Override
- @SuppressWarnings({"unchecked"})
- public void putAll(Map m) {
- boolean isEmpty = isEmpty();
- for (Object o : m.entrySet()) {
- @SuppressWarnings({"rawtypes"})
- Map.Entry e = (Entry) o;
- if (isEmpty) {// we know that there are no duplicates
- add((String) e.getKey(), (T) e.getValue());
- } else {
- put(e.getKey() == null ? null : e.getKey().toString(), (T) e.getValue());
- }
- }
- }
-
- @Override
- public void clear() {
- NamedList.this.clear();
- }
-
- @Override
- @SuppressWarnings({"unchecked"})
- public Set<String> keySet() {
- //TODO implement more efficiently
- return NamedList.this.asMap(1).keySet();
- }
-
- @Override
- @SuppressWarnings({"unchecked", "rawtypes"})
- public Collection values() {
- //TODO implement more efficiently
- return NamedList.this.asMap(1).values();
- }
-
- @Override
- public Set<Entry<String,T>> entrySet() {
- //TODO implement more efficiently
- return NamedList.this.asMap(1).entrySet();
- }
-
- @Override
- public void forEach(BiConsumer action) {
- NamedList.this.forEach(action);
- }
- };
+ return new ShallowMap(this, allowDps);
}
public Map asMap(int maxDepth) {
@@ -859,4 +776,103 @@ public class NamedList<T> implements Cloneable, Serializable, Iterable<Map.Entry
action.accept(getName(i), getVal(i));
}
}
+
+ private static class ShallowMap<T> implements Map<String, T> {
+ private final boolean allowDps;
+ private NamedList<T> namedList;
+
+ public ShallowMap(NamedList<T> namedList, boolean allowDps) {
+ this.allowDps = allowDps;
+ this.namedList = namedList;
+ }
+
+ @Override
+ public int size() {
+ return namedList.size();
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return size() == 0;
+ }
+
+ public boolean containsKey(Object key) {
+ return namedList.get((String) key) != null ;
+ }
+
+ @Override
+ public boolean containsValue(Object value) {
+ return false;
+ }
+
+ @Override
+ public T get(Object key) {
+ return namedList.get((String) key);
+ }
+
+ @Override
+ public T put(String key, T value) {
+ if (allowDps) {
+ namedList.add(key, value);
+ return null;
+ }
+ int idx = namedList.indexOf(key, 0);
+ if (idx == -1) {
+ namedList.add(key, value);
+ } else {
+ namedList.setVal(idx, value);
+ }
+ return null;
+ }
+
+ @Override
+ public T remove(Object key) {
+ return namedList.remove((String) key);
+ }
+
+ @Override
+ @SuppressWarnings({"unchecked"})
+ public void putAll(Map m) {
+ boolean isEmpty = isEmpty();
+ for (Object o : m.entrySet()) {
+ @SuppressWarnings({"rawtypes"})
+ Entry e = (Entry) o;
+ if (isEmpty) {// we know that there are no duplicates
+ namedList.add((String) e.getKey(), (T) e.getValue());
+ } else {
+ put(e.getKey() == null ? null : e.getKey().toString(), (T) e.getValue());
+ }
+ }
+ }
+
+ @Override
+ public void clear() {
+ namedList.clear();
+ }
+
+ @Override
+ @SuppressWarnings({"unchecked"})
+ public Set<String> keySet() {
+ //TODO implement more efficiently
+ return namedList.asMap(1).keySet();
+ }
+
+ @Override
+ @SuppressWarnings({"unchecked", "rawtypes"})
+ public Collection values() {
+ //TODO implement more efficiently
+ return namedList.asMap(1).values();
+ }
+
+ @Override
+ public Set<Entry<String,T>> entrySet() {
+ //TODO implement more efficiently
+ return namedList.asMap(1).entrySet();
+ }
+
+ @Override
+ public void forEach(BiConsumer action) {
+ namedList.forEach(action);
+ }
+ }
}
diff --git a/solr/test-framework/src/resources/logconf/log4j2-std-debug.xml b/solr/test-framework/src/resources/logconf/log4j2-std-debug.xml
index 3e237f5..a207c3b 100644
--- a/solr/test-framework/src/resources/logconf/log4j2-std-debug.xml
+++ b/solr/test-framework/src/resources/logconf/log4j2-std-debug.xml
@@ -20,7 +20,10 @@
<Appenders>
<Console name="STDERR_COLOR" target="SYSTEM_ERR">
- <PatternLayout pattern="%style{%-4r}{yellow} %highlight{%maxLen{%-1p}{20}} %style{(%maxLen{%t}{20})}{yellow,bold} [%style{%X{node_name} %X{core}}{cyan}] %style{%c{1.}}{cyan} %highlight{%m %notEmpty{%ex}}\n"/>
+ <LogstashLayout dateTimeFormatPattern="yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"
+ eventTemplateUri="classpath:LogstashJsonEventLayoutV1.json"
+ prettyPrintEnabled="true"
+ stackTraceEnabled="true"/>
</Console>
<File name="FILE" fileName="${sys:user.home}/solr-test.log" immediateFlush="false" append="false">
@@ -59,7 +62,7 @@
<AsyncRoot level="INFO">
<AppenderRef ref="STDERR_COLOR"/>
- <!-- <AppenderRef ref="FILE"/>-->
+ <AppenderRef ref="FILE"/>
</AsyncRoot>
</Loggers>
</Configuration>
diff --git a/versions.props b/versions.props
index 9438583..775c88b 100644
--- a/versions.props
+++ b/versions.props
@@ -111,4 +111,5 @@ org.awaitility:awaitility:4.0.3
org.xerial.snappy:snappy-java=1.1.8.1
org.lz4:lz4-java:1.7.1
commons-cli:commons-cli=1.4
-org.jline:jline=3.19.0
\ No newline at end of file
+org.jline:jline=3.19.0
+com.vlkan.log4j2:log4j2-logstash-layout=1.0.5