public static ObjectData Collect(object source, CollectContext context) { if (context.Depth > MaxDepth) { throw new Exception("Object graph is too deep"); } if (ReferenceEquals(source, null)) { return(PrimitiveData.NullValue); } // prevents recursion if (context.Cache.TryGetValue(source, out var data)) { return(data); } var typeMetadata = GetTypeMetadata(source); string typeName = source.GetType().FullName; if (typeMetadata.IsState) { return(CreateStateObject(source, typeMetadata, typeName, context)); } else if (source is IDictionary dictionary) { return(CreateDictionary(dictionary, typeName, context)); } else if (source is IEnumerable enumerable && !(source is string)) { return(CreateListData(enumerable, typeName, context)); }
private void AnyThresd() { Task.Run(() => { IDFile file = null; while (true) { lock (this) { if (_queue.Count > 0) { file = _queue.Dequeue(); } } if (file != null) { _logger.LogInformation($"开始处理 {file}"); using (var sr = new StreamReader(file.FullPath)) { var line = ""; var index = 1; var message = ""; var context = new CollectContext(); while ((line = sr.ReadLine()) != null) { if (!Regex.IsMatch(line, _options.Mulitline.Pattern)) { context.Fields["message"] = message; _dealContext(context); context = new CollectContext(); index = 1; message = ""; context.Fields["path"] = file.FullPath; context.Fields["basefilename"] = file.Name.Split('.')[0].ToLower(); } line = line.TrimStart(); if (index <= _options.Mulitline.SpecialLines) { context.Fields[$"line{index}"] = line; index++; } else { message += line + "\r\n"; } mre_pauseToStart.WaitOne(); } } _logger.LogInformation($"{file} 处理完成"); } if (file == null) { mre_addFile.WaitOne(); } file = null; } }); }
public static ObjectData Collect(object source) { return(Collect(source, CollectContext.CreateEmpty())); }