Taylohtio/IDP/webapi/ImportFlatTool/LogUtils.cs

210 lines
6.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Serilog;
namespace ImportFlatTool
{
public static class LogUtils
{
private enum Severity {
Information,
Warning,
Error
}
public static ILogger _log;
static LogUtils() {
Log.Logger = new LoggerConfiguration()
.ReadFrom.AppSettings()
//.Destructure.With<JsonDestructuringPolicy>()
.WriteTo.RollingFile("log-{Date}.txt")
.CreateLogger();
_log = Log.Logger;
}
public static void LogDebug(String msg)
{
try
{
//LogEntry entry = new LogEntry();
//entry.Severity = TraceEventType.Information;
//entry.Message = msg;
writeWrapped(Severity.Information, msg);
}
catch
{
}
}
public static void LogDebug(string msg, params object[] param)
{
try
{
LogDebug(String.Format(msg, param));
}
catch
{
}
}
public static void LogWarning(String msg, Exception ex)
{
try
{
//LogEntry entry = new LogEntry();
//entry.Severity = TraceEventType.Warning;
//entry.Message = msg + Environment.NewLine + ex.Message;
writeWrapped(Severity.Warning, msg + Environment.NewLine + ex.Message);
}
catch (Exception)
{
}
}
public static void LogWarning(String msg)
{
try
{
//LogEntry entry = new LogEntry();
//entry.Severity = TraceEventType.Warning;
//entry.Message = msg;
writeWrapped(Severity.Warning , msg);
}
catch
{
}
}
public static void LogError(Exception ex)
{
try
{
//LogEntry entry = new LogEntry();
//entry.Severity = TraceEventType.Error;
//entry.Message = ex.Message;
writeWrapped(Severity.Error, ex.Message);
}
catch
{
}
}
public static void LogError(string msg)
{
try
{
//LogEntry entry = new LogEntry();
//entry.Severity = TraceEventType.Error;
//entry.Message = msg;
writeWrapped(Severity.Error, msg);
}
catch
{
}
}
public static void LogError(string msg, params object[] param)
{
try
{
LogError(String.Format(msg, param));
}
catch
{
}
}
private static StackFrame getCallingStackFrame()
{
// Determine the method that called the one that is calling this one.
// This is not just two up the Stack because of RichException support.
StackFrame sf = null;
// Start at 2. 1 for this one and another for the one above that.
StackTrace st = new StackTrace(2, true);
Type thisType = typeof(LogUtils);
foreach (StackFrame sfi in st.GetFrames())
{
// Find a calling method that is not part of this log class but is part
// of the same Namespace.
Type callType = sfi.GetMethod().DeclaringType;
if (callType != thisType &&
!callType.IsInterface)
{
var mb = sfi.GetMethod();
var methodName = mb != null ? mb.Name : "";
if (methodName.ToLower() == "w" || methodName.Length == 0) continue;
sf = sfi;
break;
}
}
return sf;
}
private static String addMetadataToMessage(String msg)
{
StackFrame sf = getCallingStackFrame();
if (sf != null) // if found add info to log message
{
var mb = sf.GetMethod();
var methodName = mb != null ? mb.Name : "";
var fileName = sf.GetFileName();
if (fileName != null) fileName = fileName.Substring(fileName.LastIndexOf('\\') + 1);
var lineNumber = sf.GetFileLineNumber();
if (fileName != null)
{
msg = fileName + "(" + lineNumber + ") - " + methodName + " - " + msg;
}
else
{
msg = "unknown - " + methodName + " - " + msg;
}
}
return msg;
}
private static void writeWrapped(Severity severity, string message) // LogEntry entry/*, bool useDebug*/)
{
try
{
/*if (IncludeMetadata) */
message = addMetadataToMessage(message);
// if (useDebug)
// {
// if (entry.Severity == TraceEventType.Error)
// {
//Microsoft.Office.Server.Diagnostics.PortalLog.LogString(entry.Message);
// Debug.WriteLine("================== ERROR ====================");
// }
// Debug.WriteLine(entry.Message);
// }
// else
// {
switch (severity) {
case Severity.Information:
_log.Information(message);
break;
case Severity.Warning:
_log.Warning(message);
break;
default:
_log.Error(message);
break;
}
//Logger.Write(entry);
// }
}
catch { }
}
}
}