Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Log4Net自定义附加器初始化_C#_Log4net_Log4net Appender - Fatal编程技术网

C# Log4Net自定义附加器初始化

C# Log4Net自定义附加器初始化,c#,log4net,log4net-appender,C#,Log4net,Log4net Appender,我想为Log4Net编写一个CosmosDB appender,因为我找不到一个有效的,我需要了解初始化它的最佳方法 下面你可以找到我的工作进度代码 现在Cosmos DB客户端初始化在Append方法中,但我相信最好只调用一次 我试图将其放入MyCosmosDBAppender类初始化中,但此时属性还不包含值 所以我的问题是…是否存在一个只调用一次的方法,可以用于初始化 或者唯一的解决方案是在Append中插入一个检查,以便第一次执行它 using System; using System.C

我想为Log4Net编写一个CosmosDB appender,因为我找不到一个有效的,我需要了解初始化它的最佳方法

下面你可以找到我的工作进度代码

现在Cosmos DB客户端初始化在Append方法中,但我相信最好只调用一次

我试图将其放入MyCosmosDBAppender类初始化中,但此时属性还不包含值

所以我的问题是…是否存在一个只调用一次的方法,可以用于初始化

或者唯一的解决方案是在Append中插入一个检查,以便第一次执行它

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using log4net.Core;
using log4net.Appender;
using Microsoft.Azure.Documents;
using Microsoft.Azure.Documents.Client;

namespace MyCosmosDB
{
    public class MyCosmosDBAppender : AppenderSkeleton
    {
        public string EndPoint { get; set; }

        public string AuthKey { get; set; }

        public string Database { get; set; }

        public string Collection { get; set; }

        private static DocumentClient client;

        public MyCosmosDBAppender()
        {
        }

        override protected void Append(LoggingEvent loggingEvent)
        {
            ConnectionPolicy policy = new ConnectionPolicy { ConnectionMode = ConnectionMode.Direct, ConnectionProtocol = Protocol.Tcp };
            client = new DocumentClient(new Uri(this.EndPoint), this.AuthKey, policy);
            client.OpenAsync();

            LogObject obj = new LogObject();
            obj.Id = "AKWP";
            obj.Name = "Test name";
            obj.Publisher = "Pubblished by...";

            CreateItemAsync(obj);
        }

        public void CreateItemAsync(LogObject item)
        {
            client.CreateDocumentAsync(UriFactory.CreateDocumentCollectionUri(this.Database, this.Collection), item);
        }
   }
}

你看了ActivateOptions overridable方法了吗?你需要配置新的appender以供Log4NetHanks Klaus使用,因为某种原因,我第一次搜索时忽略了ActivateOptions,它非常适合我的需要!