HearthBuddy 日志模块
// 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 日志模块的更多相关文章
- 【腾讯Bugly干货分享】微信mars 的高性能日志模块 xlog
本文来自于腾讯bugly开发者社区,未经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/581c2c46bef1702a2db3ae53 Dev Club 是一个交流移动 ...
- Python 日志模块 logging通过配置文件方式使用
vim logger_config.ini[loggers]keys=root,infoLogger,errorlogger [logger_root]level=DEBUGhandlers=info ...
- 搭建一套自己实用的.net架构(2)【日志模块-log4net】
先谈谈简单的模块,日志.在系统中日志模块是必须的,什么系统日志,操作日志,调试日志.这里用的是log4net. 对log4net还不熟悉的小伙伴们赶快去搜索基础教程哦, 我这里就不温故了. 那么有人要 ...
- logging 日志模块学习
logging 日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系统的运行状况进行跟踪,所以还是灰常重要滴,下面我就来从入门到放弃的系统学习一下日志既可以在屏幕上显示,又可以在文件中体现. ...
- 【腾讯Bugly干货分享】微信终端跨平台组件 mars 系列(一) - 高性能日志模块xlog
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57ff5932cde42f1f03de29b1 本文来源: 微信客户端开发团队 ...
- 日志模块logging使用心得
在应用程序使用中,日志输出对应用维护人员.开发人员判断程序的问题起重要作用. 那么在python中如何定义程序的日志输出? 推荐使用日志模块logging 需求:实现日志内容输出在文件中和控制器中 i ...
- python日志模块
许多应用程序中都会有日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系 统的运行状况进行跟踪.在.NET平台中,有非常著名的第三方开源日志组件log4net,c++中,有人们熟悉的log4c ...
- ns3 Tutorial 中的日志模块(翻译)
转载地址:http://blog.sina.com.cn/s/blog_8ecca79b0101d7fe.html 1 日志模块的使用 在运行 first.cc 脚本时,我们已经简单 ...
- logging日志模块
为什么要做日志: 审计跟踪:但错误发生时,你需要清除知道该如何处理,通过对日志跟踪,你可以获取该错误发生的具体环境,你需要确切知道什么是什么引起该错误,什么对该错误不会造成影响. 跟踪应用的警告和错误 ...
随机推荐
- EEPROM IIC
1. 数据位的有效性规定 I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化 2. 起始和终止信号 S ...
- Rabbitmq各方法的作用详解
exchange_declare('direct_logs', 'direct', false, false, false);// 这个是申明交换器,如果没有申明就给默认队列的这个交换器,而且发送的类 ...
- 根据进程id pid 查容器id
To get container ID you can use: cat /proc/<process-pid>/cgroup Then to convert the container ...
- UESTC 2016 Summer Training #1 J - Objects Panel (A) 按条件遍历树
#include <iostream> #include <cstdio> #include <vector> using namespace std; typed ...
- PHP把数组按指定的个数分隔
PHP把数组按指定的个数分隔 假设数组为array(‘1’,‘2’,‘3’,‘4’,‘5’,‘6’); 想把它分割成四个,那么结果为array(‘0’ => [‘1’,‘2’],‘1’ => ...
- C#中怎么将XML作为参数post到接口
String xml = "<data>中文</data>"; String postData = "data=" + Server.U ...
- luogu3651 展翅翱翔之时 (はばたきのとき)[基环树+贪心]
考前随便做点水题愉♂悦身心 有助于退役 这题意思其实就是说要把外向基环树森林改成一个环的最小代价. 依照套路,先对每棵基环树的树做dp,这里因为要是环,要把所有的树都拆成链,然后连接.所以考虑以最小代 ...
- service worker在移动端H5项目的应用
1. PWA和Service Worker的关系 PWA (Progressive Web Apps) 不是一项技术,也不是一个框架,我们可以把她理解为一种模式,一种通过应用一些技术将 Web App ...
- flutter TextField 输入框被软键盘挡住的解决方案
以前搞ionic1~4的开发中 和react-native flutter中的机制完全不同, 在flutter 中 当前页面如果存在元素被软键盘挡住 的情况 页面元素的最外层肯定得嵌套一层 S ...
- 外观模式(Facade)---结构型模式
1 基础知识 定义:提供了一个统一的接口(外观类),用来访问子系统中的一群接口.特征:定义了一个高层接口让子系统更容易使用,减少了外部与子系统内多个模块的耦合. 本质:封装交互,简化调用. 优点:简化 ...