in src/Logging/Internal/EventSource/OmexLogEventSender.cs [30:110]
public void LogMessage(Activity? activity, string category, LogLevel level, EventId eventId, int threadId, string message, Exception? exception)
{
if (!IsEnabled(level))
{
return;
}
// NOTE: Currently, we're not doing anything with the exception as the message when an exception is logged will already contain the exception details.
// However, in the future, it's possible we might want to log details, such as exception type or exception message, in separate columns.
Guid partitionId = m_serviceContext.PartitionId;
long replicaId = m_serviceContext.ReplicaOrInstanceId;
string applicationName = m_executionContext.ApplicationName;
string serviceName = m_executionContext.ServiceName;
string buildVersion = m_executionContext.BuildVersion;
string machineId = m_executionContext.MachineId;
string tagName = eventId.Name ?? string.Empty;
// In case if tag created using Tag.Create (line number and file in description) it's better to display decimal number
string tagId = string.IsNullOrWhiteSpace(eventId.Name)
? eventId.ToTagId()
: eventId.Id.ToString(CultureInfo.InvariantCulture);
string activityId = string.Empty;
ActivityTraceId activityTraceId = default;
Guid obsoleteCorrelationId = Guid.Empty;
uint obsoleteTransactionId = 0u;
bool isHealthCheck = false;
if (activity != null)
{
activityId = activity.Id ?? string.Empty;
activityTraceId = activity.TraceId;
isHealthCheck = activity.IsHealthCheck();
if (m_options.CurrentValue.AddObsoleteCorrelationToActivity)
{
#pragma warning disable CS0618 // We are using obsolete correlation to support logging correlation from old Omex services
obsoleteCorrelationId = activity.GetObsoleteCorrelationId() ?? activity.GetRootIdAsGuid() ?? Guid.Empty;
obsoleteTransactionId = activity.GetObsoleteTransactionId() ?? 0u;
#pragma warning restore CS0618
}
}
string traceIdAsString = activityTraceId.ToHexString();
//Event methods should have all information as parameters so we are passing them each time
// Possible Breaking changes:
// 1. ThreadId type Changed from string to avoid useless string creation
// 2. New fields added:
// a. tagName to events since it will have more useful information
// b. activityId required for tracking net core activity
// c. activityTraceId required for tracking net core activity
switch (level)
{
case LogLevel.None:
break;
case LogLevel.Trace:
m_eventSource.LogSpamServiceMessage(applicationName, serviceName, machineId, buildVersion, s_processName, partitionId, replicaId,
activityId, traceIdAsString, obsoleteCorrelationId, obsoleteTransactionId, "Spam", category, tagId, tagName, threadId, message, isHealthCheck);
break;
case LogLevel.Debug:
m_eventSource.LogVerboseServiceMessage(applicationName, serviceName, machineId, buildVersion, s_processName, partitionId, replicaId,
activityId, traceIdAsString, obsoleteCorrelationId, obsoleteTransactionId, "Verbose", category, tagId, tagName, threadId, message, isHealthCheck);
break;
case LogLevel.Information:
m_eventSource.LogInfoServiceMessage(applicationName, serviceName, machineId, buildVersion, s_processName, partitionId, replicaId,
activityId, traceIdAsString, obsoleteCorrelationId, obsoleteTransactionId, "Info", category, tagId, tagName, threadId, message, isHealthCheck);
break;
case LogLevel.Warning:
m_eventSource.LogWarningServiceMessage(applicationName, serviceName, machineId, buildVersion, s_processName, partitionId, replicaId,
activityId, traceIdAsString, obsoleteCorrelationId, obsoleteTransactionId, "Warning", category, tagId, tagName, threadId, message, isHealthCheck);
break;
case LogLevel.Error:
case LogLevel.Critical:
m_eventSource.LogErrorServiceMessage(applicationName, serviceName, machineId, buildVersion, s_processName, partitionId, replicaId,
activityId, traceIdAsString, obsoleteCorrelationId, obsoleteTransactionId, "Error", category, tagId, tagName, threadId, message, isHealthCheck);
break;
default:
throw new ArgumentException(FormattableString.Invariant($"Unknown EventLevel: {level}"));
}
}