コード例 #1
0
ファイル: ConfigUtilities.cs プロジェクト: zfq308/orleans
        internal static string TraceConfigurationToString(ITraceConfiguration config)
        {
            var sb = new StringBuilder();

            sb.Append("   Tracing: ").AppendLine();
            sb.Append("     Default Trace Level: ").Append(config.DefaultTraceLevel).AppendLine();
            if (config.TraceLevelOverrides.Count > 0)
            {
                sb.Append("     TraceLevelOverrides:").AppendLine();
                foreach (var over in config.TraceLevelOverrides)
                {
                    sb.Append("         ").Append(over.Item1).Append(" ==> ").Append(over.Item2.ToString()).AppendLine();
                }
            }
            else
            {
                sb.Append("     TraceLevelOverrides: None").AppendLine();
            }
            sb.Append("     Trace to Console: ").Append(config.TraceToConsole).AppendLine();
            sb.Append("     Trace File Name: ").Append(string.IsNullOrWhiteSpace(config.TraceFileName) ? "" : Path.GetFullPath(config.TraceFileName)).AppendLine();
            sb.Append("     LargeMessageWarningThreshold: ").Append(config.LargeMessageWarningThreshold).AppendLine();
            sb.Append("     PropagateActivityId: ").Append(config.PropagateActivityId).AppendLine();
            sb.Append("     BulkMessageLimit: ").Append(config.BulkMessageLimit).AppendLine();
            return(sb.ToString());
        }
コード例 #2
0
        internal static string TraceConfigurationToString(ITraceConfiguration config)
        {
            var sb = new StringBuilder();

            sb.Append("   Tracing: ").AppendLine();
            sb.Append("     Trace File Name: ").Append(string.IsNullOrWhiteSpace(config.TraceFileName) ? "" : Path.GetFullPath(config.TraceFileName)).AppendLine();
            return(sb.ToString());
        }
コード例 #3
0
        static Trace()
        {
            configuration = new TraceConfiguration();

            spanPool = new UnlimitedLazyPool <Span>(
                () => new Span
            {
                Annotations = new Dictionary <string, string>()
            });
        }
コード例 #4
0
ファイル: LogManager.cs プロジェクト: vansha/orleans
        public static void Initialize(ITraceConfiguration config, bool configChange = false)
        {
            if (config == null)
            {
                throw new ArgumentNullException("config", "No logger config data provided.");
            }

            lock (lockable)
            {
                if (IsInitialized && !configChange)
                {
                    return;                                 // Already initialized
                }
                loggerStoreInternCache = new Interner <string, LoggerImpl>(LOGGER_INTERN_CACHE_INITIAL_SIZE, loggerInternCacheCleanupInterval);

                BulkMessageLimit  = config.BulkMessageLimit;
                runtimeTraceLevel = config.DefaultTraceLevel;
                appTraceLevel     = config.DefaultTraceLevel;
                SetTraceLevelOverrides(config.TraceLevelOverrides);
                RequestContext.PropagateActivityId = config.PropagateActivityId;
                defaultModificationCounter++;
                if (configChange)
                {
                    return; // code below should only apply during creation
                }

                /*
                 * Encountered a null reference exception during load testing using the test adapter
                 * The issue appears to be related to the closing of the trace listeners, commenting out the following lines appears to "fix" the issue
                 * R.E. 10/12/2010
                 *
                 * foreach (TraceListener l in Trace.Listeners)
                 * {
                 *  l.Close();
                 * }
                 * Trace.Listeners.Clear();
                 *
                 * // We need the default listener so that Debug.Assert and Debug.Fail work properly
                 * Trace.Listeners.Add(new DefaultTraceListener());
                 */

                InitializeLegacyTraceTelemetryConsumersConfiguration(config, LogConsumers.OfType <TelemetryManager>().FirstOrDefault() ?? new TelemetryManager());

                IsInitialized = true;
            }
        }
