[ https://issues.apache.org/jira/browse/LOG4NET-652?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17388193#comment-17388193 ]
Daniel Mossberg commented on LOG4NET-652: ----------------------------------------- [~davydm]: I'm hitting this exact error with a .NET 5 application with log4net 2.0.12 running on Docker for Linux. Any guidance is appreciated. *This is the exception:* {code:java} System.PlatformNotSupportedException HResult=0x80131539 Message=Windows Principal functionality is not supported on this platform. Source=System.Security.Principal.Windows StackTrace: at System.Security.Principal.WindowsIdentity.GetCurrent(){code} *Callstack:* {code:java} System.Security.Principal.Windows.dll!System.Security.Principal.WindowsIdentity.GetCurrent() C# log4net.dll!log4net.Core.LoggingEvent.TryGetCurrentUserName() C# log4net.dll!log4net.Core.LoggingEvent.UserName.get() C# log4net.dll!log4net.Core.LoggingEvent.CreateCompositeProperties() C# log4net.dll!log4net.Core.LoggingEvent.GetProperties() C# Microsoft.ApplicationInsights.Log4NetAppender.dll!Microsoft.ApplicationInsights.Log4NetAppender.ApplicationInsightsAppender.BuildCustomProperties(log4net.Core.LoggingEvent loggingEvent, Microsoft.ApplicationInsights.Channel.ITelemetry trace) C# Microsoft.ApplicationInsights.Log4NetAppender.dll!Microsoft.ApplicationInsights.Log4NetAppender.ApplicationInsightsAppender.SendTrace(log4net.Core.LoggingEvent loggingEvent) C# Microsoft.ApplicationInsights.Log4NetAppender.dll!Microsoft.ApplicationInsights.Log4NetAppender.ApplicationInsightsAppender.Append(log4net.Core.LoggingEvent loggingEvent) C# log4net.dll!log4net.Appender.AppenderSkeleton.DoAppend(log4net.Core.LoggingEvent loggingEvent) C# log4net.dll!log4net.Util.AppenderAttachedImpl.AppendLoopOnAppenders(log4net.Core.LoggingEvent loggingEvent) C# log4net.dll!log4net.Repository.Hierarchy.Logger.CallAppenders(log4net.Core.LoggingEvent loggingEvent) C# log4net.dll!log4net.Repository.Hierarchy.Logger.ForcedLog(System.Type callerStackBoundaryDeclaringType, log4net.Core.Level level, object message, System.Exception exception) C# log4net.dll!log4net.Repository.Hierarchy.Logger.Log(System.Type callerStackBoundaryDeclaringType, log4net.Core.Level level, object message, System.Exception exception) C# log4net.dll!log4net.Core.LogImpl.Warn(object message, System.Exception exception) C#> Contoso.Logging.dll!Contoso.Logging.Log4Net.Log4NetAdapter.Log<Microsoft.Extensions.Logging.LoggerMessage.LogValues<string>>(Microsoft.Extensions.Logging.LogLevel logLevel, Microsoft.Extensions.Logging.EventId eventId, Microsoft.Extensions.Logging.LoggerMessage.LogValues<string> state, System.Exception exception, System.Func<Microsoft.Extensions.Logging.LoggerMessage.LogValues<string>, System.Exception, string> formatter) Line 148 C#{code} *Log4net.config:* {code:java} <?xml version="1.0" encoding="utf-8" ?> <log4net> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <threshold value="DEBUG" /> <layout type="log4net.Layout.PatternLayout"> <!--Pattern to output the caller's file name and line number--> <conversionPattern value="%date [%thread] - %message%newline" /> </layout> </appender> <appender name="aiAppender" type="Microsoft.ApplicationInsights.Log4NetAppender.ApplicationInsightsAppender, Microsoft.ApplicationInsights.Log4NetAppender"> <layout type="log4net.Layout.SimpleLayout" /> <threshold value="DEBUG" /> <InstrumentationKey value="__INSTRUMENTATION_KEY__" /> </appender> <root> <appender-ref ref="ConsoleAppender" /> <appender-ref ref="aiAppender" /> </root> </log4net>{code} *Csproj:* {code:java} Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>net5.0</TargetFramework> <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS> <DockerfileContext>..\..</DockerfileContext> </PropertyGroup> <ItemGroup> <PackageReference Include="log4net" Version="2.0.12" /> <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.17.0" /> <PackageReference Include="Microsoft.ApplicationInsights.Kubernetes" Version="2.0.1" /> <PackageReference Include="Microsoft.ApplicationInsights.Log4NetAppender" Version="2.17.0" /> <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.10.14" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\Mediapro.Msf.Logging\Mediapro.Msf.Logging.csproj" /> </ItemGroup> <ItemGroup> <Content Update="log4net.config"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </Content> </ItemGroup> </Project> {code} > Pattern with context property causes PlatformNotSupportedException on Linux > --------------------------------------------------------------------------- > > Key: LOG4NET-652 > URL: https://issues.apache.org/jira/browse/LOG4NET-652 > Project: Log4net > Issue Type: Bug > Components: Core > Affects Versions: 2.0.10 > Environment: Linux (Docker), .NET Core 2.2, .NET Core 3.1 > Reporter: Andreas Bilger > Assignee: Davyd McColl > Priority: Major > Labels: .net-core, Docker, Linux > Attachments: ConsoleApp1.zip > > Time Spent: 0.5h > Remaining Estimate: 0h > > As mentioned in LOG4NET-429 and LOG4NET-421 (introduced in LOG4NET-205), > having a custom property in a layout pattern makes each each log event > resolve the (Windows) user name with > {code:c#} > log4net.Core.LoggingEvent.get_UserName() > {code} > which calls > {code:c#} > System.Security.Principal.WindowsIdentity.GetCurrent() > {code} > On Linux this leads to an internal exception: > {code:bash} > System.PlatformNotSupportedException: Windows Principal functionality is not > supported on this platform. > {code} > This happens with versions 2.0.10 and 2.0.11 on .NET Core 2.2 and .NET Core > 3.1. > I attached a small console application project for reproduction in a docker > image: > * Extract the zip > * Run {{docker build . -f Dockerfile -t log4net.test:latest}} to build a > Linux docker image and compile the code > * Run {{docker run --name l4n -it --rm log4net.test:latest}} to run that > image in a docker container and open an interactive shell > * And in the shell, run {{dotnet ConsoleApp1.dll}} to execute the compiled > assembly > With internal debugging enabled, this produces the following console output: > {code:bash} > log4net: log4net assembly [log4net, Version=2.0.11.0, Culture=neutral, > PublicKeyToken=669e0ddf0bb1aa2a]. Loaded from [/app/log4net.dll]. (.NET > Runtime [3.1.8] on Unix 4.19.128.0) > log4net: defaultRepositoryType [log4net.Repository.Hierarchy.Hierarchy] > log4net: Creating repository for assembly [ConsoleApp1, Version=1.0.0.0, > Culture=neutral, PublicKeyToken=null] > log4net: Assembly [ConsoleApp1, Version=1.0.0.0, Culture=neutral, > PublicKeyToken=null] Loaded From [/app/ConsoleApp1.dll] > log4net: Assembly [ConsoleApp1, Version=1.0.0.0, Culture=neutral, > PublicKeyToken=null] does not have a RepositoryAttribute specified. > log4net: Assembly [ConsoleApp1, Version=1.0.0.0, Culture=neutral, > PublicKeyToken=null] using repository [log4net-default-repository] and > repository type [log4net.Repository.Hierarchy.Hierarchy] > log4net: Creating repository [log4net-default-repository] using type > [log4net.Repository.Hierarchy.Hierarchy] > log4net: configuring repository [log4net-default-repository] using file > [/app/ConsoleApp1.log4net.config] > log4net: configuring repository [log4net-default-repository] using stream > log4net: loading XML configuration > log4net: Configuring Repository [log4net-default-repository] > log4net: Configuration update mode [Merge]. > log4net: Logger [root] Level string is [DEBUG]. > log4net: Logger [root] level set to [name="DEBUG",value=30000]. > log4net: Loading Appender [Log] type: [log4net.Appender.RollingFileAppender] > log4net: Setting Property [File] to String value [Logs/ConsoleApp1] > log4net: Setting Property [AppendToFile] to Boolean value [True] > log4net: Setting Property [LockingModel] to object > [log4net.Appender.FileAppender+InterProcessLock] > log4net: Setting Property [RollingStyle] to RollingMode value [Date] > log4net: Setting Property [StaticLogFileName] to Boolean value [False] > log4net: Setting Property [DatePattern] to String value [-yyyy-MMMM\.\l\o\g] > log4net: Converter [message] Option [] Format > [min=-1,max=2147483647,leftAlign=False] > log4net: Converter [newline] Option [] Format > [min=-1,max=2147483647,leftAlign=False] > log4net: Setting Property [ConversionPattern] to String value [%date > [%property{pid}|%3thread] %-5level %message%newline] > log4net: Converter [date] Option [] Format > [min=-1,max=2147483647,leftAlign=False] > log4net: Converter [literal] Option [ [] Format > [min=-1,max=2147483647,leftAlign=False] > log4net: Converter [property] Option [pid] Format > [min=-1,max=2147483647,leftAlign=False] > log4net: Converter [literal] Option [|] Format > [min=-1,max=2147483647,leftAlign=False] > log4net: Converter [thread] Option [] Format > [min=3,max=2147483647,leftAlign=False] > log4net: Converter [literal] Option [] ] Format > [min=-1,max=2147483647,leftAlign=False] > log4net: Converter [level] Option [] Format > [min=5,max=2147483647,leftAlign=True] > log4net: Converter [literal] Option [ ] Format > [min=-1,max=2147483647,leftAlign=False] > log4net: Converter [message] Option [] Format > [min=-1,max=2147483647,leftAlign=False] > log4net: Converter [newline] Option [] Format > [min=-1,max=2147483647,leftAlign=False] > log4net: Setting Property [Layout] to object [log4net.Layout.PatternLayout] > log4net: Type = [0], r0 = [-1970-January.log], r1 = [-1970-January.log] > log4net: Type = [1], r0 = [-1970-January.log], r1 = [-1970-January.log] > log4net: Type = [2], r0 = [-1970-January.log], r1 = [-1970-January.log] > log4net: Type = [3], r0 = [-1970-January.log], r1 = [-1970-January.log] > log4net: Type = [4], r0 = [-1970-January.log], r1 = [-1970-January.log] > log4net: Type = [5], r0 = [-1970-January.log], r1 = [-1970-February.log] > log4net: Searched for existing files in [/app/Logs] > log4net: curSizeRollBackups starts at [0] > log4net: Opening file for writing [/app/Logs/ConsoleApp1-2020-September.log] > append [True] > log4net: Created Appender [Log] > log4net: Adding appender named [Log] to logger [root]. > log4net: Hierarchy Threshold [] > log4net:ERROR [RollingFileAppender] ErrorCode: GenericFailure. Failed in > DoAppend > System.PlatformNotSupportedException: Windows Principal functionality is not > supported on this platform. > at System.Security.Principal.WindowsIdentity.GetCurrent() > at log4net.Core.LoggingEvent.get_UserName() > at log4net.Core.LoggingEvent.CreateCompositeProperties() > at log4net.Core.LoggingEvent.LookupProperty(String key) > at log4net.Layout.Pattern.PropertyPatternConverter.Convert(TextWriter > writer, LoggingEvent loggingEvent) > at log4net.Layout.Pattern.PatternLayoutConverter.Convert(TextWriter > writer, Object state) > at log4net.Util.PatternConverter.Format(TextWriter writer, Object state) > at log4net.Layout.PatternLayout.Format(TextWriter writer, LoggingEvent > loggingEvent) > at log4net.Appender.AppenderSkeleton.RenderLoggingEvent(TextWriter writer, > LoggingEvent loggingEvent) > at log4net.Appender.TextWriterAppender.Append(LoggingEvent loggingEvent) > at log4net.Appender.FileAppender.Append(LoggingEvent loggingEvent) > at log4net.Appender.RollingFileAppender.Append(LoggingEvent loggingEvent) > at log4net.Appender.AppenderSkeleton.DoAppend(LoggingEvent loggingEvent) > {code} -- This message was sent by Atlassian Jira (v8.3.4#803005)