Skip to content

Commit 4231f44

Browse files
committed
Implemented VTEX own text formatter
#9
1 parent e61b08b commit 4231f44

File tree

1 file changed

+100
-0
lines changed

1 file changed

+100
-0
lines changed
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
using System;
2+
using System.Linq;
3+
using Microsoft.Extensions.Logging;
4+
using Splunk;
5+
6+
namespace VTEX.SampleWebAPI.Logging
7+
{
8+
public class VTEXSplunkLoggerFormatter : ILoggerFormatter
9+
{
10+
const string DateTimeFormat = "yyyy-MM-ddTHH:mm:ss.fffZ";
11+
12+
readonly string appVersion;
13+
readonly string host;
14+
15+
public VTEXSplunkLoggerFormatter(string appVersion, string host)
16+
{
17+
this.appVersion = appVersion;
18+
this.host = host;
19+
}
20+
21+
public string Format<T>(LogLevel logLevel, EventId eventId, T state, Exception exception)
22+
{
23+
string log;
24+
if (state is VTEXSplunkEntry)
25+
{
26+
var splunkEntry = state as VTEXSplunkEntry;
27+
var dateTime = DateTime.UtcNow.ToString(DateTimeFormat);
28+
string extraData = string.Empty;
29+
if (splunkEntry.ExtraParameters != null && splunkEntry.ExtraParameters.Count > 0)
30+
extraData = string.Join(" ", splunkEntry.ExtraParameters.Select(part => { return $"{part.Item1}=\"{part.Item2}\""; }));
31+
string account = splunkEntry.Account;
32+
if (string.IsNullOrWhiteSpace(splunkEntry.Account))
33+
account = "-";
34+
log = string.Format($"{dateTime} VTEXLog,splunkmanager,{host},{GetVTEXEventLevel(logLevel)},{GetVTEXLogType(logLevel)},\"{splunkEntry.WorkflowType}\",\"{splunkEntry.WorkflowInstance}\",{account},{appVersion} {extraData}");
35+
}
36+
else
37+
{
38+
var eventSegment = "";
39+
if (!string.IsNullOrWhiteSpace(eventId.Name))
40+
eventSegment = $"Event '{eventId.Name}' on {eventId.Id}";
41+
var exceptionSegment = "";
42+
if (exception != null)
43+
exceptionSegment = $"Exception type: {exception.GetType().FullName}. Exception message: {exception.Message}";
44+
log = string.Format($"[{logLevel}] {eventSegment} {state.ToString()}. {exceptionSegment}");
45+
}
46+
return log;
47+
}
48+
49+
public SplunkJSONEntry FormatJson<T>(LogLevel logLevel, EventId eventId, T state, Exception exception)
50+
{
51+
return new SplunkJSONEntry(Format(logLevel, eventId, state, exception), 0, host, string.Empty, "Log");
52+
}
53+
54+
string GetVTEXEventLevel(LogLevel logLevel)
55+
{
56+
VTEXEventLevel eventLevel = VTEXEventLevel.Debug;
57+
switch (logLevel)
58+
{
59+
case LogLevel.Critical:
60+
eventLevel = VTEXEventLevel.Critical;
61+
break;
62+
case LogLevel.Warning:
63+
case LogLevel.Error:
64+
eventLevel = VTEXEventLevel.Important;
65+
break;
66+
case LogLevel.Information:
67+
eventLevel = VTEXEventLevel.Default;
68+
break;
69+
case LogLevel.Trace:
70+
case LogLevel.Debug:
71+
case LogLevel.None:
72+
eventLevel = VTEXEventLevel.Debug;
73+
break;
74+
}
75+
return eventLevel.ToString().ToLower();
76+
}
77+
78+
string GetVTEXLogType(LogLevel logLevel)
79+
{
80+
VTEXLogType logType = VTEXLogType.Info;
81+
switch (logLevel)
82+
{
83+
case LogLevel.Critical:
84+
case LogLevel.Error:
85+
logType = VTEXLogType.Error;
86+
break;
87+
case LogLevel.Warning:
88+
logType = VTEXLogType.Warning;
89+
break;
90+
case LogLevel.Debug:
91+
case LogLevel.Information:
92+
case LogLevel.Trace:
93+
case LogLevel.None:
94+
logType = VTEXLogType.Info;
95+
break;
96+
}
97+
return logType.ToString().ToLower();
98+
}
99+
}
100+
}

0 commit comments

Comments
 (0)