コード例 #5
0
ファイル: LogManager.cs プロジェクト: vansha/orleans
        /// <summary>
        /// Forward traces to the telemetry abstractions based on the legacy configuration.
        /// This functionality will be opt-in in the future, as we will not connect our tracing to the telemetry producer by default.
        /// </summary>
        /// <param name="traceConfiguration">The legacy trace configuration.</param>
        /// <param name="telemetryManager">The <see cref="TelemetryManager" /> to use.</param>
        private static void InitializeLegacyTraceTelemetryConsumersConfiguration(ITraceConfiguration traceConfiguration, TelemetryManager telemetryManager)
        {
            if (traceConfiguration == null)
            {
                return;
            }

            var newConsumers = new List <ITelemetryConsumer>();

            if (traceConfiguration.TraceToConsole && !telemetryManager.TelemetryConsumers.OfType <ConsoleTelemetryConsumer>().Any())
            {
                newConsumers.Add(new ConsoleTelemetryConsumer());
            }

            if (!string.IsNullOrEmpty(traceConfiguration.TraceFileName))
            {
                try
                {
                    if (!telemetryManager.TelemetryConsumers.OfType <FileTelemetryConsumer>().Any())
                    {
                        newConsumers.Add(new FileTelemetryConsumer(traceConfiguration.TraceFileName));
                    }
                }
                catch (Exception exc)
                {
                    Trace.Listeners.Add(new DefaultTraceListener());
                    Trace.TraceError("Error opening trace file {0} -- Using DefaultTraceListener instead -- Exception={1}", traceConfiguration.TraceFileName, exc);
                }
            }

            if (Trace.Listeners.Count > 0)
            {
                if (!telemetryManager.TelemetryConsumers.OfType <TraceTelemetryConsumer>().Any())
                {
                    newConsumers.Add(new TraceTelemetryConsumer());
                }
            }

            if (newConsumers.Count > 0)
            {
                telemetryManager.AddConsumers(newConsumers);
                LogConsumers.Add(new TelemetryLogConsumer(telemetryManager));
            }
        }
コード例 #6
0
ファイル: SpanBuilder.cs プロジェクト: vostok-archives/core
        public SpanBuilder(
            ITraceReporter traceReporter,
            PoolHandle <Span> spanHandle,
            TraceContextScope contextScope,
            ITraceConfiguration configuration)
        {
            this.traceReporter = traceReporter;
            this.spanHandle    = spanHandle;
            this.contextScope  = contextScope;
            this.configuration = configuration;

            stopwatch        = Stopwatch.StartNew();
            parentSpan       = Context.Properties.Get <Span>(spanContextKey);
            spanContextScope = Context.Properties.Use(spanContextKey, Span);

            InitializeSpan();
            EnrichSpanWithInheritedFields();
            EnrichSpanWithContext();
        }
コード例 #7
0
ファイル: ConfigUtilities.cs プロジェクト: supwar/orleans
        internal static void SetTraceFileName(ITraceConfiguration config, string nodeName, DateTime timestamp)
        {
            const string dateFormat = "yyyy-MM-dd-HH.mm.ss.fffZ";

            if (config == null)
            {
                throw new ArgumentNullException("config");
            }

            if (config.TraceFilePattern == null ||
                string.IsNullOrWhiteSpace(config.TraceFilePattern) ||
                config.TraceFilePattern.Equals("false", StringComparison.OrdinalIgnoreCase) ||
                config.TraceFilePattern.Equals("none", StringComparison.OrdinalIgnoreCase))
            {
                config.TraceFileName = null;
            }
            else if (string.Empty.Equals(config.TraceFileName))
            {
                config.TraceFileName = null; // normalize
            }
            else
            {
                string   traceFileDir  = null;
                string   traceFileName = Path.GetFileName(config.TraceFilePattern);
                string[] dirLocations  = { Path.GetDirectoryName(config.TraceFilePattern), "appdir", "." };
                foreach (var d in dirLocations)
                {
                    if (!Directory.Exists(d))
                    {
                        continue;
                    }

                    traceFileDir = d;
                    break;
                }
                if (traceFileDir != null && !Directory.Exists(traceFileDir))
                {
                    config.TraceFilePattern = Path.Combine(traceFileDir, traceFileName);
                }
                config.TraceFileName = String.Format(config.TraceFilePattern, nodeName, timestamp.ToUniversalTime().ToString(dateFormat), Dns.GetHostName());
            }
        }
