LogExtensions
using System;
using System.Collections.Generic;
namespace Relativity.Transfer
{
public static class LogExtensions
{
private const string PrefixBatchTemplate = "Batch {BatchNumber} of {TotalBatchCount} - {ApplicationName} - {ClientRequestId} - {JobId} - {Direction} - ";
private const string PrefixBatchNoIdsTemplate = "Batch {BatchNumber} of {TotalBatchCount} - {ApplicationName} - {Direction} - ";
private const string PrefixTemplate = "{ApplicationName} - {ClientRequestId} - {JobId} - {Direction} - ";
private const string PrefixNoIdsTemplate = "{ApplicationName} - {Direction} - ";
private static readonly object SyncRoot = new object();
private static readonly string ApplicationNameCache = GlobalSettings.Instance.ApplicationName;
[Obsolete("This method is replaced by LogExtensions.LogTransferStatistics")]
public static void LogStatistics2(this ITransferLog log, ITransferRequest request, ITransferStatistics statistics)
{
log.LogTransferStatistics(request, statistics);
}
[Obsolete("This method is replaced by LogExtensions.LogTransferDebug")]
public static void LogDebug2(this ITransferLog log, ITransferRequest request, string messageTemplate, params object[] propertyValues)
{
log.LogTransferDebug(request, messageTemplate, propertyValues);
}
[Obsolete("This method is replaced by LogExtensions.LogTransferDebug")]
public static void LogDebug2(this ITransferLog log, Exception exception, ITransferRequest request, string messageTemplate, params object[] propertyValues)
{
log.LogTransferDebug(exception, request, messageTemplate, propertyValues);
}
[Obsolete("This method is replaced by LogExtensions.LogTransferInformation")]
public static void LogInformation2(this ITransferLog log, ITransferRequest request, string messageTemplate, params object[] propertyValues)
{
log.LogTransferInformation(request, messageTemplate, propertyValues);
}
[Obsolete("This method is replaced by LogExtensions.LogTransferInformation")]
public static void LogInformation2(this ITransferLog log, Exception exception, ITransferRequest request, string messageTemplate, params object[] propertyValues)
{
log.LogTransferInformation(exception, request, messageTemplate, propertyValues);
}
[Obsolete("This method is replaced by LogExtensions.LogTransferWarning")]
public static void LogWarning2(this ITransferLog log, ITransferRequest request, string messageTemplate, params object[] propertyValues)
{
log.LogTransferWarning(request, messageTemplate, propertyValues);
}
[Obsolete("This method is replaced by LogExtensions.LogTransferWarning")]
public static void LogWarning2(this ITransferLog log, Exception exception, ITransferRequest request, string messageTemplate, params object[] propertyValues)
{
log.LogTransferWarning(exception, request, messageTemplate, propertyValues);
}
[Obsolete("This method is replaced by LogExtensions.LogTransferError")]
public static void LogError2(this ITransferLog log, ITransferRequest request, string messageTemplate, params object[] propertyValues)
{
log.LogTransferError(request, messageTemplate, propertyValues);
}
[Obsolete("This method is replaced by LogExtensions.LogTransferError")]
public static void LogError2(this ITransferLog log, Exception exception, ITransferRequest request, string messageTemplate, params object[] propertyValues)
{
log.LogTransferError(exception, request, messageTemplate, propertyValues);
}
public static void LogTransferStatistics(this ITransferLog log, ITransferRequest request, ITransferStatistics statistics)
{
if (log == null)
throw new ArgumentNullException("log");
if (request == null)
throw new ArgumentNullException("request");
if (statistics == null)
throw new ArgumentNullException("statistics");
if (GlobalSettings.Instance.StatisticsLogEnabled)
log.LogTransferInformation(request, "Progress: {Progress:00.00}%, Files: {TotalTransferredFiles}/{TotalRequestFiles}, Bytes: {TotalTransferredBytes}/{TotalBytes}, Rate: {TransferRateMbps:0.00} Mbps, Remaining: {RemainingTime:hh\\:mm\\:ss}", statistics.Progress, statistics.TotalTransferredFiles, statistics.TotalRequestFiles, statistics.TotalTransferredBytes, statistics.TotalRequestBytes, statistics.TransferRateMbps, statistics.RemainingTime);
}
public static void LogTransferDebug(this ITransferLog log, ITransferRequest request, string messageTemplate, params object[] propertyValues)
{
log.LogTransferDebug(null, request, messageTemplate, propertyValues);
}
public static void LogTransferDebug(this ITransferLog log, Exception exception, ITransferRequest request, string messageTemplate, params object[] propertyValues)
{
log.LogInternal(exception, request, messageTemplate, log.LogDebug, log.LogDebug, propertyValues);
}
public static void LogTransferInformation(this ITransferLog log, ITransferRequest request, string messageTemplate, params object[] propertyValues)
{
log.LogTransferInformation(null, request, messageTemplate, propertyValues);
}
public static void LogTransferInformation(this ITransferLog log, Exception exception, ITransferRequest request, string messageTemplate, params object[] propertyValues)
{
log.LogInternal(exception, request, messageTemplate, log.LogInformation, log.LogInformation, propertyValues);
}
public static void LogTransferWarning(this ITransferLog log, ITransferRequest request, string messageTemplate, params object[] propertyValues)
{
log.LogTransferWarning(null, request, messageTemplate, propertyValues);
}
public static void LogTransferWarning(this ITransferLog log, Exception exception, ITransferRequest request, string messageTemplate, params object[] propertyValues)
{
log.LogInternal(exception, request, messageTemplate, log.LogWarning, log.LogWarning, propertyValues);
}
public static void LogTransferError(this ITransferLog log, ITransferRequest request, string messageTemplate, params object[] propertyValues)
{
log.LogTransferError(null, request, messageTemplate, propertyValues);
}
public static void LogTransferError(this ITransferLog log, Exception exception, ITransferRequest request, string messageTemplate, params object[] propertyValues)
{
log.LogInternal(exception, request, messageTemplate, log.LogError, log.LogError, propertyValues);
}
public static void LogTransferFatal(this ITransferLog log, ITransferRequest request, string messageTemplate, params object[] propertyValues)
{
log.LogTransferError(null, request, messageTemplate, propertyValues);
}
public static void LogTransferFatal(this ITransferLog log, Exception exception, ITransferRequest request, string messageTemplate, params object[] propertyValues)
{
log.LogInternal(exception, request, messageTemplate, log.LogFatal, log.LogFatal, propertyValues);
}
public static void LogStatistics(this ITransferLog log, ITransferStatistics statistics)
{
if (log == null)
throw new ArgumentNullException("log");
if (statistics == null)
throw new ArgumentNullException("statistics");
string str = "Job complete statistics";
if (statistics.Request.TotalBatchCount > 0)
log.LogTransferInformation(statistics.Request, str + " - Batch: {BatchNumber} of TotalBatchCount: {TotalBatchCount}", statistics.Request.BatchNumber, statistics.Request.TotalBatchCount);
if (statistics.JobError)
log.LogTransferInformation(statistics.Request, str + " - JobErrorCode: {JobErrorCode}, JobErrorMessage: {JobErrorMessage}", statistics.JobErrorCode, statistics.JobErrorMessage);
if (statistics.TotalFailedFiles > 0)
log.LogTransferInformation(statistics.Request, str + " - TotalFailedFiles: {TotalFailedFiles}", statistics.TotalFailedFiles);
log.LogTransferInformation(statistics.Request, str + " - TotalRequestFiles: {TotalRequestFiles}, TotalRequestBytes: {TotalRequestBytes}", statistics.TotalRequestFiles, statistics.TotalRequestBytes);
if (statistics.TotalSkippedFiles > 0)
log.LogTransferInformation(statistics.Request, str + " - TotalSkippedFiles: {TotalSkippedFiles}", statistics.TotalSkippedFiles);
log.LogTransferInformation(statistics.Request, str + " - TotalTransferredFiles: {TotalTransferredFiles}, TotalTransferredBytes: {TotalTransferredBytes}", statistics.TotalTransferredFiles, statistics.TotalTransferredBytes);
}
private static void LogInternal(this ITransferLog log, Exception exception, ITransferRequest request, string messageTemplate, Action<Exception, string, object[]> logActionWithException, Action<string, object[]> logActionWithoutException, params object[] propertyValues)
{
if (log == null)
throw new ArgumentNullException("log");
lock (SyncRoot) {
bool commandLineModeEnabled = GlobalSettings.Instance.CommandLineModeEnabled;
int num = request?.BatchNumber ?? 0;
int num2 = request?.TotalBatchCount ?? 0;
string str;
object[] collection;
if (num == 0 && num2 == 0) {
if (!commandLineModeEnabled) {
str = "{ApplicationName} - {ClientRequestId} - {JobId} - {Direction} - ";
collection = new object[4] {
ApplicationNameCache,
request?.ClientRequestId,
request?.JobId.GetValueOrDefault(),
request?.Direction
};
} else {
str = "{ApplicationName} - {Direction} - ";
collection = new object[2] {
ApplicationNameCache,
request?.Direction
};
}
} else if (!commandLineModeEnabled) {
str = "Batch {BatchNumber} of {TotalBatchCount} - {ApplicationName} - {ClientRequestId} - {JobId} - {Direction} - ";
collection = new object[6] {
num,
num2,
ApplicationNameCache,
request?.ClientRequestId,
request?.JobId.GetValueOrDefault(),
request?.Direction
};
} else {
str = "Batch {BatchNumber} of {TotalBatchCount} - {ApplicationName} - {Direction} - ";
collection = new object[4] {
num,
num2,
ApplicationNameCache,
request?.Direction
};
}
List<object> list = new List<object>(collection);
LogRedaction.MoveRedactedPositions(list.Count, propertyValues);
list.AddRange(propertyValues);
if (exception != null)
logActionWithException(exception, str + messageTemplate, list.ToArray());
else
logActionWithoutException(str + messageTemplate, list.ToArray());
}
}
}
}