You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by sh...@apache.org on 2019/05/10 23:31:28 UTC
[logging-log4j-audit] 02/02: LOG4J2-2579: add a @EventName to the
generated Java event interfaces and use it, if available,
to generate the event name
This is an automated email from the ASF dual-hosted git repository.
shadow pushed a commit to branch LOG4J2-2579
in repository https://gitbox.apache.org/repos/asf/logging-log4j-audit.git
commit 8fcfbb5f0c9b59b447a3741c0f556cc5cabc2307
Author: Andrei Ivanov <an...@gmail.com>
AuthorDate: Sat May 11 02:30:02 2019 +0300
LOG4J2-2579: add a @EventName to the generated Java event interfaces and use it, if available, to generate the event name
---
.../apache/logging/log4j/audit/LogEventFactory.java | 18 +++++++++---------
.../logging/log4j/audit/annotation/EventName.java | 15 +++++++++++++++
.../logging/log4j/audit/annotation/MaxLength.java | 2 +-
.../log4j/audit/generator/InterfacesGenerator.java | 3 +++
.../log4j/audit/{LoginTest.java => LogoutTest.java} | 14 +++++++-------
.../org/apache/logging/log4j/audit/TransferTest.java | 1 +
.../log4j/audit/event/{Login.java => Logout.java} | 4 +++-
7 files changed, 39 insertions(+), 18 deletions(-)
diff --git a/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/LogEventFactory.java b/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/LogEventFactory.java
index ad1e874..f67ed58 100644
--- a/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/LogEventFactory.java
+++ b/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/LogEventFactory.java
@@ -28,12 +28,7 @@ import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.ThreadContext;
-import org.apache.logging.log4j.audit.annotation.Constraint;
-import org.apache.logging.log4j.audit.annotation.Constraints;
-import org.apache.logging.log4j.audit.annotation.MaxLength;
-import org.apache.logging.log4j.audit.annotation.RequestContext;
-import org.apache.logging.log4j.audit.annotation.RequestContextConstraints;
-import org.apache.logging.log4j.audit.annotation.Required;
+import org.apache.logging.log4j.audit.annotation.*;
import org.apache.logging.log4j.audit.exception.AuditException;
import org.apache.logging.log4j.audit.util.NamingUtils;
import org.apache.logging.log4j.audit.exception.ConstraintValidationException;
@@ -93,18 +88,23 @@ public class LogEventFactory {
return (T) audit;
}
+ private static String getEventName(Class<?> intrface) {
+ EventName eventName = intrface.getAnnotation(EventName.class);
+ return eventName != null ? eventName.value() : NamingUtils.lowerFirst(intrface.getSimpleName());
+ }
+
private static <T> int getMaxLength(Class<T> intrface) {
MaxLength maxLength = intrface.getAnnotation(MaxLength.class);
return maxLength == null ? DEFAULT_MAX_LENGTH : maxLength.value();
}
private static AuditMessage buildAuditMessage(Class<?> intrface) {
- String eventId = NamingUtils.lowerFirst(intrface.getSimpleName());
+ String eventName = getEventName(intrface);
int msgLength = getMaxLength(intrface);
- return new AuditMessage(eventId, msgLength);
+ return new AuditMessage(eventName, msgLength);
}
- /**
+ /**
*
* This method is used to construct and AuditMessage from a set of properties and the Event interface
* that represents the event being audited using the default error handler.
diff --git a/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/annotation/EventName.java b/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/annotation/EventName.java
new file mode 100644
index 0000000..dbfcb84
--- /dev/null
+++ b/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/annotation/EventName.java
@@ -0,0 +1,15 @@
+package org.apache.logging.log4j.audit.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Allows overriding the default naming algorithm.
+ */
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface EventName {
+ String value();
+}
\ No newline at end of file
diff --git a/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/annotation/MaxLength.java b/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/annotation/MaxLength.java
index fdf1b53..078997f 100644
--- a/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/annotation/MaxLength.java
+++ b/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/annotation/MaxLength.java
@@ -22,7 +22,7 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
- * Recoreds the maximum length of dynamic attribute names.
+ * Records the maximum length of dynamic attribute names.
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
diff --git a/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/generator/InterfacesGenerator.java b/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/generator/InterfacesGenerator.java
index 8a4ab09..78aba9b 100644
--- a/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/generator/InterfacesGenerator.java
+++ b/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/generator/InterfacesGenerator.java
@@ -51,6 +51,7 @@ public class InterfacesGenerator {
private static final String REQUEST_CONTEXT_IMPORT = "org.apache.logging.log4j.audit.annotation.RequestContext";
private static final String PARENT_IMPORT = "org.apache.logging.log4j.audit.AuditEvent";
+ private static final String EVENT_NAME_IMPORT = "org.apache.logging.log4j.audit.annotation.EventName";
private static final String MAX_LENGTH_IMPORT = "org.apache.logging.log4j.audit.annotation.MaxLength";
private static final String REQCTX_ANN = "@RequestContext(";
@@ -158,6 +159,8 @@ public class InterfacesGenerator {
Set<String> imports = classGenerator.getImports();
imports.add(PARENT_IMPORT);
StringBuilder annotations = new StringBuilder();
+ imports.add(EVENT_NAME_IMPORT);
+ annotations.append("@EventName(\"").append(event.getName()).append("\")\n");
imports.add(MAX_LENGTH_IMPORT);
annotations.append("@MaxLength(").append(maxKeyLength).append(")");
diff --git a/log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/LoginTest.java b/log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/LogoutTest.java
similarity index 82%
rename from log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/LoginTest.java
rename to log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/LogoutTest.java
index 7b7e8a9..34a76ef 100644
--- a/log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/LoginTest.java
+++ b/log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/LogoutTest.java
@@ -16,7 +16,7 @@
*/
package org.apache.logging.log4j.audit;
-import org.apache.logging.log4j.audit.event.Login;
+import org.apache.logging.log4j.audit.event.Logout;
import org.junit.Test;
import java.util.Collections;
@@ -24,19 +24,19 @@ import java.util.List;
import static org.junit.Assert.*;
-public class LoginTest extends BaseEventTest {
+public class LogoutTest extends BaseEventTest {
@Test
public void testAuditClassToString() {
- Login event = LogEventFactory.getEvent(Login.class);
+ Logout event = LogEventFactory.getEvent(Logout.class);
event.setCompletionStatus("Success");
String string = event.toString();
- assertEquals("[login completionStatus=\"Success\"]", string);
+ assertEquals("[Logout completionStatus=\"Success\"]", string);
}
@Test
public void testAuditClass() {
- Login event = LogEventFactory.getEvent(Login.class);
+ Logout event = LogEventFactory.getEvent(Logout.class);
event.logEvent();
@@ -64,8 +64,8 @@ public class LoginTest extends BaseEventTest {
@Test
public void testAuditLog() {
- LogEventFactory.logEvent(Login.class, null);
+ LogEventFactory.logEvent(Logout.class, null);
- LogEventFactory.logEvent(Login.class, Collections.emptyMap());
+ LogEventFactory.logEvent(Logout.class, Collections.emptyMap());
}
}
\ No newline at end of file
diff --git a/log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/TransferTest.java b/log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/TransferTest.java
index c4b2076..e4a1a04 100644
--- a/log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/TransferTest.java
+++ b/log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/TransferTest.java
@@ -146,6 +146,7 @@ public class TransferTest extends BaseEventTest {
assertNotNull("No messages", msgs);
assertEquals("No messages", 2, msgs.size());
String msg = msgs.get(0);
+ assertTrue("No event name", msg.contains("[transfer"));
assertTrue("No companyId", msg.contains("companyId=\"12345\""));
assertTrue("No ipAddress", msg.contains("ipAddress=\"127.0.0.1\""));
assertTrue("No toAccount", msg.contains("toAccount=\"123456\""));
diff --git a/log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/event/Login.java b/log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/event/Logout.java
similarity index 87%
rename from log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/event/Login.java
rename to log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/event/Logout.java
index d504300..dcb68cc 100644
--- a/log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/event/Login.java
+++ b/log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/event/Logout.java
@@ -17,6 +17,8 @@
package org.apache.logging.log4j.audit.event;
import org.apache.logging.log4j.audit.AuditEvent;
+import org.apache.logging.log4j.audit.annotation.EventName;
-public interface Login extends AuditEvent {
+@EventName("Logout")
+public interface Logout extends AuditEvent {
}