示例#1
0
        /// <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());
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
        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);
        }
示例#7
0
        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);
        }