Skip to content
This repository was archived by the owner on Jun 27, 2019. It is now read-only.

Commit 8c88de1

Browse files
Updated liblog
1 parent 7210bce commit 8c88de1

File tree

5 files changed

+2058
-53
lines changed

5 files changed

+2058
-53
lines changed

src/GitTools.Core/App_Packages/LibLog.4.2/LibLog.cs

Lines changed: 51 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
//
44
// https://github.com/damianh/LibLog
55
//===============================================================================
6-
// Copyright © 2011-2015 Damian Hickey. All rights reserved.
6+
// Copyright © 2011-2015 Damian Hickey. All rights reserved.
77
//
88
// Permission is hereby granted, free of charge, to any person obtaining a copy
99
// of this software and associated documentation files (the "Software"), to deal
@@ -29,7 +29,7 @@
2929
// Define LIBLOG_PORTABLE conditional compilation symbol for PCL compatibility
3030
//
3131
// Define LIBLOG_PUBLIC to enable ability to GET a logger (LogProvider.For<>() etc) from outside this library. NOTE:
32-
// this can have unintendend consequences of consumers of your library using your library to resolve a logger. If the
32+
// this can have unintended consequences of consumers of your library using your library to resolve a logger. If the
3333
// reason is because you want to open this functionality to other projects within your solution,
3434
// consider [InternalVisibleTo] instead.
3535
//
@@ -38,8 +38,6 @@
3838

3939
#pragma warning disable 1591
4040

41-
#define LIBLOG_PUBLIC
42-
4341
// If you copied this file manually, you need to change all "YourRootNameSpace" so not to clash with other libraries
4442
// that use LibLog
4543
#if LIBLOG_PROVIDERS_ONLY
@@ -57,8 +55,10 @@ namespace GitTools.Logging
5755
using System;
5856
#if !LIBLOG_PROVIDERS_ONLY
5957
using System.Diagnostics;
58+
#if !LIBLOG_PORTABLE
6059
using System.Runtime.CompilerServices;
6160
#endif
61+
#endif
6262

