Skip to content

Commit b26c504

Browse files
committed
RT-44 - adding in masking
1 parent 427bf13 commit b26c504

File tree

3 files changed

+122
-7
lines changed

3 files changed

+122
-7
lines changed

README.md

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ Add it as a maven dependency:
2929
## Usage
3030

3131
Example appender configuration (*.properties file):
32-
```
32+
```properties
3333
log4j.appender.STACKIFY=com.stackify.log.log4j12.StackifyLogAppender
3434
log4j.appender.STACKIFY.apiKey=YOUR_API_KEY
3535
log4j.appender.STACKIFY.application=YOUR_APPLICATION_NAME
@@ -41,7 +41,7 @@ Example appender configuration (*.xml file):
4141
<appender name="STACKIFY" class="com.stackify.log.log4j12.StackifyLogAppender">
4242
<param name="apiKey" value="YOUR_API_KEY"/>
4343
<param name="application" value="YOUR_APPLICATION_NAME"/>
44-
<param name="environment" value="YOUR_ENVIRONMENT"/>
44+
<param name="environment" value="YOUR_ENVIRONMENT"/>
4545
</appender>
4646
```
4747

@@ -52,6 +52,51 @@ Be sure to shutdown Log4j to flush this appender of any errors and shutdown the
5252
org.apache.log4j.LogManager.shutdown();
5353
```
5454

55+
56+
## Masking
57+
58+
The Stackify appender has built-in data masking for credit cards and social security number values.
59+
60+
**Disable Masking:**
61+
62+
Add `<MaskEnabled>false</MaskEnabled>` inside the `<StackifyLog> ... </StackifyLog>` tag.
63+
64+
**Customize Masking:**
65+
66+
The example below has the following customizations:
67+
68+
1. Credit Card value masking is disabled (`<param name="maskCreditCard" value="false"/>`)
69+
2. IP Address masking is enabled (`<param name="maskIP" value="true"/>`).
70+
3. Custom masking to remove vowels using a regex (`<param name="maskCustom" value="[aeiou]"/> `)
71+
72+
```properties
73+
log4j.appender.STACKIFY=com.stackify.log.log4j12.StackifyLogAppender
74+
log4j.appender.STACKIFY.apiKey=YOUR_API_KEY
75+
log4j.appender.STACKIFY.application=YOUR_APPLICATION_NAME
76+
log4j.appender.STACKIFY.environment=YOUR_ENVIRONMENT
77+
78+
log4j.appender.STACKIFY.maskEnabled=true
79+
log4j.appender.STACKIFY.maskCreditCard=false
80+
log4j.appender.STACKIFY.maskSSN=true
81+
log4j.appender.STACKIFY.maskIP=true
82+
log4j.appender.STACKIFY.maskCustom=[aeiou]
83+
```
84+
85+
```xml
86+
<appender name="STACKIFY" class="com.stackify.log.log4j12.StackifyLogAppender">
87+
<param name="apiKey" value="YOUR_API_KEY"/>
88+
<param name="application" value="YOUR_APPLICATION_NAME"/>
89+
<param name="environment" value="YOUR_ENVIRONMENT"/>
90+
91+
<param name="maskEnabled" value="true"/>
92+
<param name="maskCreditCard" value="false"/>
93+
<param name="maskSSN" value="true"/>
94+
<param name="maskIP" value="true"/>
95+
<param name="maskCustom" value="[aeiou]"/>
96+
</appender>
97+
```
98+
99+
55100
## License
56101

57102
Copyright 2014 Stackify, LLC.

pom.xml

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,20 @@
6262
<dependency>
6363
<groupId>com.stackify</groupId>
6464
<artifactId>stackify-api-java</artifactId>
65-
<version>2.1.8</version>
65+
<version>2.1.9-SNAPSHOT</version>
6666
</dependency>
6767

6868
<!-- Runtime dependencies -->
6969

