// Triton.Common.LogUtilities.CustomLogger
// Token: 0x04000BD8 RID: 3032
private Level level_0 = Level.All;
// Token: 0x04000BD9 RID: 3033
private Level level_1 = Level.Emergency;
// Token: 0x06001779 RID: 6009 RVA: 0x000D3D08 File Offset: 0x000D1F08
public CustomLogger(string path, string prefix, Level minLevel, Level maxLevel)
{
this.string_0 = prefix;
this.level_0 = (minLevel ?? Level.All);
this.level_1 = (maxLevel ?? Level.Emergency);
Directory.CreateDirectory(path);
PatternLayout patternLayout = new PatternLayout("%-4utcdate [%thread] %-5level %logger{1} %ndc - %message%newline");
DateTime now = DateTime.Now;
this.FileName = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), string.Format("{6}\\{7} {5} {0:0000}-{1:00}-{2:00} {3:00}.{4:00}.txt", new object[]
{
now.Year,
now.Month,
now.Day,
now.Hour,
now.Minute,
Process.GetCurrentProcess().Id,
path,
this.string_0
}));
FileAppender fileAppender = new FileAppender
{
File = this.FileName,
Layout = patternLayout,
LockingModel = new FileAppender.MinimalLock()
};
fileAppender.AddFilter(new LevelRangeFilter
{
LevelMin = this.level_0,
LevelMax = this.level_1,
AcceptOnMatch = true
});
patternLayout.ActivateOptions();
fileAppender.ActivateOptions();
AsyncAppender asyncAppender = new AsyncAppender();
asyncAppender.AddAppender(fileAppender);
asyncAppender.ActivateOptions();
Hierarchy hierarchy = (Hierarchy)LogManager.CreateRepository(this.string_0);
hierarchy.Root.AddAppender(asyncAppender);
hierarchy.Configured = true;
}
// Triton.Common.LogUtilities.CustomLogger
// Token: 0x0600177C RID: 6012 RVA: 0x000D3F1C File Offset: 0x000D211C
public void AddWpfListener(ScrollViewer scrollViewer, RichTextBox rtbLog)
{
PatternLayout patternLayout = new PatternLayout("%message");
this.wpfRtfAppender_0 = new WpfRtfAppender(scrollViewer, rtbLog)
{
Layout = patternLayout
};
LevelRangeFilter levelRangeFilter = new LevelRangeFilter();
levelRangeFilter.LevelMin = this.level_0;
levelRangeFilter.LevelMax = this.level_1;
this.wpfRtfAppender_0.AddFilter(levelRangeFilter);
patternLayout.ActivateOptions();
this.wpfRtfAppender_0.ActivateOptions();
AsyncAppender asyncAppender = new AsyncAppender();
asyncAppender.AddAppender(this.wpfRtfAppender_0);
asyncAppender.ActivateOptions();
((Hierarchy)LogManager.GetRepository(this.string_0)).Root.AddAppender(asyncAppender);
}

如何把日志输出到MainWindow