6363
#if LIBLOG_PROVIDERS_ONLY
6464
internal
@@ -198,6 +198,7 @@ public static void DebugException(this ILog logger, string message, Exception ex
198198

199199
public static void Error(this ILog logger, Func<string> messageFunc)
200200
{
201+
GuardAgainstNullLogger(logger);
201202
logger.Log(LogLevel.Error, messageFunc);
202203
}
203204

@@ -422,8 +423,8 @@ static class LogProvider
422423
public const string DisableLoggingEnvironmentVariable = "GitTools_LIBLOG_DISABLE";
423424
private const string NullLogProvider = "Current Log Provider is not set. Call SetCurrentLogProvider " +
424425
"with a non-null value first.";
425-
private static dynamic _currentLogProvider;
426-
private static Action<ILogProvider> _onCurrentLogProviderSet;
426+
private static dynamic s_currentLogProvider;
427+
private static Action<ILogProvider> s_onCurrentLogProviderSet;
427428

428429
static LogProvider()
429430
{
@@ -436,7 +437,7 @@ static LogProvider()
436437
/// <param name="logProvider">The log provider.</param>
437438
public static void SetCurrentLogProvider(ILogProvider logProvider)
438439
{
439-
_currentLogProvider = logProvider;
440+
s_currentLogProvider = logProvider;
440441

441442
RaiseOnCurrentLogProviderSet();
442443
}
@@ -459,7 +460,7 @@ internal static Action<ILogProvider> OnCurrentLogProviderSet
459460
{
460461
set
461462
{
462-
_onCurrentLogProviderSet = value;
463+
s_onCurrentLogProviderSet = value;
463464
RaiseOnCurrentLogProviderSet();
464465
}
465466
}
@@ -468,7 +469,7 @@ internal static ILogProvider CurrentLogProvider
468469
{
469470
get
470471
{
471-
return _currentLogProvider;
472+
return s_currentLogProvider;
472473
}
473474
}
474475

@@ -610,9 +611,9 @@ static IDisposable OpenMappedContext(string key, string value)
610611
#if !LIBLOG_PROVIDERS_ONLY
611612
private static void RaiseOnCurrentLogProviderSet()
612613
{
613-
if (_onCurrentLogProviderSet != null)
614+
if (s_onCurrentLogProviderSet != null)
614615
{
615-
_onCurrentLogProviderSet(_currentLogProvider);
616+
s_onCurrentLogProviderSet(s_currentLogProvider);
616617
}
617618
}
618619
#endif
@@ -636,7 +637,7 @@ internal static ILogProvider ResolveLogProvider()
636637
#else
637638
Console.WriteLine(
638639
#endif
639-
"Exception occured resolving a log provider. Logging for this assembly {0} is disabled. {1}",
640+
"Exception occurred resolving a log provider. Logging for this assembly {0} is disabled. {1}",
640641
typeof(LogProvider).GetAssemblyPortable().FullName,
641642
ex);
642643
}
@@ -676,15 +677,14 @@ internal Logger WrappedLogger
676677

677678
public bool Log(LogLevel logLevel, Func<string> messageFunc, Exception exception = null, params object[] formatParameters)
678679
{
679-
#if LIBLOG_PORTABLE
680680
if (_getIsDisabled())
681681
{
682682
return false;
683683
}
684-
#else
684+
#if !LIBLOG_PORTABLE
685685
var envVar = Environment.GetEnvironmentVariable(LogProvider.DisableLoggingEnvironmentVariable);
686686

687-
if (_getIsDisabled() || (envVar != null && envVar.Equals("true", StringComparison.OrdinalIgnoreCase)))
687+
if (envVar != null && envVar.Equals("true", StringComparison.OrdinalIgnoreCase))
688688
{
689689
return false;
690690
}
@@ -721,12 +721,16 @@ namespace GitTools.Logging.LogProviders
721721
{
722722
using System;
723723
using System.Collections.Generic;
724+
#if !LIBLOG_PORTABLE
724725
using System.Diagnostics;
726+
#endif
725727
using System.Globalization;
726728
using System.Linq;
727729
using System.Linq.Expressions;
728730
using System.Reflection;
731+
#if !LIBLOG_PORTABLE
729732
using System.Text;
733+
#endif
730734
using System.Text.RegularExpressions;
731735

732736
internal abstract class LogProviderBase : ILogProvider
@@ -772,7 +776,7 @@ protected virtual OpenMdc GetOpenMdcMethod()
772776
internal class NLogLogProvider : LogProviderBase
773777
{
774778
private readonly Func<string, object> _getLoggerByNameDelegate;
775-
private static bool _providerIsAvailableOverride = true;
779+
private static bool s_providerIsAvailableOverride = true;
776780

777781
public NLogLogProvider()
778782
{
@@ -785,8 +789,8 @@ public NLogLogProvider()
785789

786790
public static bool ProviderIsAvailableOverride
787791
{
788-
get { return _providerIsAvailableOverride; }
789-
set { _providerIsAvailableOverride = value; }
792+
get { return s_providerIsAvailableOverride; }
793+
set { s_providerIsAvailableOverride = value; }
790794
}
791795

792796
public override Logger GetLogger(string name)
@@ -991,7 +995,7 @@ private bool IsLogLevelEnable(LogLevel logLevel)
991995
internal class Log4NetLogProvider : LogProviderBase
992996
{
993997
private readonly Func<string, object> _getLoggerByNameDelegate;
994-
private static bool _providerIsAvailableOverride = true;
998+
private static bool s_providerIsAvailableOverride = true;
995999

9961000
public Log4NetLogProvider()
9971001
{
@@ -1004,8 +1008,8 @@ public Log4NetLogProvider()
10041008

10051009
public static bool ProviderIsAvailableOverride
10061010
{
1007-
get { return _providerIsAvailableOverride; }
1008-
set { _providerIsAvailableOverride = value; }
1011+
get { return s_providerIsAvailableOverride; }
1012+
set { s_providerIsAvailableOverride = value; }
10091013
}
10101014

10111015
public override Logger GetLogger(string name)
@@ -1070,15 +1074,16 @@ private static Func<string, object> GetGetLoggerMethodCall()
10701074
internal class Log4NetLogger
10711075
{
10721076
private readonly dynamic _logger;
1073-
private static Type _callerStackBoundaryType;
1077+
private static Type s_callerStackBoundaryType;
1078+
private static readonly object CallerStackBoundaryTypeSync = new object();
10741079

10751080
private readonly object _levelDebug;
10761081
private readonly object _levelInfo;
10771082
private readonly object _levelWarn;
10781083
private readonly object _levelError;
10791084
private readonly object _levelFatal;
1080-
private readonly Func<object, object, bool> isEnabledForDelegate;
1081-
private Action<object, Type, object, string, Exception> logDelegate;
1085+
private readonly Func<object, object, bool> _isEnabledForDelegate;
1086+
private readonly Action<object, Type, object, string, Exception> _logDelegate;
10821087

10831088
internal Log4NetLogger(dynamic logger)
10841089
{
@@ -1111,7 +1116,7 @@ internal Log4NetLogger(dynamic logger)
11111116
ParameterExpression messageParam = Expression.Parameter(typeof(string));
11121117
UnaryExpression levelCast = Expression.Convert(levelParam, logEventLevelType);
11131118
MethodCallExpression isEnabledMethodCall = Expression.Call(instanceCast, isEnabledMethodInfo, levelCast);
1114-
isEnabledForDelegate = Expression.Lambda<Func<object, object, bool>>(isEnabledMethodCall, instanceParam, levelParam).Compile();
1119+
_isEnabledForDelegate = Expression.Lambda<Func<object, object, bool>>(isEnabledMethodCall, instanceParam, levelParam).Compile();
11151120

11161121
// Action<object, object, string, Exception> Log =
11171122
// (logger, callerStackBoundaryDeclaringType, level, message, exception) => { ((ILogger)logger).Write(callerStackBoundaryDeclaringType, level, message, exception); }
@@ -1128,7 +1133,7 @@ internal Log4NetLogger(dynamic logger)
11281133
levelCast,
11291134
messageParam,
11301135
exceptionParam);
1131-
logDelegate = Expression.Lambda<Action<object, Type, object, string, Exception>>(
1136+
_logDelegate = Expression.Lambda<Action<object, Type, object, string, Exception>>(
11321137
writeMethodExp,
11331138
instanceParam,
11341139
callerStackBoundaryDeclaringTypeParam,
@@ -1144,38 +1149,38 @@ public bool Log(LogLevel logLevel, Func<string> messageFunc, Exception exception
11441149
return IsLogLevelEnable(logLevel);
11451150
}
11461151

1147-
messageFunc = LogMessageFormatter.SimulateStructuredLogging(messageFunc, formatParameters);
1148-
11491152
if (!IsLogLevelEnable(logLevel))
11501153
{
11511154
return false;
11521155
}
11531156

1157+
messageFunc = LogMessageFormatter.SimulateStructuredLogging(messageFunc, formatParameters);
1158+
11541159
// determine correct caller - this might change due to jit optimizations with method inlining
1155-
if (_callerStackBoundaryType == null)
1160+
if (s_callerStackBoundaryType == null)
11561161
{
1157-
lock (GetType())
1162+
lock (CallerStackBoundaryTypeSync)
11581163
{
11591164
#if !LIBLOG_PORTABLE
11601165
StackTrace stack = new StackTrace();
11611166
Type thisType = GetType();
1162-
_callerStackBoundaryType = Type.GetType("LoggerExecutionWrapper");
1163-
for (int i = 1; i < stack.FrameCount; i++)
1167+
s_callerStackBoundaryType = Type.GetType("LoggerExecutionWrapper");
1168+
for (var i = 1; i < stack.FrameCount; i++)
11641169
{
11651170
if (!IsInTypeHierarchy(thisType, stack.GetFrame(i).GetMethod().DeclaringType))
11661171
{
1167-
_callerStackBoundaryType = stack.GetFrame(i - 1).GetMethod().DeclaringType;
1172+
s_callerStackBoundaryType = stack.GetFrame(i - 1).GetMethod().DeclaringType;
11681173
break;
11691174
}
11701175
}
11711176
#else
1172-
_callerStackBoundaryType = typeof (LoggerExecutionWrapper);
1177+
s_callerStackBoundaryType = typeof (LoggerExecutionWrapper);
11731178
#endif
11741179
}
11751180
}
11761181

11771182
var translatedLevel = TranslateLevel(logLevel);
1178-
logDelegate(_logger, _callerStackBoundaryType, translatedLevel, messageFunc(), exception);
1183+
_logDelegate(_logger, s_callerStackBoundaryType, translatedLevel, messageFunc(), exception);
11791184
return true;
11801185
}
11811186

@@ -1195,7 +1200,7 @@ private bool IsInTypeHierarchy(Type currentType, Type checkType)
11951200
private bool IsLogLevelEnable(LogLevel logLevel)
11961201
{
11971202
var level = TranslateLevel(logLevel);
1198-
return isEnabledForDelegate(_logger, level);
1203+
return _isEnabledForDelegate(_logger, level);
11991204
}
12001205

12011206
private object TranslateLevel(LogLevel logLevel)
@@ -1223,7 +1228,7 @@ private object TranslateLevel(LogLevel logLevel)
12231228
internal class EntLibLogProvider : LogProviderBase
12241229
{
12251230
private const string TypeTemplate = "Microsoft.Practices.EnterpriseLibrary.Logging.{0}, Microsoft.Practices.EnterpriseLibrary.Logging";
1226-
private static bool _providerIsAvailableOverride = true;
1231+
private static bool s_providerIsAvailableOverride = true;
12271232
private static readonly Type LogEntryType;
12281233
private static readonly Type LoggerType;
12291234
private static readonly Type TraceEventTypeType;
@@ -1255,8 +1260,8 @@ public EntLibLogProvider()
12551260

12561261
public static bool ProviderIsAvailableOverride
12571262
{
1258-
get { return _providerIsAvailableOverride; }
1259-
set { _providerIsAvailableOverride = value; }
1263+
get { return s_providerIsAvailableOverride; }
1264+
set { s_providerIsAvailableOverride = value; }
12601265
}
12611266

12621267
public override Logger GetLogger(string name)
@@ -1395,7 +1400,7 @@ private static int MapSeverity(LogLevel logLevel)
13951400
internal class SerilogLogProvider : LogProviderBase
13961401
{
13971402
private readonly Func<string, object> _getLoggerByNameDelegate;
1398-
private static bool _providerIsAvailableOverride = true;
1403+
private static bool s_providerIsAvailableOverride = true;
13991404

14001405
public SerilogLogProvider()
14011406
{
@@ -1408,8 +1413,8 @@ public SerilogLogProvider()
14081413

14091414
public static bool ProviderIsAvailableOverride
14101415
{
1411-
get { return _providerIsAvailableOverride; }
1412-
set { _providerIsAvailableOverride = value; }
1416+
get { return s_providerIsAvailableOverride; }
1417+
set { s_providerIsAvailableOverride = value; }
14131418
}
14141419

14151420
public override Logger GetLogger(string name)
@@ -1702,7 +1707,7 @@ internal delegate void WriteDelegate(
17021707
params object[] args
17031708
);
17041709

1705-
private static bool _providerIsAvailableOverride = true;
1710+
private static bool s_providerIsAvailableOverride = true;
17061711
private readonly WriteDelegate _logWriteDelegate;
17071712

17081713
public LoupeLogProvider()
@@ -1723,8 +1728,8 @@ public LoupeLogProvider()
17231728
/// </value>
17241729
public static bool ProviderIsAvailableOverride
17251730
{
1726-
get { return _providerIsAvailableOverride; }
1727-
set { _providerIsAvailableOverride = value; }
1731+
get { return s_providerIsAvailableOverride; }
1732+
set { s_providerIsAvailableOverride = value; }
17281733
}
17291734

17301735
public override Logger GetLogger(string name)
@@ -1848,7 +1853,7 @@ internal static class LogMessageFormatter
18481853
/// <summary>
18491854
/// Some logging frameworks support structured logging, such as serilog. This will allow you to add names to structured data in a format string:
18501855
/// For example: Log("Log message to {user}", user). This only works with serilog, but as the user of LibLog, you don't know if serilog is actually
1851-
/// used. So, this class simulates that. it will replace any text in {curlybraces} with an index number.
1856+
/// used. So, this class simulates that. it will replace any text in {curly braces} with an index number.
18521857
///
18531858
/// "Log {message} to {user}" would turn into => "Log {0} to {1}". Then the format parameters are handled using regular .net string.Format.
18541859
/// </summary>

src/GitTools.Core/packages.config

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<packages>
3-
<package id="Costura.Fody" version="1.3.3.0" targetFramework="net45" developmentDependency="true" userInstalled="true" />
4-
<package id="Fody" version="1.29.0-beta01" targetFramework="net45" userInstalled="true" />
5-
<package id="JetBrainsAnnotations.Fody" version="1.0.2" targetFramework="net45" developmentDependency="true" userInstalled="true" />
6-
<package id="LibGit2Sharp" version="0.21.0.176" targetFramework="net45" userInstalled="true" />
7-
<package id="LibLog" version="4.2.2" targetFramework="net45" developmentDependency="true" userInstalled="true" />
8-
<package id="MethodTimer.Fody" version="1.15.3.0" targetFramework="net45" userInstalled="true" />
9-
<package id="ModuleInit.Fody" version="1.5.6.0" targetFramework="net45" developmentDependency="true" userInstalled="true" />
3+
<package id="Costura.Fody" version="1.3.3.0" targetFramework="net45" developmentDependency="true" />
4+
<package id="Fody" version="1.29.0-beta01" targetFramework="net45" />
5+
<package id="JetBrainsAnnotations.Fody" version="1.0.2" targetFramework="net45" developmentDependency="true" />
6+
<package id="LibGit2Sharp" version="0.21.0.176" targetFramework="net45" />
7+
<package id="LibLog" version="4.2.3" targetFramework="net45" />
8+
<package id="MethodTimer.Fody" version="1.15.3.0" targetFramework="net45" />
9+
<package id="ModuleInit.Fody" version="1.5.6.0" targetFramework="net45" developmentDependency="true" />
1010
</packages>

0 commit comments

Comments
 (0)