diff --git a/docs/logging.md b/docs/logging.md
index 7ddeef3..a627fb4 100644
--- a/docs/logging.md
+++ b/docs/logging.md
@@ -24,6 +24,7 @@ The section name should be the name of your logger. This is the name you should
 |---|---|---|---|
 |type|the type of logger to create. Choose one of the five in the list above.|yes| |
 |depend|lists (comma-separated, no spaces) the names of the monitors this logger depends on. Use this if the database file lives over the network. If a monitor it depends on fails, no attempt will be made to update the database.| no | |
+|groups|comma-separated list of monitor groups this logger should operate for|no|"default"|
 
 ### <a name="db"></a><a name="dbstatus"></a>db and dbstatus loggers
 
diff --git a/simplemonitor/Loggers/logger.py b/simplemonitor/Loggers/logger.py
index 2de2024..5299388 100644
--- a/simplemonitor/Loggers/logger.py
+++ b/simplemonitor/Loggers/logger.py
@@ -24,6 +24,10 @@ class Logger:
             List[str],
             self.get_config_option("depend", required_type="[str]", default=[]),
         )
+        # only log for Monitors with one of these groups
+        self._groups = self.get_config_option(
+            "groups", required_type="[str]", default=["default"]
+        )
         if self.batch_data is None:
             self.batch_data = {}
         self._global_info = None  # type: Optional[dict]
diff --git a/simplemonitor/simplemonitor.py b/simplemonitor/simplemonitor.py
index fbdb3dd..c27d92e 100644
--- a/simplemonitor/simplemonitor.py
+++ b/simplemonitor/simplemonitor.py
@@ -181,7 +181,15 @@ class SimpleMonitor:
         logger.check_dependencies(self.failed + self.still_failing + self.skipped)
         logger.start_batch()
         for key in list(self.monitors.keys()):
-            logger.save_result2(key, self.monitors[key])
+            if self.monitors[key].group in logger._groups:
+                logger.save_result2(key, self.monitors[key])
+            else:
+                module_logger.debug(
+                    "not logging for %s due to group mismatch (monitor in group %s, logger has groups %s",
+                    key,
+                    self.monitors[key].group,
+                    logger._groups,
+                )
         try:
             for key in list(self.remote_monitors.keys()):
                 logger.save_result2(key, self.remote_monitors[key])
@@ -201,13 +209,6 @@ class SimpleMonitor:
                     "skipping alert for monitor %s as it wants remote alerting", key
                 )
                 continue
-            module_logger.debug(
-                "considering alert for monitor %s (group: %s) with alerter %s (groups: %s)",
-                this_monitor.name,
-                this_monitor.group,
-                alerter.name,
-                alerter.groups,
-            )
             try:
                 if this_monitor.group in alerter.groups:
                     # Only notifications for services that have it enabled
@@ -220,7 +221,10 @@ class SimpleMonitor:
                         )
                 else:
                     module_logger.info(
-                        "skipping alerter %s as monitor is not in group", alerter.name
+                        "skipping alerter %s as monitor %s is not in group %s",
+                        alerter.name,
+                        this_monitor.name,
+                        alerter.groups,
                     )
             except Exception:  # pragma: no cover
                 module_logger.exception("exception caught while alerting for %s", key)

Add group support to loggers
As discussed in #78 it would be nice to have the recently-added group feature work for loggers as well as alerters. 
diff --git a/tests/test_logger.py b/tests/test_logger.py
index 9d5d928..eafa56d 100644
--- a/tests/test_logger.py
+++ b/tests/test_logger.py
@@ -1,7 +1,10 @@
 # type: ignore
 import unittest
+from unittest.mock import patch
 
 from simplemonitor.Loggers import logger
+from simplemonitor.Monitors.monitor import MonitorNull
+from simplemonitor.simplemonitor import SimpleMonitor
 
 
 class TestLogger(unittest.TestCase):
