diff --git a/dotnet/src/webdriver/Internal/Logging/LogContext.cs b/dotnet/src/webdriver/Internal/Logging/LogContext.cs
index 7ea38d188f1d7..8d32ce3968dc1 100644
--- a/dotnet/src/webdriver/Internal/Logging/LogContext.cs
+++ b/dotnet/src/webdriver/Internal/Logging/LogContext.cs
@@ -41,6 +41,7 @@ public LogContext(LogEventLevel level, ILogContext? parentLogContext, Concurrent
{
throw new ArgumentOutOfRangeException(nameof(truncationLength), "Truncation length must be non-negative.");
}
+
_level = level;
_parentLogContext = parentLogContext;
_loggers = CloneLoggers(loggers, level);
diff --git a/dotnet/src/webdriver/Internal/Logging/LogHandlerList.cs b/dotnet/src/webdriver/Internal/Logging/LogHandlerList.cs
index 6f63d2d2bec58..455ef336576e7 100644
--- a/dotnet/src/webdriver/Internal/Logging/LogHandlerList.cs
+++ b/dotnet/src/webdriver/Internal/Logging/LogHandlerList.cs
@@ -17,45 +17,63 @@
// under the License.
//
+using System.Collections;
+
namespace OpenQA.Selenium.Internal.Logging;
///
/// Represents a list of log handlers.
///
///
-internal sealed class LogHandlerList : List, ILogHandlerList
+internal sealed class LogHandlerList : ILogHandlerList
{
private readonly ILogContext _logContext;
+ private readonly object _lock = new();
+ private volatile ILogHandler[] _handlers;
public LogHandlerList(ILogContext logContext)
{
_logContext = logContext;
+ _handlers = [];
}
public LogHandlerList(ILogContext logContext, IEnumerable handlers)
- : base(handlers)
{
_logContext = logContext;
+ _handlers = [.. handlers];
}
- public new ILogContext Add(ILogHandler handler)
+ public ILogContext Add(ILogHandler handler)
{
- base.Add(handler);
+ lock (_lock)
+ {
+ _handlers = [.. _handlers, handler];
+ }
return _logContext;
}
- public new ILogContext Remove(ILogHandler handler)
+ public ILogContext Remove(ILogHandler handler)
{
- base.Remove(handler);
+ lock (_lock)
+ {
+ _handlers = [.. _handlers.Where(h => h != handler)];
+ }
return _logContext;
}
- public new ILogContext Clear()
+ public ILogContext Clear()
{
- base.Clear();
+ lock (_lock)
+ {
+ _handlers = [];
+ }
return _logContext;
}
+
+ public IEnumerator GetEnumerator() => ((IEnumerable)_handlers).GetEnumerator();
+
+ IEnumerator IEnumerable.GetEnumerator() => _handlers.GetEnumerator();
}