Skip to content

Commit 10b349e

Browse files
committed
Refactored VTEXSplunkLoggerFormatter and Startup classes to set formatter setup to inside the constructor and also improved code documentation
#14 #15
1 parent 8e34c38 commit 10b349e

File tree

2 files changed

+96
-43
lines changed

2 files changed

+96
-43
lines changed

src/SampleWebAPI/Logging/VTEXSplunkLoggerFormatter.cs

Lines changed: 72 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,45 @@
11
using System;
22
using System.Linq;
3+
using System.Net.Http;
4+
using System.Threading;
35
using Microsoft.Extensions.Logging;
46
using Splunk;
57

68
namespace VTEX.SampleWebAPI.Logging
79
{
10+
/// <summary>
11+
/// This class contains all methods to format a Log event into a VTEX standard text.
12+
/// </summary>
13+
/// <remarks>
14+
/// At our Splunk environment at VTEX we expect certain standard of text to be processed and
15+
/// we also have field extraction rules to be applied.
16+
/// Thats the reason why we use a custom LoggerFormmater.
17+
/// </remarks>
818
public class VTEXSplunkLoggerFormatter : ILoggerFormatter
919
{
1020
const string DateTimeFormat = "yyyy-MM-ddTHH:mm:ss.fffZ";
1121

1222
readonly string appVersion;
1323
readonly string host;
1424

15-
public VTEXSplunkLoggerFormatter(string appVersion, string host)
25+
/// <summary>
26+
/// Initializes a new instance of the <see cref="T:VTEX.SampleWebAPI.Logging.VTEXSplunkLoggerFormatter"/> class.
27+
/// </summary>
28+
public VTEXSplunkLoggerFormatter()
1629
{
17-
this.appVersion = appVersion;
18-
this.host = host;
30+
appVersion = Microsoft.Extensions.PlatformAbstractions.PlatformServices.Default.Application.ApplicationVersion;
31+
host = GetHost();
1932
}
2033

34+
/// <summary>
35+
/// Format the specified logLevel, eventId, state and exception into log string entry.
36+
/// </summary>
37+
/// <returns>Formatted log string.</returns>
38+
/// <param name="logLevel">Log level.</param>
39+
/// <param name="eventId">Event identifier.</param>
40+
/// <param name="state">Log object state.</param>
41+
/// <param name="exception">Log exception.</param>
42+
/// <typeparam name="T">Log entry.</typeparam>
2143
public string Format<T>(LogLevel logLevel, EventId eventId, T state, Exception exception)
2244
{
2345
string log;
@@ -46,11 +68,53 @@ public string Format<T>(LogLevel logLevel, EventId eventId, T state, Exception e
4668
return log;
4769
}
4870

71+
/// <summary>
72+
/// Formats the specified logLevel, eventId, state and exception into json entry.
73+
/// </summary>
74+
/// <returns>The json.</returns>
75+
/// <param name="logLevel">Log level.</param>
76+
/// <param name="eventId">Event identifier.</param>
77+
/// <param name="state">Log object state.</param>
78+
/// <param name="exception">Log exception.</param>
79+
/// <typeparam name="T">Log entry.</typeparam>
4980
public SplunkJSONEntry FormatJson<T>(LogLevel logLevel, EventId eventId, T state, Exception exception)
5081
{
5182
return new SplunkJSONEntry(Format(logLevel, eventId, state, exception), 0, host, string.Empty, "Log");
5283
}
5384

85+
/// <summary>
86+
/// Method created to get AWS EC2 host Id, or set `dev` as host if AWS internal call fails.
87+
/// </summary>
88+
string GetHost()
89+
{
90+
string ec2Host = string.Empty;
91+
try
92+
{
93+
using (HttpClient httpClient = new HttpClient())
94+
{
95+
TimeSpan timeSpan = new TimeSpan(0, 0, 5);
96+
var cancellationTokenSource = new CancellationTokenSource((int)timeSpan.TotalMilliseconds);
97+
httpClient.Timeout = timeSpan;
98+
httpClient.BaseAddress = new Uri("http://169.254.169.254/latest/meta-data/");
99+
ec2Host = httpClient
100+
.GetAsync("instance-id", cancellationTokenSource.Token)
101+
.Result
102+
.Content
103+
.ReadAsStringAsync()
104+
.Result;
105+
}
106+
}
107+
catch
108+
{
109+
ec2Host = "dev";
110+
}
111+
return ec2Host;
112+
}
113+
114+
/// <summary>
115+
/// Based on LogLevel we define the correspondent VTEX event level.
116+
/// </summary>
117+
/// <returns>VTEX event level.</returns>
54118
string GetVTEXEventLevel(LogLevel logLevel)
55119
{
56120
VTEXEventLevel eventLevel = VTEXEventLevel.Debug;
@@ -75,6 +139,10 @@ string GetVTEXEventLevel(LogLevel logLevel)
75139
return eventLevel.ToString().ToLower();
76140
}
77141

142+
/// <summary>
143+
/// Based on LogLevel we define the correspondent VTEX log type.
144+
/// </summary>
145+
/// <returns>VTEX log type.</returns>
78146
string GetVTEXLogType(LogLevel logLevel)
79147
{
80148
VTEXLogType logType = VTEXLogType.Info;
@@ -97,4 +165,4 @@ string GetVTEXLogType(LogLevel logLevel)
97165
return logType.ToString().ToLower();
98166
}
99167
}
100-
}
168+
}

