Esempio n. 1
0
        /// <summary />
        protected virtual void Log(string level, string message, string container, Exception exception, IDictionary <string, object> additionalData, IDictionary <string, object> metaData)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(container))
                {
                    var          stackTrace  = new StackTrace();
                    StackFrame[] stackFrames = stackTrace.GetFrames();
                    if (stackFrames != null)
                    {
                        foreach (StackFrame frame in stackFrames)
                        {
                            MethodBase method = frame.GetMethod();
                            if (method.ReflectedType == null)
                            {
                                continue;
                            }

                            try
                            {
                                bool found = false;
                                if (!ExclusionNamespaces.Any(@namespace => method.ReflectedType.FullName.StartsWith(@namespace)))
                                {
                                    container = string.Format("{0}.{1}", method.ReflectedType.FullName, method.Name);
                                    found     = true;
                                }
                                if (found)
                                {
                                    break;
                                }
                            }
                            catch
                            {
                                // Just move on
                            }
                        }
                    }
                }
            }
            catch
            {
                // Just move on
            }

            var logInformation = new LogInformation
            {
                Level          = level,
                Message        = message,
                Container      = container,
                AdditionalData = additionalData
            };

            try
            {
                logInformation.Exception = JsonConvert.SerializeObject(exception, DefaultJsonSerializerSettings);
            }
            catch (JsonSerializationException) { }
            try
            {
                logInformation.MetaData = JsonConvert.SerializeObject(metaData, DefaultJsonSerializerSettings);
            }
            catch (JsonSerializationException) { }
            try
            {
                logInformation.CorrolationId = CorrelationIdHelper.GetCorrelationId();
            }
            catch (NullReferenceException)
            {
                logInformation.CorrolationId = Guid.Empty;
            }

            Log(() => PersistLog(logInformation), logInformation.Level, logInformation.Container);
        }
Esempio n. 2
0
 /// <summary>
 /// Persists (or saves) the provided <paramref name="logInformation"></paramref> to the database
 /// </summary>
 /// <param name="logInformation">The <see cref="LogInformation"/> holding all the information you want to persist (save) to the database.</param>
 protected abstract void PersistLog(LogInformation logInformation);
