我想为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);
}
}
}