src/SampleWebAPI/Startup.cs

Lines changed: 24 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,30 @@ namespace VTEX.SampleWebAPI
1414
{
1515
public class Startup
1616
{
17-
static readonly ILoggerFormatter formatter = new VTEXSplunkLoggerFormatter(Microsoft.Extensions.PlatformAbstractions.PlatformServices.Default.Application.ApplicationVersion, GetHost());
17+
static readonly ILoggerFormatter formatter = new VTEXSplunkLoggerFormatter();
18+
19+
public IConfiguration Configuration { get; }
1820

1921
public Startup(IConfiguration configuration)
2022
{
2123
Configuration = configuration;
2224
}
2325

24-
public IConfiguration Configuration { get; }
25-
26-
// This method gets called by the runtime. Use this method to add services to the container.
26+
/// <summary>
27+
/// This method gets called by the runtime. Use this method to add services to the container.
28+
/// </summary>
2729
public void ConfigureServices(IServiceCollection services)
2830
{
2931
services.AddMvc();
3032
}
3133

32-
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
34+
/// <summary>
35+
/// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
36+
/// </summary>
37+
/// <returns>The configure.</returns>
38+
/// <param name="app">App.</param>
39+
/// <param name="env">Env.</param>
40+
/// <param name="loggerFactory">Logger factory.</param>
3341
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
3442
{
3543
loggerFactory.AddDebug();
@@ -48,48 +56,25 @@ public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerF
4856
}
4957
};
5058

51-
//loggerFactory.AddHECRawSplunkLogger(splunkConfiguration, null);
52-
loggerFactory.AddHECRawSplunkLogger(splunkConfiguration, formatter);
59+
/**************************** Define Your Logger ****************************/
60+
/* */
61+
//loggerFactory.AddHECRawSplunkLogger(splunkConfiguration, null); //
62+
loggerFactory.AddHECRawSplunkLogger(splunkConfiguration, formatter); //
5363

54-
//loggerFactory.AddHECJsonSplunkLogger(splunkConfiguration, null);
55-
//loggerFactory.AddHECJsonSplunkLogger(splunkConfiguration, formatter);
64+
//loggerFactory.AddHECJsonSplunkLogger(splunkConfiguration, null); //
65+
//loggerFactory.AddHECJsonSplunkLogger(splunkConfiguration, formatter); //
5666

57-
//loggerFactory.AddTcpSplunkLogger(splunkConfiguration, null);
58-
//loggerFactory.AddTcpSplunkLogger(splunkConfiguration, formatter);
67+
//loggerFactory.AddTcpSplunkLogger(splunkConfiguration, null); //
68+
//loggerFactory.AddTcpSplunkLogger(splunkConfiguration, formatter); //
5969

6070
//loggerFactory.AddUdpSplunkLogger(splunkConfiguration, null);
6171
//loggerFactory.AddUdpSplunkLogger(splunkConfiguration, formatter);
72+
/* */
73+
/**************************** Define Your Logger ****************************/
6274

6375
app.UseMvc();
6476
}
6577

66-
/// <summary>
67-
/// Method created to get AWS EC2 host Id, or set `dev` as host if AWS internal call fails.
68-
/// </summary>
69-
static string GetHost()
70-
{
71-
string host = string.Empty;
72-
try
73-
{
74-
using (HttpClient httpClient = new HttpClient())
75-
{
76-
TimeSpan timeSpan = new TimeSpan(0, 0, 5);
77-
var cancellationTokenSource = new CancellationTokenSource((int)timeSpan.TotalMilliseconds);
78-
httpClient.Timeout = timeSpan;
79-
httpClient.BaseAddress = new Uri("http://169.254.169.254/latest/meta-data/");
80-
host = httpClient
81-
.GetAsync("instance-id", cancellationTokenSource.Token)
82-
.Result
83-
.Content
84-
.ReadAsStringAsync()
85-
.Result;
86-
}
87-
}
88-
catch
89-
{
90-
host = "dev";
91-
}
92-
return host;
93-
}
78+
9479
}
9580
}

0 commit comments

Comments
 (0)