diff --git a/src/log4net.Tests/Appender/OutputDebugAppenderTest.cs b/src/log4net.Tests/Appender/OutputDebugAppenderTest.cs
new file mode 100644
index 00000000..9659244c
--- /dev/null
+++ b/src/log4net.Tests/Appender/OutputDebugAppenderTest.cs
@@ -0,0 +1,72 @@
+#region Apache License
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to you under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#endregion
+
+
+using System;
+using System.Diagnostics;
+
+using log4net.Appender;
+using log4net.Config;
+using log4net.Core;
+using log4net.Layout;
+using log4net.Repository;
+using NUnit.Framework;
+
+namespace log4net.Tests.Appender;
+
+///
+/// Used for internal unit testing the class.
+///
+///
+/// Used for internal unit testing the class.
+///
+[TestFixture]
+[Platform(Include = "Win")]
+public sealed class OutputDebugStringAppenderTest
+{
+ ///
+ /// Verifies that the OutputDebugString api is called by the appender without issues
+ ///
+ [Test]
+ public void AppendShouldNotCauseAnyErrors()
+ {
+ ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());
+
+ OutputDebugStringAppender outputDebugStringAppender = new()
+ {
+ Layout = new SimpleLayout(),
+ ErrorHandler = new FailOnError()
+ };
+ outputDebugStringAppender.ActivateOptions();
+
+ BasicConfigurator.Configure(rep, outputDebugStringAppender);
+
+ ILog log = LogManager.GetLogger(rep.Name, GetType());
+ log.Debug("Message - Сообщение - הודעה");
+
+ // need a way to check that the api is actually called and the string is properly marshalled.
+ }
+}
+
+class FailOnError : IErrorHandler
+{
+ public void Error(string message, Exception? e, ErrorCode errorCode) => Assert.Fail($"Unexpected error: {message} exception: {e}, errorCode: {errorCode}");
+ public void Error(string message, Exception e) => Assert.Fail($"Unexpected error: {message} exception: {e}");
+ public void Error(string message) => Assert.Fail($"Unexpected error: {message}");
+}
diff --git a/src/log4net/Util/NativeMethods.cs b/src/log4net/Util/NativeMethods.cs
index 88e43c4c..96ca8918 100644
--- a/src/log4net/Util/NativeMethods.cs
+++ b/src/log4net/Util/NativeMethods.cs
@@ -139,7 +139,7 @@ internal static extern int FormatMessage(
/// Stub for OutputDebugString native method
///
/// the string to output
- [DllImport("Kernel32.dll")]
+ [DllImport("Kernel32.dll", CharSet = CharSet.Unicode)]
[DefaultDllImportSearchPaths(DllImportSearchPath.System32)]
internal static extern void OutputDebugString(string message);