in src/Middleware/Grpc/Server/CtxLogger.cs [73:112]
public static Dictionary<string, object> FilterLoggableFields(
Dictionary<string, object> fieldMap,
MessageDescriptor descriptor)
{
if (fieldMap == null || descriptor == null)
{
return fieldMap ?? new Dictionary<string, object>();
}
foreach (var fieldName in fieldMap.Keys.ToList())
{
var fieldDescriptor = descriptor.FindFieldByName(fieldName);
if (fieldDescriptor == null)
{
continue;
}
var options = fieldDescriptor.GetOptions();
if (options != null)
{
bool hasLoggable = options.HasExtension(LogExtensions.Loggable);
if (hasLoggable && !options.GetExtension(LogExtensions.Loggable))
{
fieldMap.Remove(fieldName);
continue;
}
}
if (fieldMap[fieldName] is Dictionary<string, object> subMap &&
fieldDescriptor.FieldType == FieldType.Message)
{
var subMessageDescriptor = fieldDescriptor.MessageType;
if (subMessageDescriptor != null)
{
fieldMap[fieldName] = FilterLoggableFields(subMap, subMessageDescriptor);
}
}
}
return fieldMap;
}