Skip to content

Commit

Permalink
Merge pull request #173 from splunk/develop
Browse files Browse the repository at this point in the history
Release 1.9
  • Loading branch information
zenmoto committed Apr 20, 2021
2 parents 28b1866 + 513444c commit 120dfee
Show file tree
Hide file tree
Showing 23 changed files with 623 additions and 183 deletions.
33 changes: 33 additions & 0 deletions .github/workflows/release.yml
@@ -0,0 +1,33 @@
on:
release:
types: [published]

name: Create Release

jobs:
build:
name: Create Release
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
- name: build
run: mvn -B package --file pom.xml
- name: Create GitHub Release
uses: softprops/action-gh-release@v1
with:
# body_path: ${{ github.workflow }}-CHANGELOG.txt
files: ./target/*.jar
draft: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Deploy to Artifactory
run: mvn --batch-mode deploy
env:
MAVEN_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }}
75 changes: 75 additions & 0 deletions .github/workflows/test.yml
@@ -0,0 +1,75 @@
name: Java CI with Maven

on:
[push, pull_request]

jobs:
unit-test:
strategy:
matrix:
java-version:
- 1.8
- 11
os:
- ubuntu-latest
- windows-latest
- macos-latest
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v2
- name: Set up JDK
uses: actions/setup-java@v1
with:
java-version: ${{ matrix.java-version }}
- name: Cache local Maven repository
uses: actions/cache@v2
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- name: Unit Test
run: mvn -P Unittest -B verify --file pom.xml

acceptance-test:
needs: unit-test
strategy:
matrix:
splunk-version:
- 8.1
- 7.3
runs-on: ubuntu-latest
container: maven:3-jdk-8

services:
splunk:
image: splunk/splunk:${{matrix.splunk-version}}
env:
SPLUNK_START_ARGS: --accept-license
SPLUNK_PASSWORD: test_password
ports:
- 8089
- 8088
- 5555
- 15000
- 10667
- 10668/udp

steps:
- uses: actions/checkout@v2
- name: Set up JDK
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Cache local Maven repository
uses: actions/cache@v2
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- name: Acceptance Test
run: mvn -P AcceptanceTest -B verify --file pom.xml
env:
SPLUNK_PASSWORD: test_password
SPLUNK_HOST: splunk
2 changes: 1 addition & 1 deletion README.md
@@ -1,6 +1,6 @@
# Splunk Logging for Java

#### Version 1.8.0
#### Version 1.9.0

Splunk logging for Java enables you to log events to HTTP Event Collector or to a TCP input on a Splunk Enterprise instance within your Java applications. You can use three major Java logging frameworks: [Logback](http://logback.qos.ch), [Log4j 2](http://logging.apache.org/log4j/2.x/), and [java.util.logging](https://docs.oracle.com/javase/7/docs/api/java/util/logging/package-summary.html). Splunk logging for Java is also enabled for [Simple Logging Facade for Java (SLF4J)](http://www.slf4j.org).

Expand Down
17 changes: 12 additions & 5 deletions pom.xml
Expand Up @@ -6,7 +6,7 @@

<groupId>com.splunk.logging</groupId>
<artifactId>splunk-library-javalogging</artifactId>
<version>1.8.0</version>
<version>1.9.0</version>
<packaging>jar</packaging>

<name>Splunk Logging for Java</name>
Expand Down Expand Up @@ -162,15 +162,22 @@
<repository>
<id>splunk-artifactory</id>
<name>Splunk Releases</name>
<url>https://splunk.artifactoryonline.com/artifactory/ext-releases-local</url>
<url>https://splunk.jfrog.io/splunk/ext-releases-local</url>
</repository>
</repositories>
<distributionManagement>
<repository>
<id>splunk-artifactory</id>
<name>Splunk Releases</name>
<url>https://splunk.jfrog.io/splunk/ext-releases-local</url>
</repository>
</distributionManagement>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
<dependency>
Expand Down Expand Up @@ -208,14 +215,14 @@
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<scope>provided</scope>
<version>2.12.1</version>
<version>2.14.1</version>
</dependency>

<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<scope>provided</scope>
<version>2.12.1</version>
<version>2.14.1</version>
</dependency>

<dependency>
Expand Down
10 changes: 10 additions & 0 deletions src/main/java/com/splunk/logging/EventBodySerializer.java
Expand Up @@ -5,11 +5,21 @@
* Define the interface to allow users to define their own event body serializer for HTTP event adapter:
* Simply create a class implementing this interface, and add the full class name as a property (`eventBodySerializer`) to the adapter.
*
* @see com.splunk.logging.serialization.PlainTextEventBodySerializer
*
*/
public interface EventBodySerializer {

String serializeEventBody(
HttpEventCollectorEventInfo eventInfo,
Object formattedMessage
);

/**
* Timestamp to be sent with custom message.
* @return 0 if do not want to send timestamp with message, otherwise number of seconds, between the current time and midnight, January 1, 1970 UTC.
*/
default double getEventTime(HttpEventCollectorEventInfo eventInfo) {
return 0;
}
}
17 changes: 17 additions & 0 deletions src/main/java/com/splunk/logging/EventHeaderSerializer.java
@@ -0,0 +1,17 @@
package com.splunk.logging;

import java.util.Map;

/**
*
* Define the interface to allow users to define their own event header serializer for HTTP event adapter:
* Simply create a class implementing this interface, and add the full class name as a property (`eventHeaderSerializer`) to the adapter.
*
*/
public interface EventHeaderSerializer {

Map<String, Object> serializeEventHeader(
final HttpEventCollectorEventInfo eventInfo,
final Map<String, Object> metadata
);
}
Expand Up @@ -49,31 +49,33 @@ public final class HttpEventCollectorLog4jAppender extends AbstractAppender
private final boolean includeMarker;