コード例 #8
0
        public static Serilog.ILogger CreateLogger(ITraceConfiguration settings, string fileName = null, string tableName = null, ICollection <DataColumn> additionalColumns = null, bool?logToFile = null, bool?logToSql = null)
        {
            var logsPath = string.IsNullOrEmpty(Environment.GetEnvironmentVariable("WEBSITE_SITE_NAME"))
                ? Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)
                : Path.Combine(Environment.GetEnvironmentVariable("HOME"), "LogFiles");

            var logger = new LoggerConfiguration()
                         .Enrich.With <HttpRequestIdEnricher>()
                         .Enrich.With <UserNameEnricher>()
                         .Enrich.With <EventIdEnricher>();

            if (logToFile ?? settings.LogToFile && !string.IsNullOrEmpty(fileName))
            {
                logger = logger.WriteTo.RollingFile(Path.Combine(logsPath, fileName), fileSizeLimitBytes: null);
            }

            if (logToSql ?? Convert.ToBoolean(settings.LogToSql) &&
                !string.IsNullOrEmpty(settings.LoggingSqlServerConnectionString) &&
                !string.IsNullOrEmpty(tableName))
            {
                var columnOptions = new ColumnOptions
                {
                    AdditionalDataColumns = new Collection <DataColumn>
                    {
                        new DataColumn {
                            DataType = typeof(string), ColumnName = "UserName"
                        },
                        new DataColumn {
                            DataType = typeof(string), ColumnName = "HttpRequestId"
                        },
                        new DataColumn {
                            DataType = typeof(int), ColumnName = "EventId"
                        }
                    }
                    .Union(additionalColumns ?? Enumerable.Empty <DataColumn>())
                    .ToList()
                };
                logger = logger.WriteTo
                         .MSSqlServer(settings.LoggingSqlServerConnectionString, tableName, columnOptions: columnOptions);
            }
            return(logger.CreateLogger());
        }
