-
Notifications
You must be signed in to change notification settings - Fork 10
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
44179c9
commit 61be081
Showing
11 changed files
with
197 additions
and
41 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -26,22 +26,30 @@ | |
import org.apache.commons.cli.Options; | ||
import org.apache.commons.cli.ParseException; | ||
import org.jboss.pnc.buildagent.common.RandomUtils; | ||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
|
||
import java.nio.file.Path; | ||
import java.nio.file.Paths; | ||
import java.util.Arrays; | ||
import java.util.HashMap; | ||
import java.util.List; | ||
import java.util.Map; | ||
import java.util.Optional; | ||
import java.util.stream.Collectors; | ||
|
||
/** | ||
* @author <a href="mailto:[email protected]">Matej Lazar</a> | ||
*/ | ||
public class Main { | ||
|
||
private static final Logger logger = LoggerFactory.getLogger(Main.class); | ||
|
||
private static final String DEFAULT_HOST = "localhost"; | ||
private static final String DEFAULT_PORT = "8080"; | ||
|
||
public static void main(String[] args) throws ParseException, BuildAgentException, InterruptedException { | ||
logger.info("Starting Build Agent."); | ||
Options options = new Options(); | ||
options.addOption("b", true, "Address to bind. When not specified " + DEFAULT_HOST + " is used as default."); | ||
options.addOption("p", true, "Port to bind. When not specified " + DEFAULT_PORT + " is used as default."); | ||
|
@@ -64,8 +72,20 @@ public static void main(String[] args) throws ParseException, BuildAgentExceptio | |
if (logMDC == null) { | ||
logMDC = System.getenv("logMDC"); | ||
} | ||
if (logMDC == null) { | ||
logMDC = RandomUtils.randString(12); | ||
|
||
Optional<Map<String, String>> mdcParamMap; | ||
if (logMDC != null && !logMDC.isEmpty()) { | ||
mdcParamMap = parseMdc(logMDC); | ||
} else { | ||
mdcParamMap = Optional.empty(); | ||
} | ||
|
||
Map<String, String> mdcMap; | ||
if (mdcParamMap.isPresent()) { | ||
mdcMap = mdcParamMap.get(); | ||
} else { | ||
mdcMap = new HashMap<>(); | ||
mdcMap.put("ctx", RandomUtils.randString(12)); | ||
} | ||
|
||
if (cmd.hasOption("h")) { | ||
|
@@ -117,7 +137,21 @@ public static void main(String[] args) throws ParseException, BuildAgentExceptio | |
kafkaPropertiesPath, | ||
primaryLoggers, | ||
buildAgentOptions, | ||
logMDC); | ||
mdcMap); | ||
} | ||
|
||
private static Optional<Map<String, String>> parseMdc(String logMDC) { | ||
Map<String, String> mdcMap = new HashMap<>(); | ||
String[] keyVals = logMDC.split(","); | ||
for (String keyVal : keyVals) { | ||
String[] split = keyVal.split(":"); | ||
if (split.length != 2) { | ||
logger.warn("Invalid logMdc, expected comma-separated list of key value pairs delimited with colon. eg. k1:v1,k2,v2. Found:{}", logMDC); | ||
return Optional.empty(); | ||
} | ||
mdcMap.put(split[0], split[1]); | ||
} | ||
return Optional.of(mdcMap); | ||
} | ||
|
||
private static String getOption(CommandLine cmd, String opt, String defaultValue) { | ||
|
30 changes: 30 additions & 0 deletions
30
server/src/main/java/org/jboss/pnc/buildagent/server/formatter/LogbackFormatter.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
package org.jboss.pnc.buildagent.server.formatter; | ||
|
||
import ch.qos.logback.classic.Level; | ||
import ch.qos.logback.classic.Logger; | ||
import ch.qos.logback.classic.LoggerContext; | ||
import ch.qos.logback.classic.spi.ILoggingEvent; | ||
import ch.qos.logback.classic.spi.LoggingEvent; | ||
import ch.qos.logback.core.ConsoleAppender; | ||
import org.slf4j.LoggerFactory; | ||
|
||
/** | ||
* @author <a href="mailto:[email protected]">Matej Lazar</a> | ||
*/ | ||
public class LogbackFormatter { | ||
|
||
private final Logger logger; | ||
private final ConsoleAppender<ILoggingEvent> appender; | ||
|
||
public LogbackFormatter() { | ||
LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); | ||
logger = context.getLogger("org.jboss.pnc._userlog_.build-log"); | ||
appender = (ConsoleAppender<ILoggingEvent>) logger.getAppender("STDOUT-BUILD-LOG"); | ||
} | ||
|
||
public String format(String message) { | ||
ILoggingEvent logEvent = new LoggingEvent(LogbackFormatter.class.getName(), logger, Level.INFO, message, null, new Object[0]); | ||
byte[] encode = appender.getEncoder().encode(logEvent); | ||
return new String(encode); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
42 changes: 42 additions & 0 deletions
42
server/src/test/java/org/jboss/pnc/buildagent/server/formatter/TestLogbackFormatter.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
package org.jboss.pnc.buildagent.server.formatter; | ||
|
||
import com.fasterxml.jackson.databind.ObjectMapper; | ||
import org.junit.Assert; | ||
import org.junit.Test; | ||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
import org.slf4j.MDC; | ||
|
||
import java.io.IOException; | ||
import java.util.Collections; | ||
import java.util.Map; | ||
|
||
/** | ||
* @author <a href="mailto:[email protected]">Matej Lazar</a> | ||
*/ | ||
public class TestLogbackFormatter { | ||
|
||
Logger logger = LoggerFactory.getLogger(TestLogbackFormatter.class); | ||
|
||
@Test | ||
public void shouldReturnJsonFormatted() throws IOException { | ||
String message = "Major Tom, where is your ship ?"; | ||
LogbackFormatter logbackJsonFormatter = new LogbackFormatter(); | ||
|
||
String ctx = "12345"; | ||
MDC.setContextMap(Collections.singletonMap("ctx", ctx)); | ||
|
||
String messageJson = logbackJsonFormatter.format(message); | ||
|
||
logger.info(messageJson); | ||
|
||
ObjectMapper mapper = new ObjectMapper(); | ||
Map<String, Object> map = mapper.readValue(messageJson, Map.class); | ||
|
||
Assert.assertEquals(message, map.get("message")); | ||
Assert.assertEquals("org.jboss.pnc._userlog_.build-log", map.get("logger")); | ||
Assert.assertEquals(ctx, ((Map)map.get("mdc")).get("ctx")); | ||
} | ||
|
||
|
||
} |
Oops, something went wrong.