[ 
https://issues.apache.org/jira/browse/LOG4NET-652?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17388193#comment-17388193
 ] 

Daniel Mossberg edited comment on LOG4NET-652 at 7/27/21, 5:18 PM:
-------------------------------------------------------------------

[~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>
   <Content Update="log4net.config">
     <CopyToOutputDirectory>Always</CopyToOutputDirectory>
   </Content>
 </ItemGroup>
</Project>
{code}
 


was (Author: dmossberg):
[~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)

Reply via email to