コード例 #1
0
ファイル: TraceLog.cs プロジェクト: ogazitt/product
        public static void WriteLine(string message, string level)
        {
            // create a json record
            var record = new TraceRecord()
            {
                Deployment = HostEnvironment.DeploymentName,
                Role = HostEnvironment.AzureRoleName,
                LogLevel = level,
                Session = TraceLog.Session,
                Message = message,
                Timestamp = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff")
            };
            var json = JsonSerializer.Serialize(record) + "\n";
            byte[] buffer = UTF8Encoding.UTF8.GetBytes(json);

            lock (writeLock)
            {
                // enter a retry loop for sending the buffer on the splunk socket
                int retryCount = 2;
                while (retryCount > 0)
                {
                    try
                    {
                        TraceSocket.Send(buffer);
                        // success - terminate the enclosing retry loop
                        break;
                    }
                    catch (Exception ex)
                    {
                        TraceFile.WriteLine(ex.Message, "Error");
                        TraceFile.WriteLine(ex.StackTrace, "Error");

                        // the socket wasn't opened or written to correctly - try to start with a new socket in the next iteration of the retry loop
                        if (traceSocket != null)
                            traceSocket.Dispose();
                        traceSocket = null;
                        retryCount--;
                    }
                }

                // multiple socket failures - log to a file as a last resort
                if (retryCount == 0)
                    TraceFile.WriteLine(message, level);
            }
        }
コード例 #2
0
ファイル: TraceLog.cs プロジェクト: ogazitt/product
        public static void WriteLine(string message, string level)
        {
            // create a json record
            var record = new TraceRecord()
            {
                Deployment = HostEnvironment.DeploymentName,
                Role = HostEnvironment.AzureRoleName,
                LogLevel = level,
                Message = message,
                Session = TraceLog.Session,
                Timestamp = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff")
            };
            var json = JsonSerializer.Serialize(record);

            lock (writeLock)
            {
                // enter a retry loop writing the record to the trace file
                int retryCount = 2;
                while (retryCount > 0)
                {
                    try
                    {
                        if (traceFilename == null)
                        {
                            // create the file
                            using (var stream = File.Create(TraceFilename))
                            using (var writer = new StreamWriter(stream))
                            {
                                // log the file creation
                                var createRecord = new TraceRecord()
                                {
                                    Deployment = HostEnvironment.DeploymentName,
                                    Role = HostEnvironment.AzureRoleName,
                                    LogLevel = TraceLog.LevelText(TraceLog.LogLevel.Info),
                                    Message = "Created new trace file " + TraceFilename,
                                    Session = TraceLog.Session,
                                    Timestamp = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff")
                                };
                                var createJson = JsonSerializer.Serialize(createRecord);
                                writer.WriteLine(createJson);
                                writer.Flush();
                            }
                        }

                        // open the file
                        using (var stream = File.Open(TraceFilename, FileMode.Append, FileAccess.Write, FileShare.Read))
                        using (var writer = new StreamWriter(stream))
                        {
                            writer.WriteLine(json);
                            writer.Flush();

                            // reset the trace filename if it exceeds the maximum file size
                            if (writer.BaseStream.Position > MaxFileSize)
                                traceFilename = null;
                        }

                        // success - terminate the enclosing retry loop
                        break;
                    }
                    catch (Exception)
                    {
                        // the file wasn't opened or written to correctly - try to start with a new file in the next iteration of the retry loop
                        traceFilename = null;
                        retryCount--;
                    }
                }
            }
        }