diff --git a/src/Microsoft.Extensions.Logging.Console/Internal/ConsoleLoggerProcessor.cs b/src/Microsoft.Extensions.Logging.Console/Internal/ConsoleLoggerProcessor.cs
index b6b676e3..43efe5cb 100644
--- a/src/Microsoft.Extensions.Logging.Console/Internal/ConsoleLoggerProcessor.cs
+++ b/src/Microsoft.Extensions.Logging.Console/Internal/ConsoleLoggerProcessor.cs
@@ -27,7 +27,18 @@ public ConsoleLoggerProcessor()
 
         public virtual void EnqueueMessage(LogMessageEntry message)
         {
-            _messageQueue.Add(message);
+            if (!_messageQueue.IsAddingCompleted)
+            {
+                try
+                {
+                    _messageQueue.Add(message);
+                    return;
+                }
+                catch (InvalidOperationException) { }
+            }
+
+            // Adding is completed so just log the message
+            WriteMessage(message);
         }
 
         // for testing
diff --git a/test/Microsoft.Extensions.Logging.Test/ConsoleLoggerTest.cs b/test/Microsoft.Extensions.Logging.Test/ConsoleLoggerTest.cs
index bfe02d1d..44de8333 100644
--- a/test/Microsoft.Extensions.Logging.Test/ConsoleLoggerTest.cs
+++ b/test/Microsoft.Extensions.Logging.Test/ConsoleLoggerTest.cs
@@ -769,12 +769,12 @@ public void WriteCore_NullMessageWithException()
             var expected = ex.ToString() + Environment.NewLine;
 
             // Act
-            logger.Log(LogLevel.Critical, 0, message, ex, (s,e) => s);
-            logger.Log(LogLevel.Error, 0, message, ex, (s,e) => s);
-            logger.Log(LogLevel.Warning, 0, message, ex, (s,e) => s);
-            logger.Log(LogLevel.Information, 0, message, ex, (s,e) => s);
-            logger.Log(LogLevel.Debug, 0, message, ex, (s,e) => s);
-            logger.Log(LogLevel.Trace, 0, message, ex, (s,e) => s);
+            logger.Log(LogLevel.Critical, 0, message, ex, (s, e) => s);
+            logger.Log(LogLevel.Error, 0, message, ex, (s, e) => s);
+            logger.Log(LogLevel.Warning, 0, message, ex, (s, e) => s);
+            logger.Log(LogLevel.Information, 0, message, ex, (s, e) => s);
+            logger.Log(LogLevel.Debug, 0, message, ex, (s, e) => s);
+            logger.Log(LogLevel.Trace, 0, message, ex, (s, e) => s);
 
             // Assert
             Assert.Equal(6, sink.Writes.Count);
@@ -796,12 +796,12 @@ public void WriteCore_MessageWithNullException()
             Exception ex = null;
 
             // Act
-            logger.Log(LogLevel.Critical, 0, _state, ex, (s,e) => s);
-            logger.Log(LogLevel.Error, 0, _state, ex, (s,e) => s);
-            logger.Log(LogLevel.Warning, 0, _state, ex, (s,e) => s);
-            logger.Log(LogLevel.Information, 0, _state, ex, (s,e) => s);
-            logger.Log(LogLevel.Debug, 0, _state, ex, (s,e) => s);
-            logger.Log(LogLevel.Trace, 0, _state, ex, (s,e) => s);
+            logger.Log(LogLevel.Critical, 0, _state, ex, (s, e) => s);
+            logger.Log(LogLevel.Error, 0, _state, ex, (s, e) => s);
+            logger.Log(LogLevel.Warning, 0, _state, ex, (s, e) => s);
+            logger.Log(LogLevel.Information, 0, _state, ex, (s, e) => s);
+            logger.Log(LogLevel.Debug, 0, _state, ex, (s, e) => s);
+            logger.Log(LogLevel.Trace, 0, _state, ex, (s, e) => s);
 
             // Assert
             Assert.Equal(12, sink.Writes.Count);
@@ -824,17 +824,35 @@ public void WriteCore_NullMessageWithNullException()
             string message = null;
 
             // Act
-            logger.Log(LogLevel.Critical, 0, message, ex, (s,e) => s);
-            logger.Log(LogLevel.Error, 0, message, ex, (s,e) => s);
-            logger.Log(LogLevel.Warning, 0, message, ex, (s,e) => s);
-            logger.Log(LogLevel.Information, 0, message, ex, (s,e) => s);
-            logger.Log(LogLevel.Debug, 0, message, ex, (s,e) => s);
-            logger.Log(LogLevel.Trace, 0, message, ex, (s,e) => s);
+            logger.Log(LogLevel.Critical, 0, message, ex, (s, e) => s);
+            logger.Log(LogLevel.Error, 0, message, ex, (s, e) => s);
+            logger.Log(LogLevel.Warning, 0, message, ex, (s, e) => s);
+            logger.Log(LogLevel.Information, 0, message, ex, (s, e) => s);
+            logger.Log(LogLevel.Debug, 0, message, ex, (s, e) => s);
+            logger.Log(LogLevel.Trace, 0, message, ex, (s, e) => s);
 
             // Assert
             Assert.Equal(0, sink.Writes.Count);
         }
 
+        [Fact]
+        public void LogAfterDisposeWritesLog()
+        {
+            // Arrange
+            var sink = new ConsoleSink();
+            var console = new TestConsole(sink);
+            var processor = new ConsoleLoggerProcessor();
+            var logger = new ConsoleLogger(_loggerName, filter: null, includeScopes: false, loggerProcessor: processor);
+            logger.Console = console;
+
+            // Act
+            processor.Dispose();
+            logger.LogInformation("Logging after dispose");
+
+            // Assert
+            Assert.True(sink.Writes.Count == 2);
+        }
+
         private string GetMessage(string logLevelString, int eventId, Exception exception)
             => GetMessage(logLevelString, eventId, _state, exception);
 
@@ -849,9 +867,9 @@ private string GetMessage<TState>(string logLevelString, int eventId, TState sta
                 + _paddingString
                 + ReplaceMessageNewLinesWithPadding(state?.ToString())
                 + Environment.NewLine
-                + ( exception != null
+                + (exception != null
                     ? exception.ToString() + Environment.NewLine
-                    : string.Empty );
+                    : string.Empty);
         }
 
         private string ReplaceMessageNewLinesWithPadding(string message)