log4net 将 (null) 插入到自定义列中

本文关键字:自定义 插入 null log4net | 更新日期: 2024-11-08 13:18:09

添加了此处建议的自定义列。每当我使用代码行将某些内容登录此列时,一切正常

log4net.GlobalContext.Properties["CustomColumn"] = "Custom value";

但是如果我传递空,如下所示

log4net.GlobalContext.Properties["CustomColumn"] = null;

这被记录为 (null)(包含在 brakets 中的字符串 null)。如果我根本不登录,也会发生这种情况,就像我注释代码一样,如下所示。

//log4net.GlobalContext.Properties["CustomColumn"] = null;

所以问题是,有没有办法让它在数据库中实际为 null,而不是字符串 - (null)。我正在使用 ms sql 服务器 2008 r2

log4net 将 (null) 插入到自定义列中

我已经将 Web.config 文件中命令文本值的插入语句修改为

"INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception],[BrowserCapabilities]) VALUES (@log_date, @thread, @log_level, 
        @logger, @message, @exception, CASE WHEN @BrowserCapabilities = '' OR @BrowserCapabilities = '(null)' THEN NULL ELSE @BrowserCapabilities END )" 

现在这工作正常。

试试这个

log4net.GlobalContext.Properties["CustomColumn"] = DBNull.Value;
在这种情况下,

我更喜欢"NULLIF"而不是"CASE WHEN"。 此替代方法仍需要修改 Web.config 文件中 commandText 值的插入语句,但它更有效:

INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception],[BrowserCapabilities]) 
VALUES (@log_date,@thread,@log_level,@logger,@message,@exception,NULLIF(@BrowserCapabilities,'(null)')"