diff --git a/require-ess/src/afterInit.c b/require-ess/src/afterInit.c
index 0bbd4a1459cdaef0aec79aca3421af896bfd3ddd..ffd807dda3b3aad159c9d5af185e03d31cea5e36 100644
--- a/require-ess/src/afterInit.c
+++ b/require-ess/src/afterInit.c
@@ -5,6 +5,7 @@
 #include <epicsExport.h>
 #include <epicsStdio.h>
 #include <errno.h>
+#include <errlog.h>
 #include <initHooks.h>
 #include <iocsh.h>
 #include <stdlib.h>
@@ -49,11 +50,11 @@ static struct cmditem *newItem(char *cmd, int type) {
   static int first_time = 1;
   struct cmditem *item;
   if (!cmd) {
-    fprintf(stderr, "usage: afterInit command, args...\n");
+    errlogPrintf("usage: afterInit command, args...\n");
     return NULL;
   }
   if (interruptAccept) {
-    fprintf(stderr, "afterInit can only be used before iocInit\n");
+    errlogPrintf("afterInit can only be used before iocInit\n");
     return NULL;
   }
   if (first_time) {
@@ -62,7 +63,7 @@ static struct cmditem *newItem(char *cmd, int type) {
   }
   item = malloc(sizeof(struct cmditem));
   if (item == NULL) {
-    perror("afterInit");
+    errlogPrintf("afterInit %s", strerror(errno));
     return NULL;
   }
   item->type = type;
diff --git a/require-ess/src/common.c b/require-ess/src/common.c
index 718809395c7be99618535a34e2a51782b5edaea7..a6228d40667cf6a9c24874f17f864c64f6a1ded3 100644
--- a/require-ess/src/common.c
+++ b/require-ess/src/common.c
@@ -1,6 +1,7 @@
 #include <dbAccess.h>
 #include <errno.h>
 #include <error.h>
+#include <errlog.h>
 #include <limits.h>
 #include <osiFileName.h>
 #include <stdarg.h>
@@ -15,7 +16,7 @@ char *realpathSeparator(const char *location) {
   char *buffer = realpath(location, NULL);
   if (!buffer) {
     debug("require: realpath(%s) failed\n", location);
-    perror("require:");
+    errlogPrintf("require: %s", strerror(errno));
     return NULL;
   }
   size = strnlen(buffer, PATH_MAX);
@@ -41,7 +42,7 @@ int putenvprintf(const char *format, ...) {
   if (!format) return -1;
   va_start(ap, format);
   if (vasprintf(&var, format, ap) < 0) {
-    perror("require putenvprintf");
+    errlogPrintf("require putenvprintf %s", strerror(errno));
     return errno;
   }
   va_end(ap);
@@ -55,7 +56,7 @@ int putenvprintf(const char *format, ...) {
   } else {
     *val++ = 0;
     if (setenv(var, val, 1) != 0) {
-      perror("require putenvprintf: setenv failed");
+      errlogPrintf("require putenvprintf: setenv failed %s", strerror(errno));
       status = errno;
     }
   }
@@ -67,11 +68,10 @@ void pathAdd(const char *varname, const char *dirname) {
   char *old_path = NULL;
 
   if (!varname || !dirname) {
-    fprintf(stderr, "usage: pathAdd \"ENVIRONMENT_VARIABLE\",\"directory\"\n");
-    fprintf(stderr,
-            "       Adds or moves the directory to the front of the "
-            "ENVIRONMENT_VARIABLE\n");
-    fprintf(stderr, "       but after a leading \".\".\n");
+    errlogPrintf("usage: pathAdd \"ENVIRONMENT_VARIABLE\",\"directory\"\n");
+    errlogPrintf("       Adds or moves the directory to the front of the "
+                 "ENVIRONMENT_VARIABLE\n");
+    errlogPrintf("       but after a leading \".\".\n");
     return;
   }
 
diff --git a/require-ess/src/module.c b/require-ess/src/module.c
index 1c7bc22a72e2a1c1204e90a8d3e6715956e26779..129d0795347a8323acd1014a7a7ef1649b466682 100644
--- a/require-ess/src/module.c
+++ b/require-ess/src/module.c
@@ -1,5 +1,6 @@
 #include <dbAccess.h>
 #include <error.h>
+#include <errlog.h>
 #include <limits.h>
 #include <osiFileName.h>
 #include <stdio.h>
@@ -130,7 +131,7 @@ int registerModule(struct linkedList *linkedlist, const char *moduleName, const
                "REQUIRE_IOC=%.30s, MODULE=%.24s, VERSION=%.39s, "
                "MODULE_COUNT=%u, BUFFER_SIZE=%lu",
                getenv("REQUIRE_IOC"), module->name, module->version, linkedlist->size, bufferSize) < 0){
-    fprintf(stderr, "Error asprintf failed\n");
+    errlogPrintf("Error asprintf failed\n");
     return 0;
   }
   printf("Loading module info records for %s\n", module->name);
@@ -140,6 +141,6 @@ int registerModule(struct linkedList *linkedlist, const char *moduleName, const
   return 0;
 
 out_of_memory:
-  fprintf(stderr, "require: out of memory\n");
+  errlogPrintf("require: out of memory\n");
   return -1;
 }
diff --git a/require-ess/src/require.c b/require-ess/src/require.c
index eed0ce0d828b903d135bf7b83ed81cf9918f19d3..2612a228335af65c3cb082dcbf94f5f277076f07 100644
--- a/require-ess/src/require.c
+++ b/require-ess/src/require.c
@@ -20,6 +20,7 @@
 #include <epicsStdio.h>
 #include <epicsVersion.h>
 #include <errno.h>
+#include <errlog.h>
 #include <initHooks.h>
 #include <iocsh.h>
 #include <osiFileName.h>
@@ -82,7 +83,7 @@ int requireDebug;
 #define START_DIR_LOOP while ((errno = 0, direntry = readdir(dir)) != NULL)
 #define END_DIR_LOOP                                              \
   if (!direntry && errno)                                         \
-    fprintf(stderr, "error reading directory %s: %s\n", filename, \
+    errlogPrintf("error reading directory %s: %s\n", filename, \
             strerror(errno));                                     \
   if (dir) closedir(dir);
 #ifdef _DIRENT_HAVE_D_TYPE
@@ -132,12 +133,12 @@ static HMODULE loadlib(const char *libname) {
   HMODULE libhandle = NULL;
 
   if (libname == NULL) {
-    fprintf(stderr, "missing library name\n");
+    errlogPrintf("missing library name\n");
     return NULL;
   }
 
   if ((libhandle = dlopen(libname, RTLD_NOW | RTLD_GLOBAL)) == NULL) {
-    fprintf(stderr, "Loading %s library failed: %s\n", libname, dlerror());
+    errlogPrintf("Loading %s library failed: %s\n", libname, dlerror());
   }
   return libhandle;
 }
@@ -178,21 +179,19 @@ static int getRecordHandle(const char *namepart, short type, DBADDR *paddr) {
           getenv("REQUIRE_IOC"), namepart);
 
   if (dbNameToAddr(recordname, paddr) != 0) {
-    fprintf(stderr, "require:getRecordHandle : record %s not found\n",
+    errlogPrintf("require:getRecordHandle : record %s not found\n",
             recordname);
     return -1;
   }
   if (paddr->field_type != type) {
-    fprintf(
-        stderr,
+    errlogPrintf(
         "require:getRecordHandle : record %s has wrong type %s instead of %s\n",
         recordname, pamapdbfType[paddr->field_type].strvalue,
         pamapdbfType[type].strvalue);
     return -1;
   }
   if (paddr->pfield == NULL) {
-    fprintf(
-        stderr,
+    errlogPrintf(
         "require:getRecordHandle : record %s has not yet allocated memory\n",
         recordname);
     return -1;
@@ -246,7 +245,7 @@ static void fillModuleListRecord(initHookState state) {
     errlogPrintf("require: Error to put Versions\n");
   }
   if (dbPut(&modver, DBF_CHAR, bufferModver, strlen(bufferModver)) != 0){
-    printf("require: Error to put ModuleVersions");
+    errlogPrintf("require: Error to put ModuleVersions\n");
   }
 }
 
@@ -256,12 +255,12 @@ static int registerRequire(){
 
   requireLocation = getenv(E3_REQUIRE_LOCATION);
   if (!requireLocation){
-    printf("require: Failed to get " E3_REQUIRE_LOCATION "\n");
+    errlogPrintf("require: Failed to get " E3_REQUIRE_LOCATION "\n");
     return -1;
   }
   requireVersion = getenv(E3_REQUIRE_VERSION);
   if (!requireVersion){
-    printf("require: Failed to get " E3_REQUIRE_VERSION "\n");
+    errlogPrintf("require: Failed to get " E3_REQUIRE_VERSION "\n");
     return -1;
   }
   registerModule(&loadedModules, "require", requireVersion, requireLocation);
@@ -276,7 +275,7 @@ int libversionShow(const char *outfile) {
   if (outfile) {
     out = fopen(outfile, "w");
     if (out == NULL) {
-      fprintf(stderr, "can't open %s: %s\n", outfile, strerror(errno));
+      errlogPrintf("can't open %s: %s\n", outfile, strerror(errno));
       return -1;
     }
   }
@@ -285,7 +284,7 @@ int libversionShow(const char *outfile) {
             m->version, m->path);
   }
   if (fflush(out) < 0 && outfile) {
-    fprintf(stderr, "can't write to %s: %s\n", outfile, strerror(errno));
+    errlogPrintf("can't write to %s: %s\n", outfile, strerror(errno));
     return -1;
   }
   if (outfile) fclose(out);
@@ -432,7 +431,7 @@ int require(const char *module, const char *version) {
   }
 
   if (interruptAccept) {
-    fprintf(stderr, "Error! Modules can only be loaded before iocIint!\n");
+    errlogPrintf("Error! Modules can only be loaded before iocIint!\n");
     return -1;
   }
 
@@ -450,7 +449,7 @@ int require(const char *module, const char *version) {
   if (interruptAccept) return status;
 
   /* require failed in startup script before iocInit */
-  fprintf(stderr, "Aborting startup script\n");
+  errlogPrintf("Aborting startup script\n");
   epicsExit(1);
   return status;
 }
@@ -677,18 +676,16 @@ static char* fetch_module_version(char *filename, size_t max_file_len,
 
   if (!found) {
     if (someArchFound)
-      fprintf(stderr,
-              "Module %s%s%s not available for %s\n(but maybe for other "
-              "EPICS versions or architectures)\n",
-              module, version ? " version " : "", version ? version : "",
-              targetArch);
+      errlogPrintf("Module %s%s%s not available for %s\n(but maybe for other "
+                   "EPICS versions or architectures)\n",
+                   module, version ? " version " : "", version ? version : "",
+                   targetArch);
     else if (someVersionFound)
-      fprintf(
-          stderr,
+      errlogPrintf(
           "Module %s%s%s not available (but other versions are available)\n",
           module, version ? " version " : "", version ? version : "");
     else
-      fprintf(stderr, "Module %s%s%s not available\n", module,
+      errlogPrintf("Module %s%s%s not available\n", module,
               version ? " version " : "", version ? version : "");
     if (founddir) free(founddir);
     return NULL;
@@ -721,7 +718,7 @@ static const char *compare_module_version(char *filename, const char *module,
      "<dirname>/[dirlen]<module>/<version>/[releasediroffs]/lib/<targetArch>/[libdiroffs]/PREFIX<module>INFIX(EXT)?"
    */
   if (!(TRY_FILE(libdiroffs, PREFIX "%s" INFIX EXT, module))) {
-    printf("Module %s has no library\n", module);
+    errlogPrintf("Module %s has no library\n", module);
     found = version;
   } else {
     printf("Loading library %s\n", filename);
@@ -743,7 +740,7 @@ static const char *compare_module_version(char *filename, const char *module,
     debug("require: compare requested version %s with loaded version %s\n",
           version, found);
     if (compareVersions(found, version, FALSE) == MISMATCH) {
-      fprintf(stderr, "Requested %s version %s not available, found only %s.\n",
+      errlogPrintf("Requested %s version %s not available, found only %s.\n",
               module, version, found);
       return NULL;
     }
@@ -764,7 +761,7 @@ static int load_module_data(char *filename, const char *module,
                         module)) {
     printf("Loading dbd file %s\n", filename);
     if (dbLoadDatabase(filename, NULL, NULL) != 0) {
-      fprintf(stderr, "Error loading %s\n", filename);
+      errlogPrintf("Error loading %s\n", filename);
       return -1;
     }
 
@@ -846,7 +843,7 @@ static int require_priv(const char *module, const char *version) {
       /* filename =
          "<dirname>/[dirlen]<module>/<version>/[releasediroffs]/lib/<targetArch>/[libdiroffs]/module.dep"
        */
-      fprintf(stderr, "Dependency file %s not found\n", filename);
+      errlogPrintf("Dependency file %s not found\n", filename);
     } else {
       /* filename =
        * "<dirname>/[dirlen]<module>/<version>/[releasediroffs]/lib/<targetArch>/[libdiroffs]/module.dep"
@@ -945,7 +942,7 @@ static void requireRegister(void) {
     iocshRegister(&ldDef, ldFunc);
     iocshRegister(&pathAddDef, pathAddFunc);
     if(registerRequire() != 0){
-      printf("require: Could not register require.\n");
+      errlogPrintf("require: Could not register require.\n");
     }
 
     set_require_env();