【发布时间】:2010-12-28 20:12:04
【问题描述】:
我有一个框架库,它可以做很多事情,包括日志记录。我们正在使用 log4net 进行日志记录。该框架具有静态日志类 LogManager、ILog 的静态实例(logger)和用于记录 INFO、WARNING、DEBUG 等的静态方法。
静态实例记录器正在像这样初始化:
public static class LogManager
{
private static ILog Logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
static ActivityLogManager()
{
}
public static void LogDebugy(string message, params object[] messageParameters)
{
// Log the message here
}
}
我自己怀疑这是否是正确的做法。我从here 看到,每个需要记录的类都应该声明一个ILog 的静态实例。
我还看到我必须在我的框架项目中指定 Log4net 配置文件来记录。以为我读到 here 会从正在执行的程序集中获取配置,但我没有看到它发生。
有什么方法可以让我从我的框架类完成日志记录,并从我的 Web 应用程序(对于我的 Web 应用程序)或其他一些业务库项目(对于我的业务类库)获取配置?
我还想在我的日志中添加一些自定义信息(如自定义业务对象 ID 等、应用程序池、ServerName、ClientHostName、ClientBrowser、ClientOS、Client User 等)。有可能吗?
我正在使用 AdoNetAppender。
Edit1:我在 assembly.cs 中使用 log4net.Config.XmlConfigurator(ConfigFile = @"log4net.config", Watch = true) 指向 log4net 配置文件。
Edit2:我的ILog Logger 在我的框架LogManager 类中,因此我的应用程序只生成了一个实例。
【问题讨论】:
-
通常每个需要记录某些内容的类都有自己的 ILog 实例,最好使用表明某种层次结构的名称(名称空间 + 类型很常见。)这允许过滤消息。 NHibernate 这样做允许您过滤掉来自某些子库的消息并转储所有 SQL 查询(通常记录在 DEBUG 中)。