// Hearthbuddy.Windows.MainWindow
// Token: 0x0400014B RID: 331
private bool bool_0 = true;
// Token: 0x04000150 RID: 336
private readonly Stopwatch stopwatch_0 = new Stopwatch();
// Token: 0x060001FE RID: 510 RVA: 0x00003C20 File Offset: 0x00001E20
public MainWindow()
{
this.InitializeComponent();
Logger.AddWpfListener(this.scrollViewer_0, this.richTextBox_0);
}
// Triton.Common.LogUtilities.Logger
// Token: 0x06001782 RID: 6018 RVA: 0x00010FE5 File Offset: 0x0000F1E5
public static void AddWpfListener(ScrollViewer scrollViewer, RichTextBox rtbLog)
{
Logger.customLogger_0.AddWpfListener(scrollViewer, rtbLog);
}
// Triton.Common.LogUtilities.CustomLogger
// Token: 0x0600177C RID: 6012 RVA: 0x000D3F24 File Offset: 0x000D2124
public void AddWpfListener(ScrollViewer scrollViewer, RichTextBox rtbLog)
{
PatternLayout patternLayout = new PatternLayout("%date{yyyy-MM-dd HH:mm:ss.fffzzz} [%thread] %-5level %logger - %message%newline");
this.wpfRtfAppender_0 = new WpfRtfAppender(scrollViewer, rtbLog)
{
Layout = patternLayout
};
LevelRangeFilter levelRangeFilter = new LevelRangeFilter();
levelRangeFilter.LevelMin = this.level_0;
levelRangeFilter.LevelMax = this.level_1;
this.wpfRtfAppender_0.AddFilter(levelRangeFilter);
patternLayout.ActivateOptions();
this.wpfRtfAppender_0.ActivateOptions();
AsyncAppender asyncAppender = new AsyncAppender();
asyncAppender.AddAppender(this.wpfRtfAppender_0);
asyncAppender.ActivateOptions();
((Hierarchy)LogManager.GetRepository(this.string_0)).Root.AddAppender(asyncAppender);
}

输出日志的颜色控制

// Triton.Common.LogUtilities.WpfRtfAppender
// Token: 0x060017AA RID: 6058 RVA: 0x000D40E4 File Offset: 0x000D22E4
private void method_0(object sender, EventArgs e)
{
try
{
this.dispatcherTimer_0.Stop();
SolidColorBrush solidColorBrush = this.InfoBrush;
StringBuilder stringBuilder = new StringBuilder();
Action<StringBuilder, SolidColorBrush> action = new Action<StringBuilder, SolidColorBrush>(this.method_1);
if (this.paragraph_0 == null)
{
this.richTextBox_0.Document.Blocks.Clear();
this.paragraph_0 = new Paragraph();
this.paragraph_0.Margin = new Thickness(0.0);
this.richTextBox_0.Document.Blocks.Add(this.paragraph_0);
}
if (this.int_0 >= )
{
this.paragraph_0.Inlines.Clear();
this.int_0 = ;
}
LoggingEvent loggingEvent;
while (this.concurrentQueue_0.TryDequeue(out loggingEvent))
{
loggingEvent.Fix = FixFlags.All;
string value = base.RenderLoggingEvent(loggingEvent);
string name = loggingEvent.Level.Name;
SolidColorBrush solidColorBrush2;
if (!(name == "DEBUG"))
{
if (!(name == "ERROR"))
{
if (!(name == "WARN"))
{
solidColorBrush2 = this.InfoBrush;
}
else
{
solidColorBrush2 = this.WarnBrush;
}
}
else
{
solidColorBrush2 = this.ErrorBrush;
}
}
else
{
solidColorBrush2 = this.DebugBrush;
}
if (!object.Equals(solidColorBrush2, solidColorBrush))
{
action(stringBuilder, solidColorBrush);
stringBuilder.Clear();
solidColorBrush = solidColorBrush2;
}
stringBuilder.AppendLine(value);
this.int_0++;
}
if (stringBuilder.Length != )
{
action(stringBuilder, solidColorBrush);
this.int_0++;
}
if (this.scrollViewer_0.ScrollableHeight.Equals(this.scrollViewer_0.ContentVerticalOffset))
{
this.scrollViewer_0.ScrollToEnd();
}
}
finally
{
this.dispatcherTimer_0.Start();
}
}

