diff --git a/src/sbbs3/chat.cpp b/src/sbbs3/chat.cpp
index ed8a1e55392b359281821e75303da385d28d75f2..5a1ab8ab39edd8567f5ab5bdd9737cef472fee48 100644
--- a/src/sbbs3/chat.cpp
+++ b/src/sbbs3/chat.cpp
@@ -1085,8 +1085,16 @@ void sbbs_t::privchat(bool forced, int node_num)
 				lseek(in,0L,SEEK_SET);
 			ch=0;
 			utime(inpath,NULL);
-			if(read(in,&ch,1) != 1)
+			int rd = read(in,&ch,1);
+			if(rd != 1) {
+				lprintf(LOG_ERR, "read character from %s returned %d instead of 1", inpath, rd);
 				ch = 0;
+			} else {
+				if(ch < ' ')
+					lprintf(LOG_DEBUG, "read control character %u (%s) from %s", ch, c_escape_char(ch), inpath);
+				else
+					lprintf(LOG_DEBUG, "read character '%c' from %s", ch, inpath);
+			}
 			(void)lseek(in,-1L,SEEK_CUR);
 			if(!ch) break;					  /* char from other node */
 			activity=1;
@@ -1156,7 +1164,13 @@ void sbbs_t::privchat(bool forced, int node_num)
 				} 
 			}
 			ch=0;
-			write(in,&ch,1);
+			int wr = write(in,&ch,1);
+			if(wr != 1)
+				lprintf(LOG_ERR, "write of character 0x%02X to %s returned %d", ch, inpath, wr);
+			else if(ch < ' ')
+				lprintf(LOG_DEBUG, "wrote control character %u (%s) to %s", ch, c_escape_char(ch), inpath);
+			else
+				lprintf(LOG_DEBUG, "wrote character '%c' to %s", ch, inpath);
 
 			if(!(sys_status&SS_SPLITP))
 				localchar=remotechar;