Tag: logging

C#中的日志文件锁定问题

我有一个Windows服务,它将日志文件条目写入XML日志文件。 我在服务运行时维护日志文件的句柄,并在服务停止时关闭,刷新并处理它。 文件写入操作仅由服务进行,我在FileAccess.ReadWrite中打开文件流,而共享设置为FileShare.Read。 我希望能够通过另一个应用程序的XmlRead()调用打开并查看此文件,但是我收到一条错误,指出该文件正由另一个进程使用。 我已经阅读了另一篇关于此的post,并认为这是可能的: 其他主题 。 正在使用的编写器被刷新,关闭和处理,并且每次写入文件流都被刷新。 这在.Net中是不可能的,还是我可能做错了什么? 该代码的缩减版本如下: if (_logFS == null) _logFS = new FileStream(_fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read); if (!initFile) { _logFS.Seek(-13, SeekOrigin.End); } XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.OmitXmlDeclaration = true; using (XmlWriter writer = XmlWriter.Create(_logFS, settings)) { if (initFile) { writer.WriteRaw(“\n”); writer.WriteStartElement(“Entries”, “http://www.abcdefg.com); } writer.WriteStartElement(“Exception”); // write […]

ASP.NET错误的事件日志源属性的自定义值

默认情况下,ASP.NET将所有未捕获的exception记录到系统事件日志中。 我知道应该有一个适当的日志设施,但这比没有好,它可以作为一个临时解决方案。 我希望能够有效地过滤日志中的事件。 我了解到,在以编程方式进行日志记录时,您可以通过以下方式为事件日志中的Source列设置自定义值: EventLog eventLog = new EventLog(“Application”); eventLog.Source = “My custom name”; eventLog.WriteEntry(“Some error description …”, EventLogEntryType.Error); 但是,ASP.NET将此值设置为“ASP.NET”,后跟其版本。 我简要地检查了web.config的文档,但没有找到明显的地方来改变它。 我想知道它是否可以改变。

NLog – 将NULL写入可选数据库列

我正在使用NLog登录ASP.Net应用程序并使用Microsoft Sql Server的数据库目标。 我有一些可选的记录参数,并不总是指定。 我希望这些在没有提供时写为null,但NLog似乎总是把它们写成空字符串。 有没有办法将其配置为将null写为默认值? 参考: https : //github.com/nlog/NLog/wiki/Database-target

记录为装饰器与dependency injection – 如果我需要在类中登录,该怎么办?

(我最初在这篇评论中提到了这个问题,但Mark Seemann要求我创建一个新问题。) 我正在开始一个新的应用程序(.NET Core,如果这很重要),现在我正在尝试决定如何准确地进行日志记录。 普遍的共识似乎是日志记录是一个跨领域的问题,因此记录器不应该直接注入应该记录的类。 通常,有一个例如下面的类如何不这样做: public class BadExample : IExample { private readonly ILogger logger; public BadExample(ILogger logger) { this.logger = logger; } public void DoStuff() { try { // do the important stuff here } catch (Exception e) { this.logger.Error(e.ToString()); } } } 相反,具有业务逻辑的类不应该知道记录器( SRP ),并且应该有一个单独的类来执行日志记录: public class BetterExample : IExample { public […]

Web API log4net不会在每个请求上创建新的日志文件

我想在每次发送API请求时创建一个新文件。 因此,我对此解决方案进行了一些修改,如下面的方法 它创建一个类似LogFile-2018.07.10-10_25_11的文件。 我正在通过postman测试API。 因此,当我运行我的程序并发送多个相同或不同API的请求时,它会在同一个日志文件中添加该进程。 它不会替换以前的日志详细信息,但会在新行中显示新请求。 这样,如果发送了多个请求,那么日志将相互混淆,我找不到哪个请求的日志详细信息。 创建新日志文件的唯一方法是停止我的程序然后运行它。 但是在生产环境中,API将随时可用。 如何在发送每个新请求时创建新的日志文件? 任何帮助将受到高度赞赏。

使用log4net为.NET项目记录ClassName和MethodName

我一直在寻找一种方法来记录类名和方法名作为我的日志记录基础结构的一部分。 显然,我希望在运行时使用简单快捷。 我已经做了很多关于记录类名和方法名的阅读,但我遇到了2个主题。 log4net使用内部抛出exception来生成堆栈帧,如果通常用于所有日志记录,则会变得昂贵。 混乱。 那里有很多文献。 我已经尝试了一堆它并没有得到一些有用的东西。 如果你让我幽默一下,我想重置一下。 我在我的项目中创建了这样一个类 public static class Log { private static Dictionary _loggers = new Dictionary(); private static bool _logInitialized = false; private static object _lock = new object(); public static string SerializeException(Exception e) { return SerializeException(e, string.Empty); } private static string SerializeException(Exception e, string exceptionMessage) { if (e == […]

使NLog记录器具有不同的配置

在NLog中是否可以创建具有不同配置的多个记录器? 我有一个组件,每次实例化必须将所有事件记录到与新实例相关的不同文件。 NLog可以实现吗? 如果没有,有这样的日志框架吗?

ASP.NET Web API日志记录和跟踪

一旦使用适用于ASP.NET Web API的log4net进行日志记录和跟踪设置,需要记录和/或跟踪的具体方面是什么? 我从Web API的角度来看这个问题。 是否有一系列必须记录这个或必须跟踪这个 。 就像,INFO跟踪控制器的请求,任何NULL检查等。 是否有可以validation的参考列表,以确保ASP.NET Web API中的最佳日志记录和跟踪覆盖率?

非常简单的文件appender日志记录无法正常工作

这是我的web.config信息: … 这是初始化记录器的代码: protected void SendMessage() { log4net.Config.XmlConfigurator.Configure(); ILog log = LogManager.GetLogger(typeof(Contact)); … log.Info(“here we go!”); log.Debug(“debug afasf”); … } 无论我做什么,它都不起作用。 我正确地引用了’log4net.dll’,通过调试应用程序,我可以看到日志对象正在正常启动。 这是一个asp.net 3.5框架Web项目。 有什么想法/建议吗? 我原以为这个错误可能是由于文件写入权限约束,但似乎并非如此(或者我认为)。

ASP.NET MVC中面向方面的编程

我目前正在ASP.NET中开发一个MVC应用程序,我正试图分离关注点,以便最终得到更清晰,更可维护的代码。 所以,作为一个起点,我正在考虑一个日志方面。 我的想法是(最初)记录每个控制器中每个方法的调用和返回。 我将这个逻辑放在一个专门用于日志记录的单独的类上,所以我不会在任何地方使用日志语句来破坏我的代码。 我还需要访问Http请求,以便获取客户端信息。 有没有综合的方法来做到这一点? ASP.NET MVC可以像AspectJ一样在Aspect中使用Aspect文件吗? 此外,以后可以配置为记录满足某些条件的方法吗? (如签名,返回值,exception抛出等) 首先十分感谢!