diff --git a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/Log4jSharedRefLogger.java b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/Log4jSharedRefLogger.java
index 691d8b1..f4acb91 100644
--- a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/Log4jSharedRefLogger.java
+++ b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/Log4jSharedRefLogger.java
@@ -16,6 +16,7 @@
 
 import static org.eclipse.jgit.lib.Constants.OBJ_BLOB;
 import static org.eclipse.jgit.lib.Constants.OBJ_COMMIT;
+import static org.eclipse.jgit.lib.Constants.OBJ_TAG;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.flogger.FluentLogger;
@@ -38,6 +39,7 @@
 import org.eclipse.jgit.lib.Ref;
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.revwalk.RevCommit;
+import org.eclipse.jgit.revwalk.RevTag;
 import org.eclipse.jgit.revwalk.RevWalk;
 
 /**
@@ -72,9 +74,9 @@
   /**
    * {@inheritDoc}.
    *
-   * <p>Only logs commits and blob refs (throws {@link IncorrectObjectTypeException} for any other
-   * unexpected type). Additionally, it hydrates commits with information about the committer and
-   * commit message.
+   * <p>Only logs commits, annotated tags and blob refs (throws {@link IncorrectObjectTypeException}
+   * for any other unexpected type). Additionally, it hydrates commits and annotated tags with
+   * information about the committer and commit message.
    *
    * <p>Logs Json serialization of {@link SharedRefLogEntry.UpdateRef}
    */
@@ -88,6 +90,11 @@
         if (newRefValue != null) {
           int objectType = walk.parseAny(newRefValue).getType();
           switch (objectType) {
+            case OBJ_TAG:
+              RevTag revTag = walk.parseTag(newRefValue);
+              committer = CommonConverters.toGitPerson(revTag.getTaggerIdent());
+              commitMessage = revTag.getShortMessage();
+              break;
             case OBJ_COMMIT:
               RevCommit commit = walk.parseCommit(newRefValue);
               committer = CommonConverters.toGitPerson(commit.getCommitterIdent());
diff --git a/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/Log4jSharedRefLoggerTest.java b/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/Log4jSharedRefLoggerTest.java
index 5b9a9dd..3a7cba9 100644
--- a/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/Log4jSharedRefLoggerTest.java
+++ b/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/Log4jSharedRefLoggerTest.java
@@ -15,6 +15,7 @@
 package com.gerritforge.gerrit.globalrefdb.validation;
 
 import static com.google.common.truth.Truth.assertThat;
+import static com.google.gerrit.server.update.context.RefUpdateContext.RefUpdateType.TAG_MODIFICATION;
 
 import com.google.gerrit.acceptance.AbstractDaemonTest;
 import com.google.gerrit.acceptance.PushOneCommit;
@@ -22,6 +23,7 @@
 import com.google.gerrit.json.OutputFormat;
 import com.google.gerrit.server.Sequence;
 import com.google.gerrit.server.config.SitePaths;
+import com.google.gerrit.server.update.context.RefUpdateContext;
 import com.google.gerrit.server.util.SystemLog;
 import com.google.gson.Gson;
 import java.io.IOException;
@@ -32,9 +34,14 @@
 import org.apache.log4j.Logger;
 import org.apache.log4j.PatternLayout;
 import org.apache.log4j.WriterAppender;
+import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.ObjectId;
+import org.eclipse.jgit.lib.ObjectInserter;
+import org.eclipse.jgit.lib.PersonIdent;
 import org.eclipse.jgit.lib.Ref;
+import org.eclipse.jgit.lib.RefUpdate;
 import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.lib.TagBuilder;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -143,6 +150,45 @@
     assertThat(gotLogEntry.refName).isEqualTo(refName);
   }
 
+  @Test
+  public void shouldLogAnnotatedTagRef() throws Exception {
+    final String tagRefName = "refs/tags/v1.0";
+    final String refName = "refs/remotes/origin/master";
+    PushOneCommit.Result result = pushTo(refName);
+    ObjectId commitId = result.getCommit().toObjectId();
+    PersonIdent taggerIdent = new PersonIdent("Tagger123", "tagger@test.com");
+    String message = "Release v1.0";
+    ObjectId tagId;
+    try (Repository repository = repoManager.openRepository(project);
+        ObjectInserter inserter = repository.newObjectInserter();
+        RefUpdateContext ctx = RefUpdateContext.open(TAG_MODIFICATION)) {
+      TagBuilder tag = new TagBuilder();
+      tag.setTag("v1.0");
+      tag.setMessage(message);
+      tag.setTagger(taggerIdent);
+      tag.setObjectId(commitId, Constants.OBJ_COMMIT);
+      tagId = inserter.insert(tag);
+      inserter.flush();
+
+      RefUpdate ru = repository.updateRef(tagRefName);
+      ru.setNewObjectId(tagId);
+      ru.update();
+
+      Ref tagRef = repository.exactRef(tagRefName);
+      log4jSharedRefLogger.logRefUpdate(project.get(), tagRef, tagId);
+    }
+
+    SharedRefLogEntry.UpdateRef gotLogEntry =
+        gson.fromJson(logWriter.toString(), SharedRefLogEntry.UpdateRef.class);
+
+    assertThat(gotLogEntry.type).isEqualTo(SharedRefLogEntry.Type.UPDATE_REF);
+    assertThat(gotLogEntry.projectName).isEqualTo(project.get());
+    assertThat(gotLogEntry.refName).isEqualTo(tagRefName);
+    assertThat(gotLogEntry.newId).isEqualTo(tagId.getName());
+    assertThat(gotLogEntry.comment).isEqualTo(message);
+    assertThat(gotLogEntry.committer.name).isEqualTo(taggerIdent.getName());
+  }
+
   private Log4jSharedRefLogger newLog4jSharedRefLogger() throws IOException {
     final Log4jSharedRefLogger log4jSharedRefLogger =
         new Log4jSharedRefLogger(new SystemLog(new SitePaths(newPath()), baseConfig), repoManager);
