/// <summary> /// Convert LoggingEvent to JSON string for LogStash /// </summary> /// <param name="log">Log event</param> /// <returns>JSON string</returns> protected virtual string ConvertToString(LoggingEvent log) { Contract.Requires(log != null); JsonSimpleWriter writer = new JsonSimpleWriter(1024); writer.AppendJsonBeginObject(); { writer.AppendJsonParamConditional("@timestamp", log.Date.ToUniversalTime().ToString("o", System.Globalization.CultureInfo.InvariantCulture), screen: false); writer.AppendJsonParamConditional("@version", "1", screen: false); writer.AppendJsonParamConditional("level", log.Level.Name, screen: false); writer.AppendJsonParamConditional("message", log.Message ?? "", screen: true); writer.AppendJsonParamConditional("context", log.Context, screen: true); writer.AppendJsonKey("location").AppendJsonBeginObject(); { writer.AppendJsonParamConditional("file", log.FilePath, screen: true); writer.AppendJsonParamConditional("line_number", log.LineNumber > 0 ? log.LineNumber.ToString() : null, screen: false); writer.AppendJsonParamConditional("assembly", log.Assembly, screen: true); writer.AppendJsonParamConditional("namespace", log.Namespace, screen: false); writer.AppendJsonParamConditional("class", log.Clazz, screen: false); writer.AppendJsonParamConditional("method", log.Method, screen: false); writer.AppendJsonParamConditional("stack_source", log.StackSources, screen: true); writer.AppendJsonEndObject(); } writer.AppendJsonKey("source").AppendJsonBeginObject(); { writer.AppendJsonParamConditional("process_name", log.ProcessName, screen: true); writer.AppendJsonParamConditional("pid", log.ProcessId > 0 ? log.ProcessId.ToString() : null, screen: false); writer.AppendJsonParamConditional("machine_name", log.MachineName, screen: true); writer.AppendJsonParamConditional("machine_ip", log.MachineIpAddress, screen: true); writer.AppendJsonEndObject(); } if (log.Exception != null) { List <string> messages = new List <string>(); List <string> types = new List <string>(); Error currentError = log.Exception; while (currentError != null) { messages.Add(currentError.Message); types.Add(currentError.Type); currentError = currentError.InnerError; } writer.AppendJsonParamConditional("exception", _exceptionConverter.Convert(log), screen: true); writer.AppendJsonParamConditional("exception.message", messages, screen: true); writer.AppendJsonParamConditional("exception.type", types, screen: true); } writer.AppendJsonEndObject(withComma: false); } return(writer.GetStringBuilder().Append("\n").ToString()); }
public override bool Write(LoggingEvent data) { if (data.Level < _logLevel) { return(true); } string line = _templateConverter.Convert(data) ?? ""; ConsoleColor requestedColor = GetColorByLogLevel(data.Level); lock (_syncObj) { if (requestedColor == _defaultColor) { Console.Out.WriteLine(line); Console.Out.Flush(); } else { Console.ForegroundColor = requestedColor; Console.Out.WriteLine(line); Console.Out.Flush(); Console.ForegroundColor = _defaultColor; } } return(true); }
public override bool Write(LoggingEvent data) { if (_isDisposed) { if (_errorTracker.CanWriteErrorGetAndUpdate()) { _thisClassSupportLogger.Error("Attempt to write LoggingEvent in Disposed state"); } return(false); } if (data.Level < _logLevel) { return(true); } var line = _templateConverter.Convert(data) ?? ""; // lock именно здесь так как в зависимости от сообщения может генериться разное имя файла // это не страшно, но на это имя файла может открыться writer в другой файл - а это уже конец lock (_lockWrite) { if (_isDisposed) { return(false); } if (!RefreshWriter(data)) { return(false); } try { _fileStreamAndWriter.WriteLine(line); if (data.Level >= LogLevel.Info) { _fileStreamAndWriter.Flush(toDisk: data.Level >= LogLevel.Fatal); } return(true); } catch (IOException ex) { if (_errorTracker.CanWriteErrorGetAndUpdate()) { _thisClassSupportLogger.Error(ex, "Error writing LoggingEvent to file: " + _lastFilename); } } catch (Exception ex) { _thisClassSupportLogger.Error(ex, "Fatal error while writing LoggingEvent to file: " + _lastFilename); throw new LoggerFileWriteException("Fatal error while writing LoggingEvent to file: " + _lastFilename, ex); } } return(false); }
protected bool RefreshWriter(LoggingEvent data) { var filename = _isNeedFileRotate ? _filenameConverter.Convert(data) : _rawFilename; if (filename != _lastFilename || !_fileStreamAndWriter.IsInitialized) { try { _fileStreamAndWriter = _filePool.RequestFile(filename, _fileStreamAndWriter, _lastFilename); _lastFilename = filename; return(true); } catch (UnauthorizedAccessException ex) { if (_errorTracker.CanWriteErrorGetAndUpdate()) { _thisClassSupportLogger.Error(ex, "File opening error: " + filename); } } catch (SecurityException ex) { if (_errorTracker.CanWriteErrorGetAndUpdate()) { _thisClassSupportLogger.Error(ex, "File opening error: " + filename); } } catch (PathTooLongException ex) { _thisClassSupportLogger.Error(ex, "Fatal file opening error: " + filename); throw new LoggerFileWriteException("Fatal file opening error: " + filename, ex); } catch (IOException ex) { if (_errorTracker.CanWriteErrorGetAndUpdate()) { _thisClassSupportLogger.Error(ex, "File opening error: " + filename); } } return(false); } return(true); }
public bool Write(LoggingEvent data) { if (_isDisposed) { _thisClassSupportLogger.Error("Attempt to write LoggingEvent in Disposed state"); return(false); } string pattern = _templateConverter.Convert(data); ILoggingEventWriter curWriter = null; if (pattern == null || !_match.TryGetValue(pattern, out curWriter)) { curWriter = _default; } if (curWriter != null) { return(curWriter.Write(data)); } return(true); }
public override bool Write(LoggingEvent data) { if (_isDisposed) { return(false); } lock (_lockWrite) { if (_isDisposed) { return(false); } if (!RefreshWriter(data)) { return(false); } var line = _templateConverter.Convert(data); try { _writer.WriteLine(line); _writer.Flush(); _fileStream.Flush(true); return(true); } catch (Exception) { } } return(false); }
private SqlCommand CreateCommand(LoggingEvent data) { var cmd = new SqlCommand(_storeProcedureName, _conn) { CommandType = CommandType.StoredProcedure }; AddParameter(cmd, SqlDbType.DateTime, 0, false, "@Date", data.Date); AddParameter(cmd, SqlDbType.TinyInt, 0, false, "@Level", (byte)data.Level.Level); AddParameter(cmd, SqlDbType.NVarChar, 0, true, "@Context", data.Context); AddParameter(cmd, SqlDbType.NVarChar, 255, true, "@Class", data.Clazz); AddParameter(cmd, SqlDbType.NVarChar, 255, true, "@Method", data.Method); AddParameter(cmd, SqlDbType.NVarChar, 0, true, "@FilePath", data.FilePath); AddParameter(cmd, SqlDbType.Int, 0, true, "@LineNumber", data.LineNumber < 0 ? (object)null : data.LineNumber); AddParameter(cmd, SqlDbType.NVarChar, 0, false, "@Message", data.Message); AddParameter(cmd, SqlDbType.NVarChar, 0, true, "@Exception", data.Exception != null ? _exceptionConverter.Convert(data) : null); AddParameter(cmd, SqlDbType.NVarChar, 0, true, "@StackSources", data.StackSources != null ? _sourcesConverter.Convert(data) : null); AddParameter(cmd, SqlDbType.NVarChar, 0, true, "@Namespace", data.Namespace); AddParameter(cmd, SqlDbType.NVarChar, 0, true, "@Assembly", data.Assembly); AddParameter(cmd, SqlDbType.NVarChar, 255, true, "@MachineName", data.MachineName); AddParameter(cmd, SqlDbType.NVarChar, 64, true, "@MachineIp", data.MachineIpAddress); AddParameter(cmd, SqlDbType.NVarChar, 255, true, "@ProcessName", data.ProcessName); AddParameter(cmd, SqlDbType.Int, 0, true, "@ProcessId", data.ProcessId < 0 ? (object)null : data.ProcessId); return(cmd); }