using log4net.Appender; using log4net.Core; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using WeifenLuo.WinFormsUI.Docking; namespace Voile.DockContents { public partial class DockLog : DockContent, IAppender { private static readonly log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); public DockLog() { InitializeComponent(); richTextBox1.AllowDrop = true; richTextBox1.DragEnter += RichTextBox1_DragEnter; richTextBox1.DragDrop += RichTextBox1_DragDrop; } public void Logger(string s) { richTextBox1.SuspendLayout(); richTextBox1.AppendText(s + Environment.NewLine); richTextBox1.SelectionStart = richTextBox1.Text.Length; richTextBox1.ScrollToCaret(); richTextBox1.ResumeLayout(); } private void RichTextBox1_DragDrop(object? sender, DragEventArgs e) { } private void RichTextBox1_DragEnter(object? sender, DragEventArgs e) { } bool wasInitalized; public void InitalizeLogging() { if (wasInitalized) throw new Exception("already initalized"); var hierarchy = (log4net.Repository.Hierarchy.Hierarchy)log4net.LogManager.GetRepository(); hierarchy.Root.AddAppender(this); hierarchy.Root.Level = log4net.Core.Level.All; log4net.Config.BasicConfigurator.Configure(hierarchy); wasInitalized = true; } private log4net.Layout.PatternLayout logLayout; public void DoAppend(LoggingEvent loggingEvent) { if (logLayout == null) { logLayout = new log4net.Layout.PatternLayout(); logLayout.ConversionPattern = "%date %level %logger - %message"; logLayout.ActivateOptions(); } string v = logLayout.Format(loggingEvent); Logger(v); } } }