Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion jsnlog/LogHandling/LogRequest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,12 @@ internal class LogRequest : LogRequestBase, ILogRequest
public DateTime UtcDate { get; private set; }
public string EntryId { get; private set; }
public string JsonMessage { get; private set; }

public LogTraceContext TraceContext { get; }

public LogRequest(string message, string logger, string level,
DateTime utcDate, string entryId, string jsonMessage, LogRequestBase logRequestBase)
DateTime utcDate, string entryId, string jsonMessage, LogRequestBase logRequestBase,
LogTraceContext traceContext)
: base(logRequestBase)
{
Message = message;
Expand All @@ -22,6 +25,7 @@ public LogRequest(string message, string logger, string level,
UtcDate = utcDate;
EntryId = entryId;
JsonMessage = jsonMessage;
TraceContext = traceContext;
}

public override string ToString()
Expand Down
31 changes: 25 additions & 6 deletions jsnlog/LogHandling/LoggerProcessor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,21 +10,34 @@ namespace JSNLog.LogHandling
internal class LoggerProcessor
{
/// <summary>
/// The log data sent in a single log request from the client.
/// It is expected that this list has 2 items:
/// * the requestId (key: r)
/// * the array with log items (key: lg)
/// Individual log item
/// </summary>

private class LogRequestSingleMsg
{
public string m {get;set;}
public string n {get;set;}
public LogRequestSingleTraceContext c { get; set; }
public string l {get;set;}
public string t {get;set;}
public string u { get; set; }
}

/// <summary>
/// W3C Trace Context (distributed trace-id, span-id, and parent span-id)
/// </summary>
private class LogRequestSingleTraceContext
{
public string d {get;set;}
public string p {get;set;}
public string s {get;set;}
}

/// <summary>
/// The log data sent in a single log request from the client.
/// It is expected that this list has 2 items:
/// * the requestId (key: r)
/// * the array with log items (key: lg)
/// </summary>
private class LogRequestData
{
public string r {get;set;}
Expand Down Expand Up @@ -198,6 +211,12 @@ private static FinalLogData ProcessLogItem(LogRequestSingleMsg logItem, LogReque
{
}

LogTraceContext logTraceContext = null;
if (logItem.c != null)
{
logTraceContext = new LogTraceContext(logItem.c.d, logItem.c.s, logItem.c.p);
}

// ----------------

string jsonmessage = "";
Expand All @@ -208,7 +227,7 @@ private static FinalLogData ProcessLogItem(LogRequestSingleMsg logItem, LogReque

// ----------------

var logRequest = new LogRequest(message, logger, level, utcDate, entryId, jsonmessage, logRequestBase);
var logRequest = new LogRequest(message, logger, level, utcDate, entryId, jsonmessage, logRequestBase, logTraceContext);
var loggingEventArgs = new LoggingEventArgs(logRequest)
{
Cancel = false,
Expand Down
42 changes: 35 additions & 7 deletions jsnlog/PublicFacing/AspNet5/Configuration/LoggingAdapter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,42 @@ public void Log(FinalLogData finalLogData)

Object message = LogMessageHelpers.DeserializeIfPossible(finalLogData.FinalMessage);

switch (finalLogData.FinalLevel)
IDisposable scope = null;
try
{
case Level.TRACE: logger.LogTrace("{logMessage}", message); break;
case Level.DEBUG: logger.LogDebug("{logMessage}", message); break;
case Level.INFO: logger.LogInformation("{logMessage}", message); break;
case Level.WARN: logger.LogWarning("{logMessage}", message); break;
case Level.ERROR: logger.LogError("{logMessage}", message); break;
case Level.FATAL: logger.LogCritical("{logMessage}", message); break;
if (finalLogData.LogRequest.TraceContext != null)
{
scope = logger.BeginScope("Client TraceContext: TraceId={TraceId},SpanId={SpanId},ParentId={ParentId}",
finalLogData.LogRequest.TraceContext.TraceId,
finalLogData.LogRequest.TraceContext.SpanId,
finalLogData.LogRequest.TraceContext.ParentId ?? "0000000000000000");
}

switch (finalLogData.FinalLevel)
{
case Level.TRACE:
logger.LogTrace("{logMessage}", message);
break;
case Level.DEBUG:
logger.LogDebug("{logMessage}", message);
break;
case Level.INFO:
logger.LogInformation("{logMessage}", message);
break;
case Level.WARN:
logger.LogWarning("{logMessage}", message);
break;
case Level.ERROR:
logger.LogError("{logMessage}", message);
break;
case Level.FATAL:
logger.LogCritical("{logMessage}", message);
break;
}
}
finally
{
scope?.Dispose();
}
}
}
Expand Down
2 changes: 2 additions & 0 deletions jsnlog/PublicFacing/Configuration/ILogRequest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ public interface ILogRequest
string RequestId { get; }
string Url { get; }

LogTraceContext TraceContext { get; }

Dictionary<string, string> QueryParameters { get; }
Dictionary<string, string> Cookies { get; }
Dictionary<string, string> Headers { get; }
Expand Down
18 changes: 18 additions & 0 deletions jsnlog/PublicFacing/Configuration/LogTraceContext.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using System.Diagnostics;

namespace JSNLog
{
public class LogTraceContext
{
public LogTraceContext(string traceId, string spanId, string parentId)
{
TraceId = traceId;
SpanId = spanId;
ParentId = parentId;
}

public string ParentId { get; }
public string SpanId {get;}
public string TraceId {get;}
}
}