NLog:将记录器名称限制为枚举或其他结构
NLog: Limit Logger Names to Enum or other structure
我正在使用 NLog 进行一些日志记录,感谢这些答案:
我能够将不同类型的事件(例如:"Thermal"、"Database" 等)记录到一个文件中,记录器字段显示事件类型。一个简单的调用例如:
NLog.LogManager.GetLogger("Database").Debug("Error writing to DB");
这一切都很好,可能就足够了。但是,您会注意到任何程序员都可以随意在 GetLogger 中输入他们想要的任何名称并拼错它。 "GetLogger("Databuse")。如果程序员必须从枚举或其他结构中进行选择,那就太好了:
NLog.LogManager.GetLogger(LoggerNames.Database).Debug("Error writing to DB");
这似乎是一个常见问题,可能已经有了一个优雅的解决方案。我可以想象重写 LogManager class 但不确定具体细节。请注意,LogManager 是 NLog 库中的 public 静态 class,因此不清楚如何隐藏它。此外,还有一个很好的 属性,如果您在应用程序项目中填写一次配置文件,只要您将 NLog 作为参考,该配置文件就可以完美地适用于解决方案中的所有项目。
我将继续创建一个使用 NLog 库的库项目,然后将其包含在我的主要项目中,除非已经有一个很好的解决方案。我打赌有,但没见过。
谢谢,
戴夫
如果您有 "global" 个记录器名称,那么简单的解决方案就是使用全局记录器实例。
同一个全局 NLog Logger 实例可以被多个位置使用而不会出现线程问题。
我正在使用 NLog 进行一些日志记录,感谢这些答案:
我能够将不同类型的事件(例如:"Thermal"、"Database" 等)记录到一个文件中,记录器字段显示事件类型。一个简单的调用例如:
NLog.LogManager.GetLogger("Database").Debug("Error writing to DB");
这一切都很好,可能就足够了。但是,您会注意到任何程序员都可以随意在 GetLogger 中输入他们想要的任何名称并拼错它。 "GetLogger("Databuse")。如果程序员必须从枚举或其他结构中进行选择,那就太好了:
NLog.LogManager.GetLogger(LoggerNames.Database).Debug("Error writing to DB");
这似乎是一个常见问题,可能已经有了一个优雅的解决方案。我可以想象重写 LogManager class 但不确定具体细节。请注意,LogManager 是 NLog 库中的 public 静态 class,因此不清楚如何隐藏它。此外,还有一个很好的 属性,如果您在应用程序项目中填写一次配置文件,只要您将 NLog 作为参考,该配置文件就可以完美地适用于解决方案中的所有项目。
我将继续创建一个使用 NLog 库的库项目,然后将其包含在我的主要项目中,除非已经有一个很好的解决方案。我打赌有,但没见过。
谢谢,
戴夫
如果您有 "global" 个记录器名称,那么简单的解决方案就是使用全局记录器实例。
同一个全局 NLog Logger 实例可以被多个位置使用而不会出现线程问题。