'Better NLog logger name for F# modules and GetCurrentClassLogger()

When I include NLog.LogManager.GetCurrentClassLogger() at the top of my F# modules, the name of the logger looks something like <StartupCode$NLogTest>.$Program. I would have hoped for something like NLogTest.TestModule.

How can I get a better logger name for my F# modules?

Here is a complete example:

Program.fs

namespace NLogTest

type TestClass() =
    let logger = NLog.LogManager.GetCurrentClassLogger()
    member _.Run() =
        logger.Info("Inside my class")

module TestModule =
    let logger = NLog.LogManager.GetCurrentClassLogger()
    let Run() =
        logger.Info("Inside my module")

module Program =
    [<EntryPoint>]
    let Main _ =
        TestClass().Run()
        TestModule.Run()
        0

NLogTest.fsproj

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <None Include="NLog.config">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
    <Compile Include="Program.fs" />
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="NLog" Version="4.7.13" />
  </ItemGroup>
</Project>

NLog.config

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <targets>
        <target name="logconsole" xsi:type="Console" />
    </targets>
    <rules>
        <logger name="*" minlevel="Info" writeTo="logconsole" />
    </rules>
</nlog>

Output

2022-02-08 18:43:52.6678|INFO|NLogTest.TestClass|Inside my class
2022-02-08 18:43:52.6997|INFO|<StartupCode$NLogTest>.$Program|Inside my module

It's that last line that I would like to improve.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source