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 {
 }