コード例 #9
0
ファイル: ConfigUtilities.cs プロジェクト: zfq308/orleans
        internal static void ParseTracing(ITraceConfiguration config, XmlElement root, string nodeName)
        {
            if (root.HasAttribute("DefaultTraceLevel"))
            {
                config.DefaultTraceLevel = ParseSeverity(root.GetAttribute("DefaultTraceLevel"),
                                                         "Invalid trace level DefaultTraceLevel attribute value on Tracing element for " + nodeName);
            }
            if (root.HasAttribute("TraceToConsole"))
            {
                config.TraceToConsole = ParseBool(root.GetAttribute("TraceToConsole"),
                                                  "Invalid boolean value for TraceToConsole attribute on Tracing element for " + nodeName);
            }
            if (root.HasAttribute("TraceToFile"))
            {
                config.TraceFilePattern = root.GetAttribute("TraceToFile");
            }
            if (root.HasAttribute("LargeMessageWarningThreshold"))
            {
                config.LargeMessageWarningThreshold = ParseInt(root.GetAttribute("LargeMessageWarningThreshold"),
                                                               "Invalid boolean value for LargeMessageWarningThresholdattribute on Tracing element for " + nodeName);
            }
            if (root.HasAttribute("PropagateActivityId"))
            {
                config.PropagateActivityId = ParseBool(root.GetAttribute("PropagateActivityId"),
                                                       "Invalid boolean value for PropagateActivityId attribute on Tracing element for " + nodeName);
            }
            if (root.HasAttribute("BulkMessageLimit"))
            {
                config.BulkMessageLimit = ParseInt(root.GetAttribute("BulkMessageLimit"),
                                                   "Invalid int value for BulkMessageLimit attribute on Tracing element for " + nodeName);
            }

            foreach (XmlNode node in root.ChildNodes)
            {
                var grandchild = node as XmlElement;
                if (grandchild == null)
                {
                    continue;
                }

                if (grandchild.LocalName.Equals("TraceLevelOverride") && grandchild.HasAttribute("TraceLevel") && grandchild.HasAttribute("LogPrefix"))
                {
                    config.TraceLevelOverrides.Add(new Tuple <string, Severity>(grandchild.GetAttribute("LogPrefix"),
                                                                                ParseSeverity(grandchild.GetAttribute("TraceLevel"),
                                                                                              "Invalid trace level TraceLevel attribute value on TraceLevelOverride element for " + nodeName + " prefix " +
                                                                                              grandchild.GetAttribute("LogPrefix"))));
                }
                else if (grandchild.LocalName.Equals("LogConsumer"))
                {
                    var      className = grandchild.InnerText;
                    Assembly assembly  = null;
                    try
                    {
                        int pos = className.IndexOf(',');
                        if (pos > 0)
                        {
                            var assemblyName = className.Substring(pos + 1).Trim();
                            className = className.Substring(0, pos).Trim();
                            assembly  = Assembly.Load(new AssemblyName(assemblyName));
                        }
                        else
                        {
                            assembly = typeof(ConfigUtilities).GetTypeInfo().Assembly;
                        }
                        var pluginType = assembly.GetType(className);
                        if (pluginType == null)
                        {
                            throw new TypeLoadException("Cannot locate plugin class " + className + " in assembly " + assembly.FullName);
                        }
                        var plugin = Activator.CreateInstance(pluginType);

                        if (plugin is ILogConsumer)
                        {
                            TraceLogger.LogConsumers.Add(plugin as ILogConsumer);
                        }
                        else
                        {
                            throw new InvalidCastException("LogConsumer class " + className + " must implement Orleans.ILogConsumer interface");
                        }
                    }
                    catch (Exception exc)
                    {
                        throw new TypeLoadException("Cannot load LogConsumer class " + className + " from assembly " + assembly + " - Error=" + exc);
                    }
                }
            }

            SetTraceFileName(config, nodeName, DateTime.UtcNow);
        }
コード例 #10
0
ファイル: TraceLogger.cs プロジェクト: vnisor/orleans
        public static void Initialize(ITraceConfiguration config, bool configChange = false)
        {
            lock (lockable)
            {
                if (IsInitialized && !configChange)
                {
                    return;                                 // Already initialized
                }
                loggerStoreInternCache = new Interner <string, TraceLogger>(LOGGER_INTERN_CACHE_INITIAL_SIZE, loggerInternCacheCleanupInterval);

                BulkMessageLimit  = config.BulkMessageLimit;
                runtimeTraceLevel = config.DefaultTraceLevel;
                appTraceLevel     = config.DefaultTraceLevel;
                SetTraceLevelOverrides(config.TraceLevelOverrides);
                Message.WriteMessagingTraces            = config.WriteMessagingTraces;
                Message.LargeMessageSizeThreshold       = config.LargeMessageWarningThreshold;
                SerializationManager.LARGE_OBJECT_LIMIT = config.LargeMessageWarningThreshold;
                RequestContext.PropagateActivityId      = config.PropagateActivityId;
                defaultModificationCounter++;
                if (configChange)
                {
                    return; // code below should only apply during creation
                }

                /*
                 * Encountered a null reference exception during load testing using the test adapter
                 * The issue appears to be related to the closing of the trace listeners, commenting out the following lines appears to "fix" the issue
                 * R.E. 10/12/2010
                 *
                 * foreach (TraceListener l in Trace.Listeners)
                 * {
                 *  l.Close();
                 * }
                 * Trace.Listeners.Clear();
                 *
                 * // We need the default listener so that Debug.Assert and Debug.Fail work properly
                 * Trace.Listeners.Add(new DefaultTraceListener());
                 */
                if (config.TraceToConsole)
                {
                    bool containsConsoleListener = false;
                    foreach (TraceListener l in Trace.Listeners)
                    {
                        if (l.GetType() != typeof(ConsoleTraceListener))
                        {
                            continue;
                        }

                        containsConsoleListener = true;
                        break;
                    }
                    if (!containsConsoleListener)
                    {
                        LogConsumers.Add(new LogWriterToConsole());
                    }
                }
                if (!string.IsNullOrEmpty(config.TraceFileName))
                {
                    try
                    {
                        logOutputFile = new FileInfo(config.TraceFileName);
                        var l = new LogWriterToFile(logOutputFile);
                        LogConsumers.Add(l);
                    }
                    catch (Exception exc)
                    {
                        Trace.Listeners.Add(new DefaultTraceListener());
                        Trace.TraceError("Error opening trace file {0} -- Using DefaultTraceListener instead -- Exception={1}", logOutputFile, exc);
                    }
                }

                if (Trace.Listeners.Count > 0)
                {
                    // Plumb in log consumer to write to Trace listeners
                    var traceLogConsumer = new LogWriterToTrace();
                    LogConsumers.Add(traceLogConsumer);
                }

                IsInitialized = true;
            }
        }