private HttpEventCollectorLog4jAppender(final String name,
final String url,
final String token,
final String channel,
final String type,
final String source,
final String sourcetype,
final String messageFormat,
final String host,
final String index,
final Filter filter,
final Layout<? extends Serializable> layout,
final boolean includeLoggerName,
final boolean includeThreadName,
final boolean includeMDC,
final boolean includeException,
final boolean includeMarker,
final boolean ignoreExceptions,
long batchInterval,
long batchCount,
long batchSize,
long retriesOnError,
String sendMode,
String middleware,
final String disableCertificateValidation,
final String eventBodySerializer)
final String url,
final String token,
final String channel,
final String type,
final String source,
final String sourcetype,
final String messageFormat,
final String host,
final String index,
final Filter filter,
final Layout<? extends Serializable> layout,
final boolean includeLoggerName,
final boolean includeThreadName,
final boolean includeMDC,
final boolean includeException,
final boolean includeMarker,
final boolean ignoreExceptions,
long batchInterval,
long batchCount,
long batchSize,
long retriesOnError,
String sendMode,
String middleware,
final String disableCertificateValidation,
final String eventBodySerializer,
final String eventHeaderSerializer,
HttpEventCollectorSender.TimeoutSettings timeoutSettings)
{
super(name, filter, layout, ignoreExceptions, Property.EMPTY_ARRAY);
Map<String, String> metadata = new HashMap<>();
Expand All @@ -83,7 +85,7 @@ private HttpEventCollectorLog4jAppender(final String name,
metadata.put(MetadataTags.SOURCETYPE, sourcetype != null ? sourcetype : "");
metadata.put(MetadataTags.MESSAGEFORMAT, messageFormat != null ? messageFormat : "");

this.sender = new HttpEventCollectorSender(url, token, channel, type, batchInterval, batchCount, batchSize, sendMode, metadata);
this.sender = new HttpEventCollectorSender(url, token, channel, type, batchInterval, batchCount, batchSize, sendMode, metadata, timeoutSettings);

// plug a user middleware
if (middleware != null && !middleware.isEmpty()) {
Expand All @@ -98,6 +100,12 @@ private HttpEventCollectorLog4jAppender(final String name,
} catch (final Exception ignored) {}
}

if (eventHeaderSerializer != null && !eventHeaderSerializer.isEmpty()) {
try {
this.sender.setEventHeaderSerializer((EventHeaderSerializer) Class.forName(eventHeaderSerializer).newInstance());
} catch (final Exception ignored) {}
}

// plug resend middleware
if (retriesOnError > 0) {
this.sender.addMiddleware(new HttpEventCollectorResendMiddleware(retriesOnError));
Expand Down Expand Up @@ -140,11 +148,16 @@ public static HttpEventCollectorLog4jAppender createAppender(
@PluginAttribute("middleware") final String middleware,
@PluginAttribute("disableCertificateValidation") final String disableCertificateValidation,
@PluginAttribute("eventBodySerializer") final String eventBodySerializer,
@PluginAttribute("eventHeaderSerializer") final String eventHeaderSerializer,
@PluginAttribute(value = "includeLoggerName", defaultBoolean = true) final boolean includeLoggerName,
@PluginAttribute(value = "includeThreadName", defaultBoolean = true) final boolean includeThreadName,
@PluginAttribute(value = "includeMDC", defaultBoolean = true) final boolean includeMDC,
@PluginAttribute(value = "includeException", defaultBoolean = true) final boolean includeException,
@PluginAttribute(value = "includeMarker", defaultBoolean = true) final boolean includeMarker,
@PluginAttribute(value = "connect_timeout", defaultLong = HttpEventCollectorSender.TimeoutSettings.DEFAULT_CONNECT_TIMEOUT) final long connectTimeout,
@PluginAttribute(value = "call_timeout", defaultLong = HttpEventCollectorSender.TimeoutSettings.DEFAULT_CALL_TIMEOUT) final long callTimeout,
@PluginAttribute(value = "read_timeout", defaultLong = HttpEventCollectorSender.TimeoutSettings.DEFAULT_READ_TIMEOUT) final long readTimeout,
@PluginAttribute(value = "write_timeout", defaultLong = HttpEventCollectorSender.TimeoutSettings.DEFAULT_WRITE_TIMEOUT) final long writeTimeout,
@PluginElement("Layout") Layout<? extends Serializable> layout,
@PluginElement("Filter") final Filter filter
)
Expand Down Expand Up @@ -182,7 +195,7 @@ public static HttpEventCollectorLog4jAppender createAppender(
return new HttpEventCollectorLog4jAppender(
name, url, token, channel, type,
source, sourcetype, messageFormat, host, index,
filter, layout,
filter, layout,
includeLoggerName, includeThreadName, includeMDC, includeException, includeMarker,
ignoreExceptionsBool,
parseInt(batchInterval, HttpEventCollectorSender.DefaultBatchInterval),
Expand All @@ -192,7 +205,9 @@ public static HttpEventCollectorLog4jAppender createAppender(
sendMode,
middleware,
disableCertificateValidation,
eventBodySerializer
eventBodySerializer,
eventHeaderSerializer,
new HttpEventCollectorSender.TimeoutSettings(connectTimeout, callTimeout, readTimeout, writeTimeout)
);
}

Expand Down

0 comments on commit 120dfee

Please sign in to comment.