@@ -39,3 +42,18 @@ class TestLogger(unittest.TestCase):
         self.assertEqual(
             test_logger.connected, False, "logger thought it was connected"
         )
+
+    def test_groups(self):
+        with patch.object(logger.Logger, "save_result2") as mock_method:
+            this_logger = logger.Logger({"groups": "nondefault"})
+            s = SimpleMonitor()
+            s.add_monitor("test", MonitorNull())
+            s.log_result(this_logger)
+        mock_method.assert_not_called()
+
+        with patch.object(logger.Logger, "save_result2") as mock_method:
+            this_logger = logger.Logger({"groups": "nondefault"})
+            s = SimpleMonitor()
+            s.add_monitor("test", MonitorNull("unnamed", {"group": "nondefault"}))
+            s.log_result(this_logger)
+        mock_method.assert_called_once()

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest flake8 mypy bandit
apt-get update apt-get install -y gcc
3.9
requirements/base.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
bandit==1.8.3
boto3==1.37.23
botocore==1.37.23
certifi==2025.1.31
cffi==1.17.1
charset-normalizer==3.4.1
colorlog==6.9.0
cryptography==44.0.2
exceptiongroup==1.2.2
flake8==7.2.0
idna==3.10
iniconfig==2.1.0
jmespath==1.0.1
markdown-it-py==3.0.0
mccabe==0.7.0
mdurl==0.1.2
mypy==1.15.0
mypy-extensions==1.0.0
packaging==24.2
paho-mqtt==2.1.0
pbr==6.1.1
pluggy==1.5.0
psutil==7.0.0
pycodestyle==2.13.0
pycparser==2.22
pyflakes==3.3.2
Pygments==2.19.1
pyOpenSSL==25.0.0
pytest==8.3.5
python-dateutil==2.9.0.post0
PyYAML==6.0.2
requests==2.32.3
rich==14.0.0
s3transfer==0.11.4
-e git+https://github.com/jamesoff/simplemonitor.git@af57a6bebe388fa362417a0f4f28f084c9e0b99a#egg=simplemonitor
six==1.17.0
stevedore==5.4.1
tomli==2.2.1
typing_extensions==4.13.0
urllib3==1.26.20

name: simplemonitor
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - bandit==1.8.3
      - boto3==1.37.23
      - botocore==1.37.23
      - certifi==2025.1.31
      - cffi==1.17.1
      - charset-normalizer==3.4.1
      - colorlog==6.9.0
      - cryptography==44.0.2
      - exceptiongroup==1.2.2
      - flake8==7.2.0
      - idna==3.10
      - iniconfig==2.1.0
      - jmespath==1.0.1
      - markdown-it-py==3.0.0
      - mccabe==0.7.0
      - mdurl==0.1.2
      - mypy==1.15.0
      - mypy-extensions==1.0.0
      - packaging==24.2
      - paho-mqtt==2.1.0
      - pbr==6.1.1
      - pluggy==1.5.0
      - psutil==7.0.0
      - pycodestyle==2.13.0
      - pycparser==2.22
      - pyflakes==3.3.2
      - pygments==2.19.1
      - pyopenssl==25.0.0
      - pytest==8.3.5
      - python-dateutil==2.9.0.post0
      - pyyaml==6.0.2
      - requests==2.32.3
      - rich==14.0.0
      - s3transfer==0.11.4
      - six==1.17.0
      - stevedore==5.4.1
      - tomli==2.2.1
      - typing-extensions==4.13.0
      - urllib3==1.26.20
prefix: /opt/conda/envs/simplemonitor

tests/test_logger.py::TestLogger::test_groups
tests/test_logger.py::TestLogger::test_default tests/test_logger.py::TestLogger::test_dependencies
simplemonitor/Loggers/logger.py docs/logging.md simplemonitor/simplemonitor.py
simplemonitor/Loggers/logger.py docs/logging.md simplemonitor/simplemonitor.py