简体   繁体   English

以编程方式设置 NLog 目标属性

[英]Programmatically set the NLog target attributes

I am using NLog Azure Storage Logger .我正在使用NLog Azure 存储记录器 My config is as below, I don't want to put the storage key in the target.我的配置如下,我不想把存储密钥放在目标中。 Instead, I will use it from app settings so that I can set the Azure website "Application Settings" in the deployment environment.相反,我将从应用程序设置中使用它,以便我可以在部署环境中设置 Azure 网站“应用程序设置”。 How can I programmatically set the connectionString for this target?如何以编程方式为此目标设置connectionString

 <nlog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"
   xmlns="http://www.nlog-project.org/schemas/NLog.xsd">

<target type="AzureAppendBlob"
           name="azure"
           layout="${longdate} ${level:uppercase=true} - ${message}"
           connectionString="DefaultEndpointsProtocol=https;AccountName=mylogs;AccountKey=xxxoxxx=="
           container="myappcontainer"
           blobName="${date:format=yyyy-MM-dd}.log" />

Looking for something like,寻找类似的东西,

public class NLogService: IMyLogService
{
   ....

    public NLogService()
    {
        Logger azureLogger = LogManager.GetLogger("AzureAppendBlob");
        AzureAppendBlobTarget t = dbLogger.????;
        t.ConnectionString = "..."; 
    }
}

The recommended way:推荐方式:

var azureBlobTarget = LogManager.Configuration.FindTargetByName<AzureAppendBlobTarget>("azure");
azureBlobTarget.ConnectionString = "DefaultEndpointsProtocol=https;AccountName=mylogs;AccountKey=xxx";

This also works if NLog is configured with a xml file.如果 NLog 配置了 xml 文件,这也适用。

Figured out how to do it,想出了怎么做,

    public NLogService()
    {
        var config = new LoggingConfiguration();
        var azureBlobTarget = new AzureAppendBlobTarget();
        config.AddTarget("azureAppender", azureBlobTarget);

        azureBlobTarget.BlobName = "${date:format=yyyy-MM-dd}.log";  
        azureBlobTarget.ConnectionString = "DefaultEndpointsProtocol=https;AccountName=mylogs;AccountKey=xxx";
        azureBlobTarget.Container = "myapp";
        azureBlobTarget.Layout = @"${longdate} ${level:uppercase=true} - ${message}";            

        var rule1 = new LoggingRule("*", LogLevel.Debug, azureBlobTarget);
        config.LoggingRules.Add(rule1);

        // Step 5. Activate the configuration
        LogManager.Configuration = config;
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM