2012-07-28 01:28:39 +06:00
using System ;
using System.Collections.Generic ;
using System.Linq ;
using System.Text ;
using System.Threading ;
2012-08-29 07:47:16 +07:00
using System.Web ;
2012-07-28 01:28:39 +06:00
using log4net ;
2012-07-28 00:13:06 +06:00
2012-07-28 01:28:39 +06:00
namespace Umbraco.Core.Logging
{
///<summary>
/// Used for logging
///</summary>
internal static class LogHelper
{
///<summary>
/// Returns a logger for the type specified
///</summary>
///<typeparam name="T"></typeparam>
///<returns></returns>
public static ILog LoggerFor < T > ( )
{
return LogManager . GetLogger ( typeof ( T ) ) ;
}
2012-07-28 00:13:06 +06:00
2012-07-28 01:28:39 +06:00
/// <summary>
/// Returns a logger for the object's type
/// </summary>
/// <param name="getTypeFromInstance"></param>
/// <returns></returns>
public static ILog LoggerFor ( object getTypeFromInstance )
{
if ( getTypeFromInstance = = null ) throw new ArgumentNullException ( "getTypeFromInstance" ) ;
return LogManager . GetLogger ( getTypeFromInstance . GetType ( ) ) ;
}
2012-07-28 00:13:06 +06:00
2012-07-28 23:40:48 +06:00
/// <summary>
/// Useful if the logger itself is running on another thread
/// </summary>
/// <param name="generateMessageFormat"></param>
/// <returns></returns>
private static string PrefixThreadId ( string generateMessageFormat )
{
return "[Thread " + Thread . CurrentThread . ManagedThreadId + "] " + generateMessageFormat ;
}
#region Error
2012-07-28 01:28:39 +06:00
/// <summary>
/// Adds an error log
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="message"></param>
/// <param name="exception"></param>
public static void Error < T > ( string message , Exception exception )
{
var logger = LoggerFor < T > ( ) ;
if ( logger ! = null )
logger . Error ( PrefixThreadId ( message ) , exception ) ;
}
2012-07-28 23:40:48 +06:00
#endregion
2012-07-28 00:13:06 +06:00
2012-10-01 23:04:57 +05:00
#region Warn
public static void Warn ( Type callingType , string message , params object [ ] format )
2012-07-28 01:28:39 +06:00
{
var logger = LogManager . GetLogger ( callingType ) ;
if ( logger ! = null )
2012-10-01 23:04:57 +05:00
logger . WarnFormat ( PrefixThreadId ( message ) , format ) ;
2012-07-28 01:28:39 +06:00
}
2012-07-28 00:13:06 +06:00
2012-10-01 23:04:57 +05:00
public static void Warn ( Type callingType , TraceContext trace , string message , params object [ ] format )
2012-07-28 01:28:39 +06:00
{
2012-10-01 23:04:57 +05:00
if ( trace ! = null )
{
trace . Warn ( string . Format ( message , format ) ) ;
}
2012-07-28 01:28:39 +06:00
var logger = LogManager . GetLogger ( callingType ) ;
if ( logger ! = null )
logger . WarnFormat ( PrefixThreadId ( message ) , format ) ;
2012-10-01 23:04:57 +05:00
2012-07-28 01:28:39 +06:00
}
2012-07-28 00:13:06 +06:00
2012-07-28 01:28:39 +06:00
/// <summary>
/// Adds a warn log
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="message"></param>
2012-10-01 23:04:57 +05:00
/// <param name="items"></param>
public static void Warn < T > ( string message , params object [ ] items )
2012-07-28 01:28:39 +06:00
{
var logger = LoggerFor < T > ( ) ;
if ( logger ! = null )
2012-10-01 23:04:57 +05:00
logger . WarnFormat ( PrefixThreadId ( message ) , items ) ;
2012-07-28 01:28:39 +06:00
}
2012-07-28 00:13:06 +06:00
2012-10-01 23:04:57 +05:00
public static void Warn < T > ( string message , TraceContext trace , params object [ ] items )
2012-07-28 01:28:39 +06:00
{
2012-10-01 23:04:57 +05:00
if ( trace ! = null )
{
trace . Warn ( string . Format ( message , items ) ) ;
}
2012-07-28 01:28:39 +06:00
var logger = LoggerFor < T > ( ) ;
if ( logger ! = null )
2012-10-01 23:04:57 +05:00
logger . WarnFormat ( PrefixThreadId ( message ) , items ) ;
2012-07-28 23:40:48 +06:00
}
2012-10-01 23:04:57 +05:00
2012-07-28 23:40:48 +06:00
#endregion
2012-07-28 00:13:06 +06:00
2012-07-28 23:40:48 +06:00
#region Info
2012-07-28 01:28:39 +06:00
/// <summary>
/// Traces a message, only generating the message if tracing is actually enabled. Use this method to avoid calling any long-running methods such as "ToDebugString" if logging is disabled.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="generateMessage">The delegate to generate a message.</param>
/// <remarks></remarks>
public static void Info < T > ( Func < string > generateMessage )
{
Info ( typeof ( T ) , generateMessage ) ;
}
2012-07-28 00:13:06 +06:00
2012-07-28 23:40:48 +06:00
/// <summary>
/// Traces if tracing is enabled.
/// </summary>
/// <param name="callingType"></param>
/// <param name="generateMessage"></param>
2012-07-28 01:28:39 +06:00
public static void Info ( Type callingType , Func < string > generateMessage )
{
var logger = LogManager . GetLogger ( callingType ) ;
if ( logger = = null | | ! logger . IsInfoEnabled ) return ;
logger . Info ( PrefixThreadId ( generateMessage . Invoke ( ) ) ) ;
}
2012-07-28 00:13:06 +06:00
2012-07-28 01:28:39 +06:00
/// <summary>
/// Traces if tracing is enabled.
/// </summary>
/// <param name="type">The type for the logging namespace.</param>
/// <param name="generateMessageFormat">The message format.</param>
/// <param name="formatItems">The format items.</param>
public static void Info ( Type type , string generateMessageFormat , params Func < object > [ ] formatItems )
{
var logger = LogManager . GetLogger ( type ) ;
if ( logger = = null | | ! logger . IsInfoEnabled ) return ;
var executedParams = formatItems . Select ( x = > x . Invoke ( ) ) . ToArray ( ) ;
logger . InfoFormat ( PrefixThreadId ( generateMessageFormat ) , executedParams ) ;
}
/// <summary>
/// Traces a message, only generating the message if tracing is actually enabled. Use this method to avoid calling any long-running methods such as "ToDebugString" if logging is disabled.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="generateMessageFormat">The generate message format.</param>
/// <param name="formatItems">The format items.</param>
/// <remarks></remarks>
public static void Info < T > ( string generateMessageFormat , params Func < object > [ ] formatItems )
{
2012-07-28 23:40:48 +06:00
Info ( typeof ( T ) , generateMessageFormat , formatItems ) ;
}
#endregion
#region Debug
/// <summary>
/// Debugs a message, only generating the message if tracing is actually enabled. Use this method to avoid calling any long-running methods such as "ToDebugString" if logging is disabled.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="generateMessage">The delegate to generate a message.</param>
/// <remarks></remarks>
public static void Debug < T > ( Func < string > generateMessage )
{
Debug ( typeof ( T ) , generateMessage ) ;
}
/// <summary>
/// Debugs if tracing is enabled.
/// </summary>
/// <param name="callingType"></param>
/// <param name="generateMessage"></param>
public static void Debug ( Type callingType , Func < string > generateMessage )
{
var logger = LogManager . GetLogger ( callingType ) ;
if ( logger = = null | | ! logger . IsDebugEnabled ) return ;
logger . Debug ( PrefixThreadId ( generateMessage . Invoke ( ) ) ) ;
}
/// <summary>
/// Debugs if tracing is enabled.
/// </summary>
/// <param name="type">The type for the logging namespace.</param>
/// <param name="generateMessageFormat">The message format.</param>
/// <param name="formatItems">The format items.</param>
public static void Debug ( Type type , string generateMessageFormat , params Func < object > [ ] formatItems )
{
var logger = LogManager . GetLogger ( type ) ;
if ( logger = = null | | ! logger . IsDebugEnabled ) return ;
var executedParams = formatItems . Select ( x = > x . Invoke ( ) ) . ToArray ( ) ;
logger . DebugFormat ( PrefixThreadId ( generateMessageFormat ) , executedParams ) ;
2012-07-28 01:28:39 +06:00
}
2012-07-28 23:40:48 +06:00
/// <summary>
2012-08-29 07:47:16 +07:00
/// Debugs a message, only generating the message if debug is actually enabled. Use this method to avoid calling any long-running methods such as "ToDebugString" if logging is disabled.
2012-07-28 23:40:48 +06:00
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="generateMessageFormat">The generate message format.</param>
/// <param name="formatItems">The format items.</param>
/// <remarks></remarks>
public static void Debug < T > ( string generateMessageFormat , params Func < object > [ ] formatItems )
{
Debug ( typeof ( T ) , generateMessageFormat , formatItems ) ;
}
2012-08-29 07:47:16 +07:00
/// <summary>
/// Debugs a message and also writes to the TraceContext specified, useful for when you would like the debug
/// output also displayed in the Http trace output.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="generateMessageFormat"></param>
/// <param name="trace"></param>
/// <param name="formatItems"></param>
public static void Debug < T > ( string generateMessageFormat , TraceContext trace , params Func < object > [ ] formatItems )
{
2012-09-05 08:01:53 +07:00
if ( trace ! = null )
{
trace . Write ( string . Format ( generateMessageFormat , formatItems . Select ( x = > x ( ) ) ) ) ;
}
2012-08-29 07:47:16 +07:00
Debug ( typeof ( T ) , generateMessageFormat , formatItems ) ;
}
2012-07-28 23:40:48 +06:00
#endregion
2012-07-28 01:28:39 +06:00
}
}