70+
<!-- Provided dependencies -->
71+
72+
<dependency>
73+
<groupId>org.projectlombok</groupId>
74+
<artifactId>lombok</artifactId>
75+
<version>1.16.10</version>
76+
<scope>provided</scope>
77+
</dependency>
78+
7079
<!-- Test dependencies -->
7180

7281
<dependency>
@@ -162,6 +171,10 @@
162171
<goals>
163172
<goal>jar</goal>
164173
</goals>
174+
<configuration>
175+
<failOnError>false</failOnError>
176+
<additionalparam>-Xdoclint:none</additionalparam>
177+
</configuration>
165178
</execution>
166179
</executions>
167180
</plugin>

src/main/java/com/stackify/log/log4j12/StackifyLogAppender.java

Lines changed: 61 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
*/
1616
package com.stackify.log.log4j12;
1717

18+
import com.stackify.api.common.mask.Masker;
19+
import lombok.Getter;
20+
import lombok.Setter;
1821
import org.apache.log4j.spi.LoggingEvent;
1922

2023
import com.stackify.api.common.ApiClients;
@@ -82,7 +85,27 @@ public class StackifyLogAppender extends NonReentrantAppender {
8285
* Generic log appender
8386
*/
8487
private LogAppender<LoggingEvent> logAppender;
85-
88+
89+
@Setter
90+
@Getter
91+
private String maskEnabled;
92+
93+
@Setter
94+
@Getter
95+
private String maskCreditCard;
96+
97+
@Setter
98+
@Getter
99+
private String maskSSN;
100+
101+
@Setter
102+
@Getter
103+
private String maskIP;
104+
105+
@Setter
106+
@Getter
107+
private String maskCustom;
108+
86109
/**
87110
* @return the apiUrl
88111
*/
@@ -145,19 +168,53 @@ public void setEnvironment(String environment) {
145168
@Override
146169
public void activateOptions() {
147170
super.activateOptions();
148-
171+
149172
// build the api config
150173

151174
ApiConfiguration apiConfig = ApiConfigurations.fromPropertiesWithOverrides(apiUrl, apiKey, application, environment);
152-
175+
153176
// get the client project name with version
154177

155178
String clientName = ApiClients.getApiClient(StackifyLogAppender.class, "/stackify-log-log4j12.properties", "stackify-log-log4j12");
156179

157180
// build the log appender
158181

159182
try {
160-
this.logAppender = new LogAppender<LoggingEvent>(clientName, new LoggingEventAdapter(apiConfig.getEnvDetail()));
183+
184+
// setup masker
185+
186+
if (maskEnabled == null) {
187+
maskEnabled = Boolean.TRUE.toString();
188+
}
189+
190+
Masker masker = new Masker();
191+
if (Boolean.parseBoolean(maskEnabled)) {
192+
193+
// set default masks
194+
masker.addMask(Masker.MASK_CREDITCARD);
195+
masker.addMask(Masker.MASK_SSN);
196+
197+
if (maskCreditCard != null && !Boolean.parseBoolean(maskCreditCard)) {
198+
masker.removeMask(Masker.MASK_CREDITCARD);
199+
}
200+
201+
if (maskSSN != null && !Boolean.parseBoolean(maskSSN)) {
202+
masker.removeMask(Masker.MASK_SSN);
203+
}
204+
205+
if (maskIP != null && Boolean.parseBoolean(maskIP)) {
206+
masker.addMask(Masker.MASK_IP);
207+
}
208+
209+
if (maskCustom != null) {
210+
masker.addMask(maskCustom);
211+
}
212+
213+
} else {
214+
masker.clearMasks();
215+
}
216+
217+
this.logAppender = new LogAppender<LoggingEvent>(clientName, new LoggingEventAdapter(apiConfig.getEnvDetail()), masker);
161218
this.logAppender.activate(apiConfig);
162219
} catch (Exception e) {
163220
errorHandler.error("Exception starting the Stackify_LogBackgroundService", e, 0);

0 commit comments

Comments
 (0)