Package Name | NuGet | Description |
---|---|---|
NLog.Extensions.AzureDataTables | Azure Table Storage or Azure CosmosDb Tables |
Supports both Azure Storage Tables and CosmosDB Tables.
<extensions>
<add assembly="NLog.Extensions.AzureDataTables" />
</extensions>
<targets>
<target xsi:type="AzureDataTables"
name="String"
layout="Layout"
connectionString="String"
tableName="Layout"
logTimeStampFormat="O" />
</targets>
name - Name of the target.
layout - Text to be rendered. Layout Required.
connectionString - Azure storage connection string. Layout
serviceUri - Alternative to ConnectionString, where Managed Identiy is acquired from DefaultAzureCredential for User delegation SAS.
tenantIdentity - Alternative to ConnectionString. Used together with ServiceUri. Input for DefaultAzureCredential.
resourceIdentity - Alternative to ConnectionString. Used together with ServiceUri. Input for DefaultAzureCredential as ManagedIdentityResourceId.
clientIdentity - Alternative to ConnectionString. Used together with ServiceUri. Input for DefaultAzureCredential as ManagedIdentityClientId.
sharedAccessSignature - Alternative to ConnectionString. Used together with ServiceUri. Input for AzureSasCredential
accountName - Alternative to ConnectionString. Used together with ServiceUri. Input for TableSharedKeyCredential storage account-name.
accessKey - Alternative to ConnectionString. Used together with ServiceUri. Input for TableSharedKeyCredential account-access-key.
tableName - Azure table name. Layout
rowKey - Azure Table RowKey. Layout. Default = "InverseTicks_${guid}"
partitionKey - Azure PartitionKey. Layout. Default = ${logger}
logTimeStampFormat - Default Log TimeStamp is set to 'O' for Round-trip format if not specified.
Instead of using the predefined NLogEntity-properties, then one can specify wanted properties:
<extensions>
<add assembly="NLog.Extensions.AzureDataTables" />
</extensions>
<targets>
<target xsi:type="AzureDataTables"
name="String"
connectionString="Layout"
tableName="Layout">
<contextproperty name="Level" layout="${level}" />
<contextproperty name="LoggerName" layout="${logger}" />
<contextproperty name="Message" layout="${message:raw=true}" />
<contextproperty name="Exception" layout="${exception:format=tostring}" />
<contextproperty name="FullMessage" layout="${message}" />
<contextproperty name="MachineName" layout="${machinename}" />
</target>
</targets>
It will by default include the hardcoded property LogTimeStamp
of type DateTime that contains LogEventInfo.TimeStamp.ToUniversalTime()
.
- This can be overriden by having
<contextproperty name="LogTimeStamp">
as the first property, where empty property-value means leave out.
batchSize - Number of EventData items to send in a single batch (Default=100)
taskDelayMilliseconds - Artificial delay before sending to optimize for batching (Default=200 ms)
queueLimit - Number of pending LogEvents to have in memory queue, that are waiting to be sent (Default=10000)
overflowAction - Action to take when reaching limit of in memory queue (Default=Discard)
taskTimeoutSeconds - How many seconds a Task is allowed to run before it is cancelled (Default 150 secs)
retryDelayMilliseconds - How many milliseconds to wait before next retry (Default 500ms, and will be doubled on each retry).
retryCount - How many attempts to retry the same Task, before it is aborted (Default 0)
NLog Layout makes it possible to retrieve settings from many locations.
connectionString="${configsetting:ConnectionStrings.AzureTable}"
- Example appsettings.json on .NetCore:
{
"ConnectionStrings": {
"AzureTable": "Server=tcp:server.database.windows.net;"
}
}
connectionString="${appsetting:ConnectionStrings.AzureTable}"
- Example app.config on .NetFramework:
<configuration>
<connectionStrings>
<add name="AzureTable" connectionString="Server=tcp:server.database.windows.net;"/>
</connectionStrings>
</configuration>
connectionString="${environment:AZURESQLCONNSTR_CONNECTION_STRING}"
connectionString="${gdc:AzureTableConnectionString}"
- Example code for setting GDC-value:
NLog.GlobalDiagnosticsContext.Set("AzureTableConnectionString", "Server=tcp:server.database.windows.net;");