Tag: 日志记录

.Net Logger(编写自己的vs log4net /企业记录器/ nlog等)

我在一个拥有约50多名开发人员的IT部门工作。 它曾经是大约100多名开发商,但由于经济衰退而被削减。 当我们的部门规模扩大时,我们已经做出了雄心勃勃的努力来建立一个特殊的建筑群。 该小组决定做的一件事是创建我们自己的内部记录器。 他们认为这是一项如此简单的任务,我们可以花费资源并自己完成。 现在我们遇到了性能问题和查看生成日志的困难,一些员工对我们在这样的基础设施上花费资源而不是专注于服务我们的业务和使用已经存在的东西如log4net或Enterprise Logger感到沮丧。 你能否帮我列出你不应该创建自己的.net记录器的原因。 也有理由为什么你应该得到一个公平的观点:)

将所有函数调用记录到控制台

我经常会通过将每个函数调用记录到控制台并查找错误情况中的差异来开始调试类。 是否有一些属性可以应用于类以启用此类跟踪? 必须进入这些是非常累人的 Console.WriteLine(“classname: methodname”) 到每个方法并在之后删除它们(删除可以通过条件编译来完成,但是当你拥有所有这些冗余时查看代码并不是很好)

将Trace.axd中的数据记录到text / xml文件中

在尝试追踪仅在我们的生产环境中发生的性能问题时,我们在应用程序中启用了跟踪,因此请查看方法调用和页面加载时间。 这很有效,有很多信息可以帮助追踪问题。 但是,查看此信息的唯一方法是浏览到Trace.axd,然后单独查看每个请求。 它也只能以这种方式跟踪前X个请求,X的最大限制为10,000。 有没有办法将此跟踪信息定向到文件或数据库? 我相信这可以使用System.Diagnostics来完成,但是,我没有太多运气。 我已启用跟踪使用 我尝试过使用XmlWriterTraceListener 这会生成一个xml文件,其中包含跟踪项的时间戳和数据,例如“Begin Load”,“End Load”等。 但是,它似乎只记录单个请求,并且不记录所有请求。 此外,虽然加载时间很有用,但理想情况下我希望能够获得Trace.axd中可以看到的所有信息,例如请求数据,发布数据,会话数据等。 这是否可能没有任何重大代码更改? 理想情况下,我想仅使用web.config更改来启用此function。 或者,我已经研究过其他应用程序,例如RedGate和Equatec的分析工具,但是,我想首先用尽非侵入式跟踪选项。 该应用程序是用ASP.Net 3.5和C#编写的。

C#最佳实践error handling和传递错误消息

我正在使用asp.net,我总是在努力寻找一种处理错误的简洁方法,如果有的话,将错误消息传递给用户。 例如,我有一个User类,UserManager类和一个Database类。 Imagina我想显示所有用户,显示我从UserManager调用方法GetAllUsers返回User对象列表。 此方法创建一个Database对象并调用方法ExecuteQuery(字符串查询)。 编辑:现在我的问题,想象一下ExecuteQuery()方法出错(无法打开数据库)。 我想在打开数据库连接时通知用户出错了。 我应该怎么做并处理这个整洁的方式? 编辑2: 你会这样做吗? 或者其他? public class Database() { private string _Error; // property error (only get) private void Open() { try { // Open DB // Fails because of error } catch(Exception ex) { _Error = ex.Message; } } public DataSet ExecuteQuery(string query) { try { Open(); // Execute […]

在Windows窗体应用程序中使用Console.WriteLine

我有一个外部DLL,其源代码是C#。 从DLL的文档中,我确定它使用Console.WriteLine将其调试消息写入控制台。 我想在WinForms应用程序中使用此DLL。 但是,我发现我无法看到DLL发出的调试消息,因为WinForms应用程序没有控制台。 有没有办法捕获那些调试消息,甚至可能是一个简单的日志文件? 当然,使用ProcessInfo.RedirectStandartOutput将无法正常工作,因为我不将DLL用作进程。

我应该如何在ASP.NET中记录exception?

我该如何记录exception? 我之前从未尝试过登录.NET。 也不要尝试将exception转储到txt(或二进制)文件。 我不需要文本文件,只是一种用文件和行#查看日志的方法。 -edit-使用asp.net

log4net的logger包装器的实现和使用

这个问题与史蒂文的答案有关 – 这里 。 他提出了一个非常好的记录器包装器。 我将在下面粘贴他的代码: 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. } 所以,我的问题是创建代理到log4net的实现的正确方法是什么 ? 我应该只使用类型参数添加另一个Log扩展方法,然后在里面创建一个开关吗? […]

如何在C#.NET中跨线程锁定控制台?

我有一个记录器类,处理各种颜色的信息显示(yay。)。 但是,因为它以分开的步骤写入控制台( 即将颜色设置为红色,写入文本,将颜色设置为灰色,写入文本,以便呈现“[错误]描述…”,错误为红色 ) ,但我有一个multithreading应用程序,所以步骤可以混淆和随机颜色打印随机的东西。 我知道lock关键字,但它不适用于静态类,如控制台。 如果我不清楚,这是一些示例代码: using System; using System.Text; namespace N.Utilities.IO { public static class Logger { private static void WriteColored(string value, ConsoleColor color) { if (Logger.UseColor) { Console.ForegroundColor = color; Console.Write(value); Console.ForegroundColor = ConsoleColor.Gray; } else { Console.Write(value); } } private static void WriteLineColored(string value, ConsoleColor color) { if (Logger.UseColor) { Console.ForegroundColor […]

C#条件记录/跟踪

我想在我的C#应用​​程序中添加日志记录或跟踪,但是如果将日志详细级别设置得太低以至于不记录消息,我不希望记录格式化字符串或计算值的开销。 在C ++中,您可以使用预处理器来定义将阻止代码执行的宏,如下所示: #define VLOG(level,expr) if (level >= g_log.verbosity) { g_log.output << expr; } 像这样使用: VLOG(5,”Expensive function call returns ” << ExpensiveFunctionCall()); 你是怎么用C#做的? 我在这里阅读了解释Trace和Debug工具的Microsoft文档,他们声称使用#undef DEBUG和#undef TRACE从生成的可执行文件中删除所有跟踪和调试代码,但它是否真的删除了整个调用? 意思是,如果我写的话 System.Diagnostics.Trace.WriteLineIf(g_log.verbosity>=5,ExpensiveFunctionCall()); 如果我取消定义TRACE,它不会调用我昂贵的function吗? 或者是打电话, 然后决定它不会追踪任何东西? 无论如何,即使它确实删除它,这也不如C ++宏,因为我无法使那个大丑陋的调用看起来像我在C ++中简单的VLOG()调用,仍然避免评估参数,是吗? 我也不能像在C ++中那样在运行时定义详细程度来避免开销,对吧?

使用Logging框架有什么意义?

我想我可能会忽略为应用程序提供日志框架的重点。 在所有小应用程序中,我总是编写一个小的“Logging”类,只是将日志消息传递给写入文件的方法。 第三方日志框架如log4net的目的是什么? 它是日志写入操作的线程安全还是我遗漏了什么?