internal void WriteBar(ConsoleLine line) { if (line == null) { throw new ArgumentNullException(nameof(line)); } lock (this) { string value; line.TimeOffset = Math.Round((DateTime.UtcNow - ConsoleInfo.StartTime).TotalSeconds, 3); if (_lastTimeOffset >= line.TimeOffset) { // prevent duplicate lines collapsing line.TimeOffset = _lastTimeOffset + 0.0001; } _lastTimeOffset = line.TimeOffset; if (line.Message.Length > ValueFieldLimit - 36) { // pretty sure it won't fit // (36 is an upper bound for JSON formatting, TimeOffset and TextColor) value = null; } else { // try to encode and see if it fits value = JsonConvert.SerializeObject(line); if (value.Length > ValueFieldLimit) { value = null; } } if (value == null) { var referenceKey = Guid.NewGuid().ToString("N"); Storage.SetRangeInHash(ConsoleInfo.HashKey, new[] { new KeyValuePair <string, string>(referenceKey, line.Message) }); line.Message = referenceKey; line.IsReference = true; value = JsonConvert.SerializeObject(line); } Storage.AddToSet(ConsoleInfo.SetKey, value, line.TimeOffset); } }
public void WriteLine(string message, ConsoleFontColor fontColor = null) { if (this.ConsoleInfo == null || string.IsNullOrEmpty(message)) { return; } if (string.IsNullOrEmpty(this.ConsoleInfo.HashKey) || string.IsNullOrEmpty(this.ConsoleInfo.SetKey)) { return; } message = "【JobAgent】" + message; lock (this) { string value; ConsoleLine line = new ConsoleLine { Message = message }; if (fontColor != null) { line.TextColor = fontColor.ToString(); } line.TimeOffset = Math.Round((DateTime.UtcNow - ConsoleInfo.StartTime).TotalSeconds, 3); if (_lastTimeOffset >= line.TimeOffset) { // prevent duplicate lines collapsing line.TimeOffset = _lastTimeOffset + 0.0001; } _lastTimeOffset = line.TimeOffset; if (line.Message.Length > ValueFieldLimit - 36) { // pretty sure it won't fit // (36 is an upper bound for JSON formatting, TimeOffset and TextColor) value = null; } else { // try to encode and see if it fits value = JsonConvert.SerializeObject(line); if (value.Length > ValueFieldLimit) { value = null; } } if (value == null) { var referenceKey = Guid.NewGuid().ToString("N"); Storage.SetRangeInHash(ConsoleInfo.HashKey, new[] { new KeyValuePair <string, string>(referenceKey, line.Message) }); line.Message = referenceKey; line.IsReference = true; value = JsonConvert.SerializeObject(line); } Storage.AddToSet(ConsoleInfo.SetKey, value, line.TimeOffset); } }