diff --git a/src/rxjs/console.observer.ts b/src/rxjs/console.observer.ts
new file mode 100644
index 0000000000000000000000000000000000000000..60b29971d984bdc0bb248c4264ac94dad87cf89b
--- /dev/null
+++ b/src/rxjs/console.observer.ts
@@ -0,0 +1,13 @@
+import { Observer } from 'rxjs';
+
+let serial = 0;
+
+// tslint:disable:no-console
+export function consoleObserver<T>(subject = `spy#${++serial}`): Observer<T> {
+  return <Observer<T>>{
+    closed: false,
+    next: value => console.log(subject, 'next:', value),
+    error: err => console.log(subject, 'error:', err),
+    complete: () => console.log(subject, 'completed.'),
+  };
+}
diff --git a/src/rxjs/index.ts b/src/rxjs/index.ts
index 881006d56b9a1dc594f2d5578b45b470ab7250f2..fc98e41b2bdf04a2b5641d77cbcad9b357e75124 100644
--- a/src/rxjs/index.ts
+++ b/src/rxjs/index.ts
@@ -3,3 +3,4 @@ export { safeCombineLatest } from './safe-combine-latest.observable';
 export { safeForkJoin } from './safe-fork-join.observable';
 export { select } from './select.operator';
 export { untilDestroyed } from './until-destroyed.operator';
+export { consoleObserver } from './console.observer';