私はAzure Storage Tablesにログを記録し、私のアペンダ内からlog4net.GlobalContext
のプロパティにアクセスする際の問題を抱えているカスタムアペンダでlog4netを使用しています。 Azure関数の内部からログを取っています。log4netカスタムアペンダからのコンテキストプロパティへのアクセス
追加はかなりストレートでシンプルでうまくいきますが、私はいくつかのカスタムプロパティを追加したいと思います - そのうちの1つはInvocationIdで、Azure関数からしかアクセスできないので、私は最良の方法を知りたいと思いますこれを達成する。
私が迷っているものは何ですか?
アペンダ
protected override void Append(LoggingEvent loggingEvent)
{
_tableCtx.Log(new LogEntry
{
Timestamp = loggingEvent.TimeStamp,
Message = loggingEvent.RenderedMessage,
Level = loggingEvent.Level.Name,
// properties is always empty
InvocationId = loggingEvent.Properties["InvocationId"],
PartitionKey = loggingEvent.LoggerName,
});
}
Azureの機能
public static async Task<HttpResponseMessage> MyFunction([HttpTrigger(AuthorizationLevel.Function, "post")]HttpRequestMessage req, ILogger log, ExecutionContext context)
{
log4net.GlobalContext.Properties["InvocationId"] = context.InvocationId;
using (var config = Assembly.GetExecutingAssembly().GetManifestResourceStream("MyFunc.logging.config"))
{
log4net.Config.XmlConfigurator.Configure(config);
}
var log = LogManager.GetLogger(context.FunctionName);
}
appender xmlファイルでこの種の作業を行う方が簡単かもしれないようですか? https://stackoverflow.com/questions/28775568/add-a-custom-property-to-a-loggingeventdata-programmaticallyを参照してください。 –