Tag: 日志记录

如何强制重新加载NLog配置文件?

我正在使用NLog配置文件。 为了避免为长时间的治疗记录过多的东西,我正在做这样的事情: foreach (LoggingRule rule in LogManager.Configuration.LoggingRules) { rule.DisableLoggingForLevel(LogLevel.Trace); rule.DisableLoggingForLevel(LogLevel.Debug); } LogManager.ReconfigExistingLoggers(); 它允许我暂时降低日志记录详细信息级别。 上面的几行只是一个例子来说明。 这似乎完美无缺。 之后,我想恢复我的“常规”日志记录配置,只需重新加载已在程序启动时自动加载的NLog.Config文件 。 我试过了 : LogManager.Configuration.Reload(); LogManager.ReconfigExistingLoggers(); 我认为这很容易但配置.Reload没有做我期待的事情,我没有找到任何其他合适的方法。 在调用之后,我的记录器在程序启动时仍然没有存储跟踪和调试事件。 所以我的问题是:如何以编程方式强制在运行时重新加载NLog.config并恢复我的“标准”记录器设置? 谢谢 有关详细信息的问题更新: 我正在使用VS2013,.Net 4 projet和NLog 4.4.0-beta11(beta但是最后一个在nuget上),简单的“文件”目标在配置文件中定义,minLevel = Trace和autoReload = True Logger在类级别实例化:private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); 这是我的测试证据: Assert.True(Logger.IsTraceEnabled); Assert.True(Logger.IsDebugEnabled); Logger.Trace(“1 – This should appear in log”); Logger.Debug(“2 – This should […]

使用FileSystemWatcher查看log4net日志文件

我已经创建了简单的WPF控件来监视日志文件中的更改。 我使用FileSystemWatcher来观看特定文件。 我的配置: Directory = System.IO.Path.GetDirectoryName(logFileFullPath); Filter = System.IO.Path.GetFileName(logFileFullPath); NotifyFilter = (NotifyFilters.LastWrite | NotifyFilters.Size); EnableRaisingEvents = true; 问题是只有在手动刷新目录或打开日志文件后才会显示更改。 我在我的log4net配置中使用RollingFileAppender,因此应立即写入更改。 问题是:为什么它不起作用以及如何使其工作? 编辑: 此外,当我手动更新其他受监控文件时,观察者工作正常。 所以它必须是一些log4net问题。

如何在添加每个项目后进行ListView更新?

我正在尝试使用ListView将实时日志输出到Windows窗体。 这是虚拟代码: public Form1() { InitializeComponent(); listView1.View = View.Details; listView1.GridLines = false; listView1.Scrollable = true; listView1.FullRowSelect = true; listView1.Columns.Add(“Track”); listView1.Columns.Add(“Status”); for (int i = 1; i <= 10000; i++) { ListViewItem LVI = new ListViewItem("Track " + i); LVI.SubItems.Add("Updated"); listView1.Items.Add(LVI); listView1.TopItem = LVI; listView1.EnsureVisible(listView1.Items.Count – 1); } } 如何设置它以便在添加每一行后刷新? 应用程序等待直到生成列表,然后加载带有完整列表的表单。

记录exception属性

是否可以使用NLog记录exception的属性? 例如,SocketException具有ErrorCode,HResult,NativeErrorCode等属性,这些属性仅特定于此类exception。 可以在没有显式记录(即不使用Log(e.ErrorCode) )的情况下Log(e.ErrorCode)它们并使用代码中的ErrorException吗? 默认的Exception布局渲染器只是在exception上调用ToString。

如何记录exception信息以进行故障排除?

我目前正在对Windows服务进行维护,并且在代码中的某些点处存在一些exception处理(例如,来自计时器和其他外部事件的回调): try { … } catch (Exception ex) { _logger.Log(“Unhandled exception: {0}\r\n{1}”, ex.Message, ex.StackTrace); Environment.FailFast(“Fatal error.”); } 记录exception信息有助于排除出错的问题。 但是,有时候有趣的信息是内部exception,这使得很难确定问题的根本原因。 例如, TypeInitializationException可能很难理解。 是否有更好的方法来记录exception信息以进行故障排除?

登录multithreading环境并进行测试

在以下方案中,请告诉我有关如何设计日志记录以及如何测试日志的建议。 我有一个可以由多个线程调用的API。 单个线程对此API的一次调用会生成50 KB的日志。 是否存在用于在multithreading环境中登录的任何设计模式。 即所有线程的一个日志文件与每个线程的一个专用日志文件 ? 并且,如何测试此function。 (它应该测试吗?) 谢谢。

使用msmq进行异步日志记录

我需要登录我们的应用程序,并希望尽可能少地记录由于记录所消耗的时间。 我正在考虑使用MSMQ,以便应用程序将登录到MSMQ,然后我可以异步地将消息从MSMQ记录到数据库/文件。 这个想法在性能方面是否合适? 或使用log4net同步记录到平面文件更好。 此外,我正在考虑编写日志记录抽象层,以便以后插入任何日志记录工具而不影响其他代码。 请指教。 谢谢,sveerap

ILog还是ILogger?

我应该使用ILog还是ILogger接口? 我发现ILog接口更容易使用,因为我可以通过调用每个类声明一个实例: private ILog _logger = LogManager.GetLogger(typeof(MyClass)); 这是一个比ILogger简单得多的界面: void Log(Type callerStackBoundaryDeclaringType, Level level, object message, Exception exception) 有区别吗? 什么时候使用1对另一个更好?

log4net配置问题

我有一个单独的Log4Net.config文件。 我补充道 [assembly: log4net.Config.XmlConfigurator(ConfigFile = “Log4Net.config”, Watch = true)] 到AssemblyInfo.cs 当我使用调试模式运行应用程序时,lognet正在记录。 当我将应用程序发布到IIS时,lognet不会记录任何内容。 我还有以下内容: BasicConfigurator.Configure(); // in a method private static readonly ILog _logger = LogManager.GetLogger(typeof(_Default)); // for the instance 这是什么原因?

在log4Net中关闭记录器实例的正确方法

我有一个类,我的每个实例都创建一个新的记录器,并附加一个缓冲appender和一个flie appender。 一切都在运行时完成,并且没有从配置文件中选择任何信息。 现在要在类的自定义配置方法中释放资源,我需要关闭该特定的记录器并释放其所有附加资源,以避免任何内存泄漏。 目前我一直在做的是至少刷新文件appender并写入所有日志记录信息但是既没有释放该特定日志文件的锁也没有释放它的任何资源。 在不关闭正在处理的其他活动记录器的情况下关闭记录器的正确方法是什么 log4net.ILog log = log4net.LogManager.GetLogger(loggerName); foreach (IAppender iapp in log.Logger.Repository.GetAppenders()) { BufferingAppenderSkeleton buffered = iapp as BufferingAppenderSkeleton; if (buffered is BufferingForwardingAppender) { ((BufferingForwardingAppender)buffered).Flush(); } } log.Logger.Repository.Shutdown(); 我希望我的问题足够明确:)