Tag: 日志

C#中的灵活日志界面设计

我想编写自己的Logging类(在C#中),它实现了一个标准接口,我可以从代码的任何部分调用它。 我的想法是让多个Log类实现Logger接口,每个接口都针对其特定的日志目的地,例如,FileLogger将实现日志记录到文件,TextBox记录器将实现登录到Form中的多行TextBox,DBLogger将实现日志记录到数据库表等 此外,每个记录器类可以具有嵌套的记录器或链式记录器类,因此从应用程序代码单次调用Log()方法可以在多个目的地中记录消息; 示例在单个调用中记录到Form上的文件和文本框。 我面临的困难是: 通常我会记录一个正在运行的日志文件(其中包含调试所需的所有日志消息),一个审阅日志文件(其中只包含要由用户审阅的日志消息,或需要用户操作的日志消息),多行文本框屏幕(将复制所有日志消息以向用户提供进度指示),以及另一个多行文本框(将仅记录用户要查看的消息)。 当我调用logger.Log(消息)时,某些消息可能不适用于特定的日志目标。 例如,某些消息可能仅记录在正在运行的日志文件或进度文本框中,但不会记录在用户评论文本框中,反之亦然。 由于记录器将被链接以便单个函数调用可以登录到所有必需的目标,因此特定记录器如何识别日志消息不适用于它并因此忽略日志消息? 我的示例日志界面是: public interface Logger { public void Log(string msg); public void Log(string msgType, string msg); public void InitLogSession(); public void EndLogSession(); public void AddLogger(Logger chainedLogger); public void RemoveLogger(Logger chainedLogger); } public class FileLogger : Logger { //implement methods } public class TextBoxLogger : Logger { //implement […]

使用Serilog时如何在输出消息中获得丰富的属性

我正在尝试使用Serilog将丰富的属性输出到渲染的消息中: private static Tester GetTester() { return new Tester {Count = 7, Name = “Redmond”}; } Log.Logger = new LoggerConfiguration() .MinimumLevel.Verbose() .Enrich.WithProperty(“Site”, “Dan Local”) .WriteTo .ColoredConsole() .CreateLogger(); var tester = GetTester(); Log.Verbose(“{Site} – This is verbose {@tester}”, tester); Log.Verbose(“This is verbose {@tester} – {Site}”, tester); 第一个日志语句输出: 2014-08-19 10:02:25 [Verbose] “SeriLogTest.Tester” – This is verbose {@tester} […]

获取运行时期间的本地对象/变量列表

我正在尝试创建一个简单的记录器来检查客户端发生了什么。 如何获取本地列表(在调试时显示在visual studio上)? 有点像当一个断点被击中时,当前现有的对象/变量实例显示在Locals选项卡上,或者我只是在每次写日志时得到变量的当前值?

TextWriterTraceListener不起作用

配置文件: 代码: static void Main(string[] args) { try { Trace.WriteLine(“Running BiFit Test Server.”); } } 我可以在cosole窗口看到文字。 并且文件已创建,但它已空。 我记得某处有Autoflush属性吗?

如何检测文本文件的实时更改?

我正在写一个小的PC工具来使用c#或java读取日志文件。 日志文件将采用.txt格式。 应用程序正在运行并写入日志,我希望我的工具同时打开日志,并在将新行写入日志文件时自动刷新。 我的挑战是,如何检测日志文件的变化,以便我的工具具有实时显示能力? 这是一个普遍的问题,但伪代码将不胜感激!

记录服务SOAP请求和响应

我试图在C#中记录服务的soap请求和响应消息。 我有一个现成的肥皂扩展,它可以完成所有这些,但是我无法将其添加到服务方法中。 由于我的VS项目中添加了服务引用而不是Web服务引用,因此当我检查此服务的引用文件时,我看不到调用远程服务的方法。 我看到的所有示例都是添加到Web服务,它具有不同的参考格式。 在这种情况下如何记录soap消息?

以编程方式访问Enterprise Library Logging配置(对象模型)?

我正在使用Enterprise Library 3.1,并希望以编程方式访问Logging Block (运行时,对象模型),特别是其Trace Listeners和Sources。 例如,我想访问跟踪侦听器对象的Filename属性,以便我可以知道日志文件在磁盘上的位置。 更新:查找使用运行时对象模型的答案,而不是通过解析XML配置。

使用StreamWriter实现滚动日志,并从顶部删除

我的C#winforms 4.0应用程序一直使用线程安全的编写器来执行内部调试日志记录信息。 当我的应用程序打开时,它会删除该文件并重新创建它。 当应用关闭时,它会保存文件。 我想要做的是修改我的应用程序,以便它可以附加而不是替换。 这是一个简单的修复。 但是,这是我的问题: 我想保留我的日志文件最大10兆字节。 我的约束很简单。 当您关闭文件时,如果文件大于10兆字节,则删除前10%。 是否有一种“更好”的方式,然后执行以下操作: 关闭文件 检查文件是否大于10兆 如果是这样,请打开该文件 解析整个事情 剔除前10% 把文件写回来 关 编辑:好吧,我最后滚动自己(如下所示)移动到Log4Net的建议是一个很好的建议,但是学习新库和移动所有日志语句(数千)的时间不是时间对我试图做的小改进有效。 private static void PerformFileTrim(string filename) { var FileSize = Convert.ToDecimal((new System.IO.FileInfo(filename)).Length); if (FileSize > 5000000) { var file = File.ReadAllLines(filename).ToList(); var AmountToCull = (int)(file.Count * 0.33); var trimmed = file.Skip(AmountToCull).ToList(); File.WriteAllLines(filename, trimmed); } }

C#我正确使用锁吗?

我目前正在尝试编写一个线程安全的记录器类。 我对这个领域的正确设计和最佳实践不是很熟悉。 我的代码中有缺陷吗? public class WriteStuff { private readonly StreamWriter m_Writer; private readonly object m_WriteLock = new object (); public WriteStuff(String path) { m_Writer = File.CreateText (path); m_Writer.WriteLine (“x”); m_Writer.Flush (); } public void ListenTo(Foo foo) { foo.SomeEvent += new EventHandler (Foo_Update); } private void Foo_Update(object sender, SomeArgs args) { lock (m_WriteLock) { m_Writer.WriteLine (args); […]

如何实现对象的审计跟踪(编程)?

我需要在我的对象上实现添加/编辑/删除的审计跟踪,我使用ORM(XPO)来定义我的对象等。我实现了一个触发的审计跟踪对象 OnSaving OnDeleting 在基础对象中,我将更改存储在Audit-AuditTrail(Mast-Det)表中,以进行字段更改。 使用一些叫做的方法服务。 如何在OOP代码中实现审计跟踪? 请分享您的见解? 任何模式等? 最佳做法等? 另一件事是如何在运行unit testing时禁用审计,因为我不需要审计它们,但是因为基础对象具有代码。 对象(编辑/添加/ del)的更改以及需要审核的字段更改