using System.Threading.Tasks;
using NLog.Targets.Wrappers;
public static void Main()
var target = new NLog.Targets.ColoredConsoleTarget();
target.Layout= NLog.Layouts.Layout.FromString("${date:format=HH\\:mm\\:ss} ${pad:padCharacter= :padding=10:fixedLength=True:inner=${logger}} ${mdlc:item=ProcessDescriptorId} ${threadid} ${message} ${exception:format=tostring} ${exception:format=stacktrace}");
var wrapper = new AsyncTargetWrapper();
wrapper.WrappedTarget = target;
wrapper.QueueLimit = 5000;
wrapper.OverflowAction = AsyncTargetWrapperOverflowAction.Discard;
NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(wrapper, LogLevel.Debug);
Log = LogManager.GetLogger("MainThread");
var o = OuterClass.Instance;
System.Threading.Thread.Sleep(1000);
static Logger Log = LogManager.GetLogger("OuterClass");
private static InnerClass _innerClass;
public static OuterClass Instance { get; private set; }
Log.Debug("Constructor called");
_innerClass = new InnerClass();
Instance = new OuterClass();
static Logger Log = LogManager.GetLogger("InnerClass");
LoadOrUpdateDataAsync().Wait();
public async Task LoadOrUpdateDataAsync()
_data = await DataClass.GetDataAsync("https://google.com");
Log.Debug("If you see this, it did not block");
public static class DataClass
static Logger Log = LogManager.GetLogger("DataClass");
public static async Task<string> GetDataAsync(string uri)
using (var client = new System.Net.Http.HttpClient())
var data = await client.GetStringAsync(uri);
Log.Debug("Data loaded from {0}", uri);