コード例 #11
0
ファイル: LogManager.cs プロジェクト: wyxy2005/orleans
        public static void Initialize(ITraceConfiguration config, bool configChange = false)
        {
            if (config == null)
            {
                throw new ArgumentNullException("config", "No logger config data provided.");
            }

            lock (lockable)
            {
                if (IsInitialized && !configChange)
                {
                    return;                                 // Already initialized
                }
                loggerStoreInternCache = new Interner <string, LoggerImpl>(LOGGER_INTERN_CACHE_INITIAL_SIZE, loggerInternCacheCleanupInterval);

                BulkMessageLimit  = config.BulkMessageLimit;
                runtimeTraceLevel = config.DefaultTraceLevel;
                appTraceLevel     = config.DefaultTraceLevel;
                SetTraceLevelOverrides(config.TraceLevelOverrides);
                Message.LargeMessageSizeThreshold       = config.LargeMessageWarningThreshold;
                SerializationManager.LARGE_OBJECT_LIMIT = config.LargeMessageWarningThreshold;
                RequestContext.PropagateActivityId      = config.PropagateActivityId;
                defaultModificationCounter++;
                if (configChange)
                {
                    return; // code below should only apply during creation
                }

                /*
                 * Encountered a null reference exception during load testing using the test adapter
                 * The issue appears to be related to the closing of the trace listeners, commenting out the following lines appears to "fix" the issue
                 * R.E. 10/12/2010
                 *
                 * foreach (TraceListener l in Trace.Listeners)
                 * {
                 *  l.Close();
                 * }
                 * Trace.Listeners.Clear();
                 *
                 * // We need the default listener so that Debug.Assert and Debug.Fail work properly
                 * Trace.Listeners.Add(new DefaultTraceListener());
                 */
                if (config.TraceToConsole)
                {
                    if (!TelemetryConsumers.OfType <ConsoleTelemetryConsumer>().Any())
                    {
                        TelemetryConsumers.Add(new ConsoleTelemetryConsumer());
                    }
                }
                if (!string.IsNullOrEmpty(config.TraceFileName))
                {
                    try
                    {
                        if (!TelemetryConsumers.OfType <FileTelemetryConsumer>().Any())
                        {
                            TelemetryConsumers.Add(new FileTelemetryConsumer(config.TraceFileName));
                        }
                    }
                    catch (Exception exc)
                    {
                        Trace.Listeners.Add(new DefaultTraceListener());
                        Trace.TraceError("Error opening trace file {0} -- Using DefaultTraceListener instead -- Exception={1}", config.TraceFileName, exc);
                    }
                }

                if (Trace.Listeners.Count > 0)
                {
                    if (!TelemetryConsumers.OfType <TraceTelemetryConsumer>().Any())
                    {
                        TelemetryConsumers.Add(new TraceTelemetryConsumer());
                    }
                }

                IsInitialized = true;
            }
        }
コード例 #12
0
 internal static void ParseTracing(ITraceConfiguration config, XmlElement root, string nodeName)
 {
     SetTraceFileName(config, nodeName, DateTime.UtcNow);
 }