HearthBuddy 日志模块的更多相关文章

  1. 【腾讯Bugly干货分享】微信mars 的高性能日志模块 xlog

    本文来自于腾讯bugly开发者社区,未经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/581c2c46bef1702a2db3ae53 Dev Club 是一个交流移动 ...

  2. Python 日志模块 logging通过配置文件方式使用

    vim logger_config.ini[loggers]keys=root,infoLogger,errorlogger [logger_root]level=DEBUGhandlers=info ...

  3. 搭建一套自己实用的.net架构(2)【日志模块-log4net】

    先谈谈简单的模块,日志.在系统中日志模块是必须的,什么系统日志,操作日志,调试日志.这里用的是log4net. 对log4net还不熟悉的小伙伴们赶快去搜索基础教程哦, 我这里就不温故了. 那么有人要 ...

  4. logging 日志模块学习

    logging 日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系统的运行状况进行跟踪,所以还是灰常重要滴,下面我就来从入门到放弃的系统学习一下日志既可以在屏幕上显示,又可以在文件中体现. ...

  5. 【腾讯Bugly干货分享】微信终端跨平台组件 mars 系列(一) - 高性能日志模块xlog

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57ff5932cde42f1f03de29b1 本文来源: 微信客户端开发团队 ...

  6. 日志模块logging使用心得

    在应用程序使用中,日志输出对应用维护人员.开发人员判断程序的问题起重要作用. 那么在python中如何定义程序的日志输出? 推荐使用日志模块logging 需求:实现日志内容输出在文件中和控制器中 i ...

  7. python日志模块

    许多应用程序中都会有日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系 统的运行状况进行跟踪.在.NET平台中,有非常著名的第三方开源日志组件log4net,c++中,有人们熟悉的log4c ...

  8. ns3 Tutorial 中的日志模块(翻译)

      转载地址:http://blog.sina.com.cn/s/blog_8ecca79b0101d7fe.html     1  日志模块的使用   在运行 first.cc 脚本时,我们已经简单 ...

  9. logging日志模块

    为什么要做日志: 审计跟踪:但错误发生时,你需要清除知道该如何处理,通过对日志跟踪,你可以获取该错误发生的具体环境,你需要确切知道什么是什么引起该错误,什么对该错误不会造成影响. 跟踪应用的警告和错误 ...

随机推荐

  1. c# 将datatable中的数据保存到excel文件中

    using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Lin ...

  2. ABAP下载的病毒扫描Virus Scan

    当我使用CL_HTTP_ENTITY=>IF_HTTP_ENTITY~GET_DATA从网络下载数据时,遇到异常CX_VSI: 错误原因是数据从网络下载到Netweaver服务器上之后,在服务器 ...

  3. 转:Java Web 项目发布到Tomcat中三种部署方法

    首先整理项目文件,文件内包含jsp.js等和class编译后的文件及lib包,如: 第一种方法:在tomcat中的conf目录中,在server.xml中的,<host/>节点中添加:   ...

  4. java 中 IO 流分为几种?(未完成)

    java 中 IO 流分为几种?(未完成)

  5. TF_Variable Sharing

    Reference: http://jermmy.xyz/2017/08/25/2017-8-25-learn-tensorflow-shared-variables/ Tensorflow does ...

  6. php 常用正则运算

    $regx = "/^[0-9]*$/"; var_dump(preg_match($regx, $phone)); 常用的正则运算: •验证数字:^[0-9]*$ •验证n位的数 ...

  7. python .pth 文件 和 site 模块

    python .pth 文件 和 site 模块 .pth 文件 该文件位于 python 的 /Lib/site-packages 目录下,可以有多个,在 .pth 文件中可以把其它目录添加到 sy ...

  8. DiskFileItemFactory用法

    在使用servlet上传文件时,使用DiskFileItemFactory(在使用struts时利用InputStream和OutputStream) 将请求消息实体中的每一个项目封装成单独的Disk ...

  9. could not load file or assembly "System.Web.Mvc...

    1.一般出现这个错误是因为Web.Config里面的版本号跟project用到的dll版本对应不上 更改webconfig <add assembly="System.Web.Mvc, ...

  10. Word:自动编号超过9后缩进太大

     造冰箱的大熊猫,本文适用于Microsoft Office 2007@cnblogs 2019/7/30 文中图片可通过点击鼠标右键查看大图 1.场景 如下图所示,使用Word的自动编号功能时,当编 ...