protected override void Write(LogWriteContext context, LogEventInfo entry) { var message = Layout.GetFormattedString(context, entry); switch (entry.Level) { case LogLevel.Trace: MetroLogEventSource.Log.Trace(message); break; case LogLevel.Debug: MetroLogEventSource.Log.Debug(message); break; case LogLevel.Info: MetroLogEventSource.Log.Info(message); break; case LogLevel.Warn: MetroLogEventSource.Log.Warn(message); break; case LogLevel.Error: MetroLogEventSource.Log.Error(message); break; case LogLevel.Fatal: MetroLogEventSource.Log.Fatal(message); break; } }
protected sealed override Task <LogWriteOperation> WriteAsyncCore(LogWriteContext context, LogEventInfo entry) { try { // add... List <LogEventInfo> toFlush = null; lock (_lock) { Buffer.Add(entry); // if... if (Buffer.Count >= Threshold) { toFlush = new List <LogEventInfo>(Buffer); Buffer = new List <LogEventInfo>(); } } // anything to flush? if (toFlush != null) { return(FlushAsync(context, toFlush)); } else { return(Task.FromResult(new LogWriteOperation(this, entry, true))); } } catch (Exception ex) { InternalLogger.Current.Error($"Failed to write to target '{this}'.", ex); return(Task.FromResult(new LogWriteOperation(this, entry, false))); } }
protected override void Write(LogWriteContext context, LogEventInfo entry) { var message = Layout.GetFormattedString(context, entry); switch(entry.Level) { case LogLevel.Trace: MetroLogEventSource.Log.Trace(message); break; case LogLevel.Debug: MetroLogEventSource.Log.Debug(message); break; case LogLevel.Info: MetroLogEventSource.Log.Info(message); break; case LogLevel.Warn: MetroLogEventSource.Log.Warn(message); break; case LogLevel.Error: MetroLogEventSource.Log.Error(message); break; case LogLevel.Fatal: MetroLogEventSource.Log.Fatal(message); break; } }
public override string GetFormattedString(LogWriteContext context, LogEventInfo info) { StringBuilder builder = new StringBuilder(); builder.Append("Sequence: "); builder.Append(info.SequenceID); builder.Append("\r\nDate/time: "); builder.Append(info.TimeStamp.ToString(LogManager.DateTimeFormat)); builder.Append("\r\nLevel: "); builder.Append(info.Level.ToString().ToUpper()); builder.Append("\r\nThread: "); builder.Append(Environment.CurrentManagedThreadId); builder.Append("\r\nLogger: "); builder.Append(info.Logger); builder.Append("\r\n------------------------\r\n"); builder.Append(info.Message); if(info.Exception != null) { builder.Append("\r\n------------------------\r\n"); builder.Append(info.Exception); } builder.Append("\r\n------------------------\r\n"); builder.Append("Session: "); builder.Append(context.Environment.ToJson()); return builder.ToString(); }
protected internal override sealed Task<LogWriteOperation> WriteAsync(LogWriteContext context, LogEventInfo entry) { try { // add... List<LogEventInfo> toFlush = null; lock (_lock) { this.Buffer.Add(entry); // if... if (this.Buffer.Count >= this.Threshold) { toFlush = new List<LogEventInfo>(this.Buffer); this.Buffer = new List<LogEventInfo>(); } } // anything to flush? if (toFlush != null) return FlushAsync(context, toFlush); else return Task.FromResult(new LogWriteOperation(this, entry, true)); } catch (Exception ex) { InternalLogger.Current.Error(string.Format("Failed to write to target '{0}'.", this), ex); return Task.FromResult(new LogWriteOperation(this, entry, false)); } }
public override string GetFormattedString(LogWriteContext context, LogEventInfo info) { var builder = new StringBuilder(); builder.Append("["); builder.Append(info.TimeStamp.LocalDateTime.ToString("yyyy-MM-dd hh:mm:ss.fff ttt", CultureInfo.InvariantCulture)); builder.Append("] ["); builder.Append(Environment.CurrentManagedThreadId); builder.Append("] "); builder.Append(info.Level.ToString().ToUpper()); builder.Append(": "); builder.Append(info.Logger); if (!info.Message.StartsWith(".")) { builder.Append(" "); } builder.Append(info.Message); if (info.Exception != null) { builder.Append(" --> "); builder.Append(info.Exception); if (info.Exception.InnerException != null) { builder.Append(" inner --> "); builder.Append(info.Exception.InnerException); } } return(builder.ToString()); }
protected override async Task DoFlushAsync(LogWriteContext context, IEnumerable <LogEventInfo> toFlush) { #if REF_ASSM await Task.Delay(0); throw new InvalidOperationException("Cannot use ref assm at runtime"); #else // create a json object... var env = new LoggingEnvironment(); var wrapper = new JsonPostWrapper(env, toFlush); var json = wrapper.ToJson(); // send... var client = new HttpClient(); var content = new StringContent(json); content.Headers.ContentType.MediaType = "text/json"; // call... OnBeforePost(new HttpClientEventArgs(client)); // send... await client.PostAsync(Url, content); #endif }
public override string GetFormattedString(LogWriteContext context, LogEventInfo info) { StringBuilder builder = new StringBuilder(); builder.Append("Sequence: "); builder.Append(info.SequenceID); builder.Append("\r\nDate/time: "); builder.Append(info.TimeStamp.ToString(LogManagerBase.DateTimeFormat)); builder.Append("\r\nLevel: "); builder.Append(info.Level.ToString().ToUpper()); builder.Append("\r\nThread: "); builder.Append(Environment.CurrentManagedThreadId); builder.Append("\r\nLogger: "); builder.Append(info.Logger); builder.Append("\r\n------------------------\r\n"); builder.Append(info.Message); if (info.Exception != null) { builder.Append("\r\n------------------------\r\n"); builder.Append(info.Exception); } builder.Append("\r\n------------------------\r\n"); builder.Append("Session: "); builder.Append(context.Environment.ToJson()); return(builder.ToString()); }
protected override async Task DoFlushAsync(LogWriteContext context, IEnumerable <LogEventInfo> toFlush) { var logInformation = toFlush.ToList().Aggregate(string.Empty, (current, eventInfo) => $"{current}{eventInfo.SequenceID}|{eventInfo.TimeStamp}|{eventInfo.Level}|{eventInfo.Logger}|{eventInfo.Message} {eventInfo.ExceptionWrapper?.AsString}{Environment.NewLine}"); using (StreamWriter sourceStream = File.CreateText("newfile.txt")) // TODO pass fileName { await sourceStream.WriteAsync(logInformation); }; }
protected override void Write(LogWriteContext context, LogEventInfo entry) { if (_queue.Count == _maxLines) { _queue.Dequeue(); } _queue.Enqueue(Layout.GetFormattedString(context, entry)); Contract.Ensures(() => _queue.Count <= _maxLines); }
protected override void Write(LogWriteContext context, LogEventInfo entry) { #if REF_ASSM throw new InvalidOperationException("Cannot use ref assm at runtime"); #elif WINDOWS_PHONE_APP || WINDOWS_PHONE || NETFX_CORE || DOTNET var message = Layout.GetFormattedString(context, entry); Debug.WriteLine(message); #else var message = Layout.GetFormattedString(context, entry); Trace.WriteLine(message); #endif }
public string GetFilename(LogWriteContext context, LogEventInfo entry) { var builder = new StringBuilder(); builder.Append("Log"); if (this.IncludeLevel) { builder.Append(" - "); builder.Append(entry.Level.ToString().ToUpper()); } if (this.IncludeLogger) { builder.Append(" - "); builder.Append(entry.Logger); } if (this.IncludeTimestamp != FileTimestampMode.None) { bool date = ((int)this.IncludeTimestamp & (int)FileTimestampMode.Date) != 0; if (date) { builder.Append(" - "); builder.Append(entry.TimeStamp.ToString("yyyyMMdd")); } bool time = ((int)this.IncludeTimestamp & (int)FileTimestampMode.Time) != 0; if (time) { if (date) { builder.Append(" "); } else { builder.Append(" - "); } builder.Append(entry.TimeStamp.ToString("HHmmss")); } } if (this.IncludeSession) { builder.Append(" - "); builder.Append(context.Environment.SessionId); } if (this.IncludeSequence) { builder.Append(" - "); builder.Append(entry.SequenceID); } // return... builder.Append(".log"); return(builder.ToString()); }
protected sealed override Task<LogWriteOperation> WriteAsyncCore(LogWriteContext context, LogEventInfo entry) { try { Write(context, entry); return Task.FromResult(new LogWriteOperation(this, entry, true)); } catch (Exception ex) { InternalLogger.Current.Error($"Failed to write to target '{this}'.", ex); return Task.FromResult(new LogWriteOperation(this, entry, false)); } }
async Task ILazyFlushable.LazyFlushAsync(LogWriteContext context) { List<LogEventInfo> toFlush = null; lock (_lock) { toFlush = new List<LogEventInfo>(this.Buffer); this.Buffer = new List<LogEventInfo>(); } // flush... if(toFlush.Any()) await DoFlushAsync(context, toFlush); }
protected internal override sealed Task<LogWriteOperation> WriteAsync(LogWriteContext context, LogEventInfo entry) { try { Write(context, entry); return Task.FromResult(new LogWriteOperation(this, entry, true)); } catch (Exception ex) { InternalLogger.Current.Error(string.Format("Failed to write to target '{0}'.", this), ex); return Task.FromResult(new LogWriteOperation(this, entry, false)); } }
protected override sealed Task <LogWriteOperation> WriteAsyncCore(LogWriteContext context, LogEventInfo entry) { try { Write(context, entry); return(Task.FromResult(new LogWriteOperation(this, entry, true))); } catch (Exception ex) { InternalLogger.Current.Error(string.Format("Failed to write to target '{0}'.", this), ex); return(Task.FromResult(new LogWriteOperation(this, entry, false))); } }
sealed protected override async Task <LogWriteOperation> WriteAsyncCore(LogWriteContext context, LogEventInfo entry) { using (await _lock.LockAsync()) { await EnsureInitialized(); await CheckCleanupAsync(); var filename = FileNamingParameters.GetFilename(context, entry); var contents = Layout.GetFormattedString(context, entry); return(await DoWriteAsync(filename, contents, entry)); } }
protected override async Task<LogWriteOperation> WriteAsyncCore(LogWriteContext context, LogEventInfo entry) { await EnsureInitialize(); // cleanup await CheckCleanup(); // ok... var conn = GetConnection(); var session = await GetSessionAsync(context.Environment); await conn.InsertAsync(LogEventInfoItem.GetForInsert(context, entry, session)); // return... return new LogWriteOperation(this, entry, true); }
public string GetFilename(LogWriteContext context, LogEventInfo entry) { var builder = new StringBuilder(); builder.Append("Log"); if (this.IncludeLevel) { builder.Append(" - "); builder.Append(entry.Level.ToString().ToUpper()); } if (this.IncludeLogger) { builder.Append(" - "); builder.Append(entry.Logger); } if (this.IncludeTimestamp != FileTimestampMode.None) { bool date = ((int)this.IncludeTimestamp & (int)FileTimestampMode.Date) != 0; if (date) { builder.Append(" - "); builder.Append(entry.TimeStamp.ToString("yyyyMMdd")); } bool time = ((int)this.IncludeTimestamp & (int)FileTimestampMode.Time) != 0; if(time) { if(date) builder.Append(" "); else builder.Append(" - "); builder.Append(entry.TimeStamp.ToString("HHmmss")); } } if (this.IncludeSession) { builder.Append(" - "); builder.Append(context.Environment.SessionId); } if (this.IncludeSequence) { builder.Append(" - "); builder.Append(entry.SequenceID); } // return... builder.Append(".log"); return builder.ToString(); }
protected override async Task <LogWriteOperation> WriteAsyncCore(LogWriteContext context, LogEventInfo entry) { await EnsureInitialize(); // cleanup await CheckCleanup(); // ok... var conn = GetConnection(); var session = await GetSessionAsync(context.Environment); await conn.InsertAsync(LogEventInfoItem.GetForInsert(context, entry, session)); // return... return(new LogWriteOperation(this, entry, true)); }
async Task ILazyFlushable.LazyFlushAsync(LogWriteContext context) { List <LogEventInfo> toFlush = null; lock (_lock) { toFlush = new List <LogEventInfo>(Buffer); Buffer = new List <LogEventInfo>(); } // flush... if (toFlush.Any()) { await DoFlushAsync(context, toFlush); } }
async Task <LogWriteOperation> FlushAsync(LogWriteContext context, IEnumerable <LogEventInfo> toFlush) { try { await DoFlushAsync(context, toFlush); // this is a slight cheat in that we return the first one back, even though we may have // written more... return(new LogWriteOperation(this, toFlush, true)); } catch (Exception ex) { InternalLogger.Current.Error($"Failed to flush for target '{this}'.", ex); return(new LogWriteOperation(this, toFlush, false)); } }
private async Task<LogWriteOperation> FlushAsync(LogWriteContext context, IEnumerable<LogEventInfo> toFlush) { try { await DoFlushAsync(context, toFlush); // this is a slight cheat in that we return the first one back, even though we may have // written more... return new LogWriteOperation(this, toFlush, true); } catch (Exception ex) { InternalLogger.Current.Error(string.Format("Failed to flush for target '{0}'.", this), ex); return new LogWriteOperation(this, toFlush, false); } }
protected override async Task DoFlushAsync(LogWriteContext context, IEnumerable<LogEventInfo> toFlush) { // create a json object... var env = PlatformAdapter.Resolve<ILoggingEnvironment>(); var wrapper = new JsonPostWrapper(env, toFlush); var json = wrapper.ToJson(); // send... var client = new HttpClient(); var content = new StringContent(json); content.Headers.ContentType.MediaType = "text/json"; // call... this.OnBeforePost(new HttpClientEventArgs(client)); // send... await client.PostAsync(this.Url, content); }
protected override async Task<LogWriteOperation> WriteAsync(LogWriteContext context, LogEventInfo entry) { var folder = await FileSnapshotTarget.EnsureInitializedAsync(); // cleanup... await this.CheckCleanupAsync(folder); // write... var filename = this.FileNamingParameters.GetFilename(context, entry); var file = await folder.CreateFileAsync(filename, CreationCollisionOption.OpenIfExists); // need to append a session header... // append... await FileIO.AppendTextAsync(file, this.Layout.GetFormattedString(context, entry) + "\r\n"); // return... return new LogWriteOperation(this, entry, true); }
internal static LogEventInfoItem GetForInsert(LogWriteContext context, LogEventInfo info, SessionHeaderItem session) { var item = new LogEventInfoItem() { SessionId = session.SessionId, DateTimeUtc = info.TimeStamp.UtcDateTime, SequenceId = info.SequenceID, Level = info.Level, Logger = info.Logger, Message = info.Message }; // if... if (info.Exception != null) item.SetException(info.Exception); // return... return item; }
public void TestEverythingOn() { var naming = new FileNamingParameters() { IncludeLevel = true, IncludeLogger = true, IncludeSequence = true, IncludeSession = true, IncludeTimestamp = FileTimestampMode.DateTime }; // ok... var info = GetLogEventInfo(); // check... var context = new LogWriteContext(); var filename = naming.GetFilename(context, info); Assert.Equal($"Log - INFO - foobar - {LogManager.GetDateTime() .ToString("yyyyMMdd HHmmss")} - {context.Environment.SessionId} - {info.SequenceID}.log", filename); }
protected override async Task<LogWriteOperation> WriteAsync(LogWriteContext context, LogEventInfo entry) { var folder = await EnsureInitializedAsync(); if (folder == null) return new LogWriteOperation(this, entry, false); // cleanup... await this.CheckCleanupAsync(folder); // create the file... var filename = this.FileNamingParameters.GetFilename(context, entry); var file = await folder.CreateFileAsync(filename).AsTask(); // write... string buf = this.Layout.GetFormattedString(context, entry); await FileIO.WriteTextAsync(file, buf); // return... return new LogWriteOperation(this, entry, true); }
public void TestEverythingOn() { var naming = new FileNamingParameters() { IncludeLevel = true, IncludeLogger = true, IncludeSequence = true, IncludeSession = true, IncludeTimestamp = FileTimestampMode.DateTime }; // ok... var info = GetLogEventInfo(); // check... var context = new LogWriteContext(); var filename = naming.GetFilename(context, info); Assert.Equal(string.Format("Log - INFO - foobar - {0} - {1} - {2}.log", LogManager.GetDateTime().ToString("yyyyMMdd HHmmss"), context.Environment.SessionId, info.SequenceID), filename); }
protected override async Task DoFlushAsync(LogWriteContext context, IEnumerable <LogEventInfo> toFlush) { // create a json object... var env = PlatformAdapter.Resolve <ILoggingEnvironment>(); var wrapper = new JsonPostWrapper(env, toFlush); var json = wrapper.ToJson(); // send... var client = new HttpClient(); var content = new StringContent(json); content.Headers.ContentType.MediaType = "text/json"; // call... this.OnBeforePost(new HttpClientEventArgs(client)); // send... await client.PostAsync(this.Url, content); }
async Task <LogWriteOperation[]> LogInternal(LogLevel level, string message, object[] ps, Exception ex, bool doFormat) { try { if (_configuration.IsEnabled == false) { return(EmptyOperations); } var targets = _configuration.GetTargets(level); if (!(targets.Any())) { return(EmptyOperations); } // format? if (doFormat) { message = string.Format(message, ps); } // create an event entry and pass it through... var entry = new LogEventInfo(level, Name, message, ex); // create a context... var context = new LogWriteContext(); // gather the tasks... var writeTasks = from target in targets select target.WriteAsync(context, entry); // group... var group = await Task.WhenAll(writeTasks).ConfigureAwait(false); return(group); } catch (Exception logEx) { InternalLogger.Current.Error("Logging operation failed.", logEx); return(EmptyOperations); } }
internal static LogEventInfoItem GetForInsert(LogWriteContext context, LogEventInfo info, SessionHeaderItem session) { var item = new LogEventInfoItem() { SessionId = session.SessionId, DateTimeUtc = info.TimeStamp.UtcDateTime, SequenceId = info.SequenceID, Level = info.Level, Logger = info.Logger, Message = info.Message }; // if... if (info.Exception != null) { item.SetException(info.Exception); } // return... return(item); }
public override string GetFormattedString(LogWriteContext context, LogEventInfo info) { var builder = new StringBuilder(); builder.Append(info.SequenceID); builder.Append("|"); builder.Append(info.TimeStamp.ToString(LogManager.DateTimeFormat)); builder.Append("|"); builder.Append(info.Level.ToString().ToUpper()); builder.Append("|"); builder.Append(Environment.CurrentManagedThreadId); builder.Append("|"); builder.Append(info.Logger); builder.Append("|"); builder.Append(info.Message); if (info.Exception != null) { builder.Append(" --> "); builder.Append(info.Exception); } return builder.ToString(); }
protected sealed override async Task <LogWriteOperation> WriteAsyncCore(LogWriteContext context, LogEventInfo entry) { using (await _lock.LockAsync().ConfigureAwait(false)) { await EnsureInitialized().ConfigureAwait(false); await CheckCleanupAsync().ConfigureAwait(false); var filename = FileNamingParameters.GetFilename(context, entry); var contents = Layout.GetFormattedString(context, entry); var sw = await GetOrCreateStreamWriterForFile(filename).ConfigureAwait(false); var op = await DoWriteAsync(sw, contents, entry); if (!KeepLogFilesOpenForWrite) { sw.Dispose(); } return(op); } }
public override string GetFormattedString(LogWriteContext context, LogEventInfo info) { StringBuilder builder = new StringBuilder(); builder.Append(info.SequenceID); builder.Append("|"); builder.Append(info.TimeStamp.ToString(LogManagerBase.DateTimeFormat)); builder.Append("|"); builder.Append(info.Level.ToString().ToUpper()); builder.Append("|"); builder.Append(Environment.CurrentManagedThreadId); builder.Append("|"); builder.Append(info.Logger); builder.Append("|"); builder.Append(info.Message); if (info.Exception != null) { builder.Append(" --> "); builder.Append(info.Exception); } return(builder.ToString()); }
public void TestRegexEverythingOn() { var naming = new FileNamingParameters() { IncludeLevel = true, IncludeLogger = true, IncludeSequence = true, IncludeSession = true, IncludeTimestamp = FileTimestampMode.DateTime }; // get... var regex = naming.GetRegex(); // create... var info = GetLogEventInfo(); // check... var context = new LogWriteContext(); var filename = naming.GetFilename(context, info); // check... Assert.True(regex.Match(filename).Success); }
protected override async Task DoFlushAsync(LogWriteContext context, IEnumerable<LogEventInfo> toFlush) { #if REF_ASSM await Task.Delay(0); throw new InvalidOperationException("Cannot use ref assm at runtime"); #else // create a json object... var env = new LoggingEnvironment(); var wrapper = new JsonPostWrapper(env, toFlush); var json = wrapper.ToJson(); // send... var client = new HttpClient(); var content = new StringContent(json); content.Headers.ContentType.MediaType = "text/json"; // call... OnBeforePost(new HttpClientEventArgs(client)); // send... await client.PostAsync(Url, content); #endif }
protected abstract Task<LogWriteOperation> WriteAsyncCore(LogWriteContext context, LogEventInfo entry);
internal async Task<LogWriteOperation> WriteAsync(LogWriteContext context, LogEventInfo entry) { return await WriteAsyncCore(context, entry).ConfigureAwait(false); }
protected override void Write(LogWriteContext context, LogEventInfo entry) { Action(entry); }
protected override void Write(LogWriteContext context, LogEventInfo entry) { var message = Layout.GetFormattedString(context, entry); Debug.WriteLine(message); }
private Task<LogWriteOperation[]> LogInternal(LogLevel level, string message, object[] ps, Exception ex, bool doFormat) { try { if (_configuration.IsEnabled == false) return EmptyOperations; var targets = _configuration.GetTargets(level); if (!(targets.Any())) return EmptyOperations; // format? if (doFormat) message = string.Format(message, ps); // create an event entry and pass it through... var entry = new LogEventInfo(level, Name, message, ex); // create a context... var context = new LogWriteContext(); // gather the tasks... var writeTasks = from target in targets select target.WriteAsync(context, entry); // group... var group = Task.WhenAll(writeTasks); return group; } catch (Exception logEx) { InternalLogger.Current.Error("Logging operation failed.", logEx); return EmptyOperations; } }
protected override void Write(LogWriteContext context, LogEventInfo entry) { var message = Layout.GetFormattedString(context, entry); _onMessage(message); }
protected abstract void Write(LogWriteContext context, LogEventInfo entry);
sealed protected override async Task<LogWriteOperation> WriteAsyncCore(LogWriteContext context, LogEventInfo entry) { using (await _lock.LockAsync()) { await EnsureInitialized(); await CheckCleanupAsync(); var filename = FileNamingParameters.GetFilename(context, entry); var contents = Layout.GetFormattedString(context, entry); return await DoWriteAsync(filename, contents, entry); } }
protected override void Write(LogWriteContext context, LogEventInfo entry) { // broken... throw new NotImplementedException(); }
protected abstract Task DoFlushAsync(LogWriteContext context, IEnumerable <LogEventInfo> toFlush);
protected internal abstract Task<LogWriteOperation> WriteAsync(LogWriteContext context, LogEventInfo entry);
/// <summary> /// Returns the formatted log event. /// </summary> /// <param name="context">The logging context.</param> /// <param name="info">The log event for format.</param> /// <returns>The foramtted string.</returns> public abstract string GetFormattedString(LogWriteContext context, LogEventInfo info);
public override string GetFormattedString(LogWriteContext context, LogEventInfo info) { return(string.Empty); }
protected override void Write(LogWriteContext context, LogEventInfo entry) { Console.WriteLine(Layout.GetFormattedString(context, entry)); }
protected override void Write(LogWriteContext context, LogEventInfo entry) { NumWritten++; LastWritten = entry; }
public override string GetFormattedString(LogWriteContext context, LogEventInfo info) { return string.Empty; }
public override string GetFormattedString(LogWriteContext context, LogEventInfo info) { return Environment.CurrentManagedThreadId.ToString(); }
protected abstract Task DoFlushAsync(LogWriteContext context, IEnumerable<LogEventInfo> toFlush);