Skip to content

Commit a7cbf21

Browse files
authored
[1.7.x] Refactor CustomJsonLayout, and test it locally (#1200)
* Refactor CustomJsonLayout to use default logback layout configuration for envars This will skip the period when CDI isn't started, when it's still trying to log things. It also skips the need for CDI.current() to lookup the environment configuration, putting the envar extraction config directly in logback.xml Conflicts: deployments/launcher/src/main/etc/indy/logging/logback.xml * Remove old CustomJsonLayout class * remove unused constant * Be more careful about empty strings when pulling envars * adjust example kafka config to include SSL params
1 parent 4d0bcf1 commit a7cbf21

4 files changed

Lines changed: 60 additions & 74 deletions

File tree

api/pom.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,14 @@
6868
<groupId>com.fasterxml.jackson.core</groupId>
6969
<artifactId>jackson-databind</artifactId>
7070
</dependency>
71+
<dependency>
72+
<groupId>ch.qos.logback.contrib</groupId>
73+
<artifactId>logback-jackson</artifactId>
74+
</dependency>
75+
<dependency>
76+
<groupId>ch.qos.logback.contrib</groupId>
77+
<artifactId>logback-json-classic</artifactId>
78+
</dependency>
7179
</dependencies>
7280

7381
</project>

subsys/jaxrs/src/main/java/org/commonjava/indy/bind/jaxrs/CustomJsonLayout.java renamed to api/src/main/java/org/commonjava/indy/CustomJsonLayout.java

Lines changed: 37 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -13,49 +13,63 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
package org.commonjava.indy.bind.jaxrs;
16+
package org.commonjava.indy;
1717

1818
import ch.qos.logback.classic.spi.ILoggingEvent;
1919
import ch.qos.logback.contrib.json.classic.JsonLayout;
20-
import com.fasterxml.jackson.core.JsonProcessingException;
21-
import org.commonjava.indy.conf.EnvironmentConfig;
22-
import org.commonjava.indy.model.core.io.IndyObjectMapper;
20+
import org.apache.commons.lang.StringUtils;
2321
import org.slf4j.Logger;
2422
import org.slf4j.LoggerFactory;
2523

26-
import javax.enterprise.inject.spi.CDI;
24+
import java.util.HashMap;
2725
import java.util.Map;
28-
29-
import static org.commonjava.indy.bind.jaxrs.RequestContextConstants.ENVIRONMENT;
26+
import java.util.stream.Stream;
3027

3128
/**
3229
* Created by yma on 2019/3/26.
3330
*/
3431
public class CustomJsonLayout
3532
extends JsonLayout
3633
{
34+
public static final String ENVIRONMENT = "environment";
35+
3736
private final Logger logger = LoggerFactory.getLogger( getClass() );
3837

38+
private String environmentMappings;
39+
40+
private Map<String, String> envars;
41+
42+
public String getEnvironmentMappings()
43+
{
44+
return environmentMappings;
45+
}
46+
47+
public void setEnvironmentMappings( final String environmentMappings )
48+
{
49+
this.environmentMappings = environmentMappings;
50+
51+
String[] mappings = environmentMappings == null ? new String[0] : environmentMappings.split( "\\s*,\\s*" );
52+
envars = new HashMap<>();
53+
Stream.of(mappings).forEach( kv ->{
54+
String[] keyAlias = kv.split( "\\s*=\\s*" );
55+
if ( keyAlias.length > 1 )
56+
{
57+
String value = System.getenv( keyAlias[0].trim() );
58+
if ( StringUtils.isEmpty( value ) )
59+
{
60+
value = "Unknown";
61+
}
62+
63+
envars.put( keyAlias[1].trim(), value );
64+
}
65+
} );
66+
}
67+
3968
@Override
4069
protected void addCustomDataToJsonMap( Map<String, Object> map, ILoggingEvent iLoggingEvent )
4170
{
42-
IndyObjectMapper objectMapper = new IndyObjectMapper( true );
4371
super.addCustomDataToJsonMap( map, iLoggingEvent );
4472

45-
if ( !iLoggingEvent.getMDCPropertyMap().isEmpty() )
46-
{
47-
Map<String, String> mdcs = (Map<String, String>) map.get( MDC_ATTR_NAME );
48-
try
49-
{
50-
Map<String, String> envars = CDI.current().select( EnvironmentConfig.class ).get().getEnvars();
51-
mdcs.put( ENVIRONMENT, objectMapper.writeValueAsString( envars ) );
52-
}
53-
catch ( JsonProcessingException e )
54-
{
55-
mdcs.put( ENVIRONMENT, "{error: \"Envars could not be processed by Jackson.\"}" );
56-
logger.error( String.format( "Failed to create environment mdc. Reason: %s", e.getMessage() ), e );
57-
}
58-
map.put( MDC_ATTR_NAME, mdcs );
59-
}
73+
map.put( ENVIRONMENT, envars );
6074
}
6175
}

deployments/launcher/src/main/etc/indy/logging/logback.xml

Lines changed: 15 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -82,43 +82,6 @@
8282
</encoder>
8383
</appender>
8484

85-
<!-- This appender is used for reporting to elasticsearch. -->
86-
<!-- appender name="ELASTIC" class="com.internetitem.logback.elasticsearch.ElasticsearchAppender">
87-
<url>${elasticsearch.server.url}</url>
88-
<index>${elasticsearch.index}</index>
89-
<type>${elasticsearch.type}</type>
90-
<loggerName>${elasticsearch.loggerName}</loggerName>
91-
<properties>
92-
<property>
93-
<name>host</name>
94-
<value>${HOSTNAME}</value>
95-
<allowEmpty>false</allowEmpty>
96-
</property>
97-
<property>
98-
<name>severity</name>
99-
<value>%level</value>
100-
</property>
101-
<property>
102-
<name>thread</name>
103-
<value>%thread</value>
104-
</property>
105-
<property>
106-
<name>stacktrace</name>
107-
<value>%ex</value>
108-
</property>
109-
<property>
110-
<name>logger</name>
111-
<value>%logger</value>
112-
</property>
113-
</properties>
114-
<headers>
115-
<header>
116-
<name>Content-Type</name>
117-
<value>text/plain</value>
118-
</header>
119-
</headers>
120-
</appender -->
121-
12285
<!-- This example configuration is probably most unreliable under
12386
failure conditions but wont block your application at all -->
12487
<!-- The encoder part is using JsonLayout format encoder to generate structured logs using json format -->
@@ -134,9 +97,16 @@
13497
<!--
13598
<appender name="KAFKA" class="com.github.danielwegener.logback.kafka.KafkaAppender">
13699
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
137-
<layout class="ch.qos.logback.contrib.json.classic.JsonLayout">
100+
<layout class="org.commonjava.indy.CustomJsonLayout">
138101
<jsonFormatter class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter"/>
139102
<appendLineSeparator>true</appendLineSeparator>
103+
104+
<environmentMappings><![CDATA[
105+
OPENSHIFT_BUILD_NAMESPACE=NAMESPACE,
106+
OPENSHIFT_BUILD_NAME=BUILD_NAME,
107+
OPENSHIFT_BUILD_COMMIT=BUILD_COMMIT,
108+
HOSTNAME=HOSTNAME
109+
]]></environmentMappings>
140110
</layout>
141111
</encoder>
142112
@@ -145,6 +115,13 @@
145115
<deliveryStrategy class="com.github.danielwegener.logback.kafka.delivery.AsynchronousDeliveryStrategy" />
146116
147117
<producerConfig>bootstrap.servers=localhost:9092</producerConfig>
118+
119+
<producerConfig>security.protocol=SSL</producerConfig>
120+
<producerConfig>ssl.keystore.location=/path/to/secret/keystore.jks</producerConfig>
121+
<producerConfig>ssl.keystore.password=changeit</producerConfig>
122+
<producerConfig>ssl.truststore.location=/path/to/secret/truststore.jks</producerConfig>
123+
<producerConfig>ssl.truststore.password=changeit</producerConfig>
124+
148125
<producerConfig>acks=0</producerConfig>
149126
<producerConfig>linger.ms=1000</producerConfig>
150127
<producerConfig>max.block.ms=0</producerConfig>
@@ -171,8 +148,6 @@
171148
<logger name="org.commonjava.indy.action.IndyLifecycleManager" level="INFO" />
172149
<logger name="org.commonjava.indy.subsys.infinispan.CacheProducer" level="INFO" />
173150

174-
<!-- <logger name="org.commonjava.maven.galley.transport" level="DEBUG" /> -->
175-
176151
<logger name="org.commonjava.topic.content.delete" level="INFO">
177152
<appender-ref ref="CONTENT-DELETE" />
178153
</logger>
@@ -193,14 +168,6 @@
193168
<!--
194169
<appender-ref ref="KAFKA" />
195170
-->
196-
197-
<!-- if elasticsearch function is on, include ELASTIC appender-->
198-
<!-- if condition='property("elasticsearch.enable").equalsIgnoreCase("true")'>
199-
<then>
200-
<appender-ref ref="ELASTIC" />
201-
</then>
202-
</if -->
203-
204171
</root>
205172

206173
</configuration>

subsys/jaxrs/src/main/java/org/commonjava/indy/bind/jaxrs/RequestContextConstants.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,4 @@ public class RequestContextConstants
6060

6161
@Thread @MDC
6262
public static final String PREFERRED_ID = "preferred-id";
63-
64-
@Thread @MDC
65-
public static final String ENVIRONMENT = "environment";
6663
}

0 commit comments

Comments
 (0)