Esempio n. 3
0
        /// <summary>
        /// Persists (or saves) the provided <paramref name="logInformation"></paramref> to the database
        /// </summary>
        /// <param name="logInformation">The <see cref="LogInformation"/> holding all the information you want to persist (save) to the database.</param>
        protected override void PersistLog(LogInformation logInformation)
        {
            try
            {
                using (IDbConnection dbConnection = GetDbConnection(GetSqlConnectionString()))
                {
                    dbConnection.Open();
                    IDbCommand command = GetCommand();
                    command.Connection  = dbConnection;
                    command.CommandType = CommandType.Text;

                    using (IDbTransaction dbTransaction = GetWriteTransaction(dbConnection))
                    {
                        command.Transaction = dbTransaction;

                        command.CommandText = GetInsertStatement();

                        IDbDataParameter raisedParameter = command.CreateParameter();
                        raisedParameter.DbType        = DbType.DateTime;
                        raisedParameter.Direction     = ParameterDirection.Input;
                        raisedParameter.ParameterName = "@Raised";
                        raisedParameter.Value         = logInformation.Raised;
                        command.Parameters.Add(raisedParameter);

                        IDbDataParameter moduleParameter = command.CreateParameter();
                        moduleParameter.DbType        = DbType.String;
                        moduleParameter.Direction     = ParameterDirection.Input;
                        moduleParameter.ParameterName = "@Module";
                        moduleParameter.Value         = LoggerSettings.ModuleName;
                        command.Parameters.Add(moduleParameter);

                        IDbDataParameter instanceParameter = command.CreateParameter();
                        instanceParameter.DbType        = DbType.String;
                        instanceParameter.Direction     = ParameterDirection.Input;
                        instanceParameter.ParameterName = "@Instance";
                        instanceParameter.Value         = LoggerSettings.Instance;
                        command.Parameters.Add(instanceParameter);

                        IDbDataParameter environmentParameter = command.CreateParameter();
                        environmentParameter.DbType        = DbType.String;
                        environmentParameter.Direction     = ParameterDirection.Input;
                        environmentParameter.ParameterName = "@Environment";
                        environmentParameter.Value         = LoggerSettings.Environment;
                        command.Parameters.Add(environmentParameter);

                        IDbDataParameter environmentInstanceParameter = command.CreateParameter();
                        environmentInstanceParameter.DbType        = DbType.String;
                        environmentInstanceParameter.Direction     = ParameterDirection.Input;
                        environmentInstanceParameter.ParameterName = "@EnvironmentInstance";
                        environmentInstanceParameter.Value         = LoggerSettings.EnvironmentInstance;
                        command.Parameters.Add(environmentInstanceParameter);

                        IDbDataParameter correlationIdParameter = command.CreateParameter();
                        correlationIdParameter.DbType        = DbType.Guid;
                        correlationIdParameter.Direction     = ParameterDirection.Input;
                        correlationIdParameter.ParameterName = "@CorrelationId";
                        correlationIdParameter.Value         = logInformation.CorrolationId;
                        command.Parameters.Add(correlationIdParameter);

                        IDbDataParameter levelParameter = command.CreateParameter();
                        levelParameter.DbType        = DbType.String;
                        levelParameter.Direction     = ParameterDirection.Input;
                        levelParameter.ParameterName = "@Level";
                        levelParameter.Value         = logInformation.Level ?? (object)DBNull.Value;
                        command.Parameters.Add(levelParameter);

                        IDbDataParameter messageParameter = command.CreateParameter();
                        messageParameter.DbType        = DbType.String;
                        messageParameter.Direction     = ParameterDirection.Input;
                        messageParameter.ParameterName = "@Message";
                        messageParameter.Value         = logInformation.Message ?? (object)DBNull.Value;
                        command.Parameters.Add(messageParameter);

                        IDbDataParameter containerParameter = command.CreateParameter();
                        containerParameter.DbType        = DbType.String;
                        containerParameter.Direction     = ParameterDirection.Input;
                        containerParameter.ParameterName = "@Container";
                        containerParameter.Value         = logInformation.Container ?? (object)DBNull.Value;
                        command.Parameters.Add(containerParameter);

                        IDbDataParameter exceptionParameter = command.CreateParameter();
                        exceptionParameter.DbType        = DbType.String;
                        exceptionParameter.Direction     = ParameterDirection.Input;
                        exceptionParameter.ParameterName = "@Exception";
                        exceptionParameter.Value         = logInformation.Exception ?? (object)DBNull.Value;
                        command.Parameters.Add(exceptionParameter);

                        if (logInformation.AdditionalData != null)
                        {
                            foreach (string key in logInformation.AdditionalData.Keys)
                            {
                                object           value = logInformation.AdditionalData[key];
                                IDbDataParameter additionalDataParameter = command.CreateParameter();
                                additionalDataParameter.DbType        = DbType.String;
                                additionalDataParameter.Direction     = ParameterDirection.Input;
                                additionalDataParameter.ParameterName = string.Format("@{0}", key);
                                additionalDataParameter.Value         = value != null?JsonConvert.SerializeObject(value) : (object)DBNull.Value;

                                command.Parameters.Add(additionalDataParameter);

                                string tableName = LoggerSettings.SqlDatabaseTableName;
                                command.CommandText = command.CommandText
                                                      .Replace(", " + tableName + ".MetaData", string.Format(", " + tableName + ".MetaData, " + tableName + ".{0}", key))
                                                      .Replace(", @MetaData", string.Format(", @MetaData, @{0}", key));
                            }
                        }

                        IDbDataParameter metaDataParameter = command.CreateParameter();
                        metaDataParameter.DbType        = DbType.String;
                        metaDataParameter.Direction     = ParameterDirection.Input;
                        metaDataParameter.ParameterName = "@MetaData";
                        metaDataParameter.Value         = logInformation.MetaData ?? (object)DBNull.Value;
                        command.Parameters.Add(metaDataParameter);

                        command.ExecuteNonQuery();

                        dbTransaction.Commit();
                    }
                }
            }
            catch (Exception exception)
            {
                Trace.TraceError("Persisting log failed with the following exception:\r\n{0}\r\n{1}", exception.Message, exception.StackTrace);
            }
        }