Log4Net自定义附加程序初始化

时间:2018-12-15 11:01:19

标签: c# log4net log4net-appender

我想为Log4Net写一个CosmosDB追加器,因为找不到合适的追加器,并且我需要了解初始化它的最佳方法。

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

现在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);
        }
   }
}

0 个答案:

没有答案