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