如何使用 Sustainsys.Saml2 设置 NLog

How to setup NLog with Sustainsys.Saml2

我有一个 ASP.Net Web 表单应用程序,我刚刚在其中集成了 Sustainsys.Saml2 库。

我从未使用过任何类型的日志记录机制,我正在尝试弄清楚如何为 troubleshooting 页面上所述的库添加或创建 ILoggerAdapter

我决定使用 NLog(请随意推荐一个不同的)但是我不是很了解这个,或者没有使用正确的关键字来搜索我 need/want,或者他们没有很多关于它的文档。

目前,我正在使用 Sustainsys.Saml2HttpModule 版本。可应要求提供任何其他信息。

任何帮助都会很棒。

目前,我正在通过 web.config 和 global.asax 文件配置 Sustainsys.Saml2 库。这是 class 我的 global.asax 电话:

public class Saml2Config {
    private static bool _alreadyInitialized;
    private static readonly object Lock = new object();

    public static void Initialize() {
        if (_alreadyInitialized) {
            return;
        }

        lock (Lock) {
            if (_alreadyInitialized) {
                return;
            }

            var domain = PageHelper.GetDomainURL(true);

            Sustainsys.Saml2.Configuration.Options.FromConfiguration.SPOptions.EntityId.Id = $"{domain}/federation/Saml2";
            Sustainsys.Saml2.Configuration.Options.FromConfiguration.SPOptions.ModulePath = "/federation/Saml2";
            Sustainsys.Saml2.Configuration.Options.FromConfiguration.SPOptions.ReturnUrl = new Uri($"{domain}/mybarry");
            Sustainsys.Saml2.Configuration.Options.FromConfiguration.SPOptions.PublicOrigin = new Uri($"{domain}");

            Sustainsys.Saml2.Configuration.Options.FromConfiguration.SPOptions.Logger = new NullLoggerAdapter();

            _alreadyInitialized = true;
        }
    }
}

ILoggerAdapter 包含针对不同日志级别的方法。创建一个实现 ILoggerAdapter 并写入 NLog 的适配器 class。然后将 SPOptions.Logger 设置为您的适配器实例 class.

如果你想要一个例子,你可以查看 Asp.Net 核心的适配器,它记录到 Asp.Net 核心日志系统,并且是 Sustainsys.Saml2.AspNetCore2 包的默认设置:https://github.com/Sustainsys/Saml2/blob/master/Sustainsys.Saml2.AspNetCore2/AspNetCoreLoggerAdapter.cs

对于 Sustainsys.Saml2.HttpModule 库,默认是 NullLoggerAdapter,它只是丢弃任何日志。使用它的唯一原因是不必在使用它的任何地方对 Logger 属性 进行 nullcheck(该代码是在引入 ?. 语法之前编写的。)

The interface 非常简单

public interface ILoggerAdapter
{
    void WriteInformation(string message);

    void WriteError(string message, Exception ex);

    void WriteVerbose(string message);
}

我会按如下方式实现它:

public class NLogAdapter : ILoggerAdapter
{
    private static Logger Logger = LogManager.GetLogger("Saml2");

    public void WriteInformation(string message)
    {
        Logger.Info(message);
    }

    public void WriteError(string message, Exception ex)
    {
        Logger.Error(ex, message);
    }

    public void WriteVerbose(string message)
    {
        Logger.Debug(message);
    }
}

最后设置:

Sustainsys.Saml2.Configuration.Options.FromConfiguration.SPOptions.Logger = new NLogAdapter();