Tag: 日志记录

如何跟踪每个调用的方法

我有一个现有项目,我想找出所有正在进行的调用,并可能转储到日志文件中。 我看了一下这个post ,但没多大帮助。 我试过PostSharp,这个例子展示了如何实现它。 但我需要为每个darn方法添加一个属性。 作为一个现有的项目,有许多方法,这是不可行的选择。 有没有其他方法可以快速跟踪所有拨打的电话?

如何在发生exception时跟踪所有局部变量

在方法中发生exception时,跟踪/记录所有局部变量值的任何通用方法? (在C#3中)

multithreading安全日志记录

我们有一个在多个线程中运行的应用程序,并使用Log4Net作为日志框架。 我们遇到了一些未记录某些日志事件的情况。 正如文档中所提到的, FileAppender和其他Appender“对multithreading操作不安全”。 我在网上搜索了解决方案或Appender,但找不到任何解决方案。 您是否知道使用环形缓冲区或队列来提供multithreading支持的multithreading安全Log4Net Appender? 或者我们应该使用不同的multithreading安全日志记录框架吗? 提前致谢!

如何检测主线程何时终止?

我需要知道的是: 我想检测主线程(进程?)何时终止,以便我可以确保在终止之前执行某些操作。 我发现自己: 我发现了事件AppDomain.DomainUnload和AppDomain.ProcessExit 。 AppDomain.DomainUnload似乎适用于非应用程序,如MbUnit。 AppDomain.ProcessExit似乎适用于应用程序,但有3秒的时间限制,我真的不喜欢。 是否有更多方法可以检测AppDomain /进程何时终止? 背景: 我正在寻找这样的事件,以确保我的日志在应用程序终止时持久存档。 实际的日志记录使用生产者 – 消费者模式在另一个线程上运行,其中日志条目很可能在内存中排队,我需要确保在应用程序终止时将此队列保存到文件中。 还有什么我应该知道的吗? 更新: 改变了上述内容以反映我自己发现的内容。 我对ProcessExit中的3秒时间限制感到不满意。 MSDN文档确实说它可以扩展: 所有ProcessExit事件处理程序的总执行时间都是有限的,就像所有终结器的总执行时间在进程关闭时受限一样。 默认值为三秒,可以由非托管主机覆盖。 有谁知道如何覆盖默认值? 更多的想法也非常感谢! 跟进: 我已向此发布了一个跟进问题 。

Log4Net:如何向每个日志行添加简单的索引器(行号)

这是问题:我想在日志文件中的每一行添加行索引器(行号或迭代器)。 我不需要它对整个日志文件是唯一的,但仅适用于“应用程序会话”(即每次Win32应用程序启动时,我们开始倒计时:1,2,3等等) 是内置方式(conversionpattern标记语法)还是一些自定义扩展? 非常感谢!

如何检测我是否在控制台中运行

是否有一种简单的方法可以让代码库自动检测是否从控制台应用程序或Windows应用程序调用它? 我希望我的库不报告Windows事件日志,如果它是从控制台窗口调用,而是报告到控制台窗口。 但是,如果它不在控制台窗口中运行,则应报告给Windows事件日志。 我考虑过要求我的日志记录组件传递日志目标,但是如果它本身可以自动处理这两个目标那么它会很整洁。 我还没有需要像log4net这样广泛的东西,事实上,如果有必要提供支持来记录数据库/文件和其他未知的日志记录目标,那么我可能会推荐这样的解决方案。 现在,只是让我的组件自动检测环境并根据环境登录到控制台或事件日志就足够了。

log4net:动态创建记录器,我应该担心什么吗?

我需要动态创建记录器,所以有了这里的post和reflection器的帮助我已经设法动态创建记录器,但我想知道我是否应该担心别的……我不知道其含义可以做到。 public static ILog GetDyamicLogger(Guid applicationId) { Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository(); RollingFileAppender roller = new RollingFileAppender(); roller.LockingModel = new log4net.Appender.FileAppender.MinimalLock(); roller.AppendToFile = true; roller.RollingStyle = RollingFileAppender.RollingMode.Composite; roller.MaxSizeRollBackups = 14; roller.MaximumFileSize = “15000KB”; roller.DatePattern = “yyyyMMdd”; roller.Layout = new log4net.Layout.PatternLayout(); roller.File = “App_Data\\Logs\\”+applicationId.ToString()+”\\debug.log”; roller.StaticLogFileName = true; PatternLayout patternLayout = new PatternLayout(); patternLayout.ConversionPattern = “%date [%thread] %-5level […]

我可以阻止StreamReader在使用时锁定文本文件吗?

StreamReader在读取文本文件时会锁定它。 我可以强制StreamReader以“只读”或“非锁定”模式工作吗? 我的解决方法是将文件复制到临时位置并从那里读取,但我更愿意直接使用StreamReader。 任何替代建议? 背景: 我写了一个小应用程序来从日志文件中获取一些统计信息。 该文件不断被外部程序更新(每秒几次),可以调用AAXXYY。 查看输出表明我的应用程序可能正在锁定文件并阻止AAXXYY写入。 这就是我正在做的事情 private void btnGetStats_Click(object sender, EventArgs e) { int countStarts = 0; int countEnds = 0; IList sessions = new List(); using(StreamReader stRead = new StreamReader(openFileDialog1.FileName,Encoding.Unicode)) { while(!stRead.EndOfStream) { string line = stRead.ReadLine(); if(line.Contains(“Session start”)) { countStarts++; sessions.Add(line.Substring(line.IndexOf(“[“), line.LastIndexOf(“]”) – line.IndexOf(“[“))); } if (line.Contains(“Session end”)) { countEnds++; […]

EventLog.CreateEventSource未创建自定义日志

我有一些像这样的代码: EventLog.CreateEventSource(“myApp”, “myAppLog”); EventLog.WriteEntry(“myApp”, “Test log message”, EventLogEntryType.Error); 现在,除非我遗漏了读取MSDN的内容,否则会导致在事件查看器中创建新的日志“myAppLog”,并且应该将一个条目添加到源名为“myApp”的新日志中。 但是,我无法创建新日志。 这总是只是将错误日志消息写入应用程序日志,源“myApp” – “myAppLog”无处可见。 我究竟做错了什么? 我以管理员身份登录。

Microsoft.Extensions.Logging的记录器包装器的实现和使用

这个问题与史蒂文的答案有关 – 这里 。 他提出了一个非常好的记录器包装器。 我将在下面粘贴他的代码: public interface ILogger { void Log(LogEntry entry); } public static class LoggerExtensions { public static void Log(this ILogger logger, string message) { logger.Log(new LogEntry(LoggingEventType.Information, message, null)); } public static void Log(this ILogger logger, Exception exception) { logger.Log(new LogEntry(LoggingEventType.Error, exception.Message, exception)); } // More methods here. } 所以,我的问题是创建代理Microsoft.Extensions.Logging的实现的正确方法是什么,以及在代码中稍后使用它的最佳方法是什么 ? 注意:此问题是关于log4net的此问题的副本,但现在特定于Microsoft.Extensions.Logging。