public static void Request(this ILog log, string name, Action call, params KeyValuePair <string, object>[] properties) { using (var time = new TimeMeasure()) { try { call(); log.Request(name, time.ElapsedTicks, null, properties); } catch (Exception ex) { log.Request(name, time.ElapsedTicks, ex, properties); throw; } } }
/// <summary> /// Track dependency automatically, measure time and handle exceptions /// </summary> /// <typeparam name="T"></typeparam> /// <param name="log">The log.</param> /// <param name="type">The type.</param> /// <param name="name">The name.</param> /// <param name="command">The command.</param> /// <param name="call">The call.</param> /// <param name="properties">Extra properties</param> public static void Dependency(this ILog log, string type, string name, string command, Action call, params KeyValuePair <string, object>[] properties) { using (var time = new TimeMeasure()) { try { call(); log.Dependency(type, name, command, time.ElapsedTicks, null, properties); } catch (Exception ex) { log.Dependency(type, name, command, time.ElapsedTicks, ex, properties); throw; } } }
/// <summary> /// Track dependency automatically, measure time and handle exceptions /// </summary> /// <typeparam name="T"></typeparam> /// <param name="log">The log.</param> /// <param name="type">The type.</param> /// <param name="name">The name.</param> /// <param name="command">The command.</param> /// <param name="call">The call.</param> /// <returns></returns> public static async Task <T> Dependency <T>(this ILog log, string type, string name, string command, Func <Task <T> > call) { using (var time = new TimeMeasure()) { try { T result = await call(); log.Dependency(type, name, command, time.ElapsedTicks); return(result); } catch (Exception ex) { log.Dependency(type, name, command, time.ElapsedTicks, ex); throw; } } }
/// <summary> /// Track dependency automatically, measure time and handle exceptions /// </summary> /// <typeparam name="T"></typeparam> /// <param name="log">The log.</param> /// <param name="type">The type.</param> /// <param name="name">The name.</param> /// <param name="command">The command.</param> /// <param name="call">The call.</param> /// <param name="properties">Extra properties</param> public static async Task <T> DependencyAsync <T>(this ILog log, string type, string name, string command, Func <Task <T> > call, params KeyValuePair <string, object>[] properties) { using (var time = new TimeMeasure()) { try { T result = await call(); log.Dependency(type, name, command, time.ElapsedTicks, null, properties); return(result); } catch (Exception ex) { log.Dependency(type, name, command, time.ElapsedTicks, ex, properties); throw; } } }
/// <summary> /// Track dependency with automation time measurement and error handling /// </summary> public static async Task <T> DependencyAsync <T>(this ILog log, string name, string command, Task <T> action, params object[] properties) { using (var time = new TimeMeasure()) { try { T result = await action; log.Dependency(name, name, command, time.ElapsedTicks, null, properties); return(result); } catch (Exception ex) { log.Dependency(name, name, command, time.ElapsedTicks, ex, properties); throw; } } }