添加了建议here的自定义列。当我使用代码行
将某些内容记录到此列中时,事情正常log4net.GlobalContext.Properties["CustomColumn"] = "Custom value";
但如果我传递null而不是
log4net.GlobalContext.Properties["CustomColumn"] = null;
将其记录为(null)(包含在brakets中的字符串null)。如果我根本不记录,也会发生这种情况,例如我对代码进行注释,如下所示。
//log4net.GlobalContext.Properties["CustomColumn"] = null;
所以问题是,有没有办法让它在数据库中实际为null,而不是字符串 - (null)。我正在使用ms sql server 2008 r2
答案 0 :(得分:4)
我已将Web.config文件中commandText值的insert语句修改为
"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 )"
现在这很好用。
答案 1 :(得分:3)
试试这个
log4net.GlobalContext.Properties["CustomColumn"] = DBNull.Value;
答案 2 :(得分:0)
在这种情况下,我更喜欢“ NULLIF”而不是“ CASE WHEN”。此替代方法仍然需要修改Web.config文件中commandText值的insert语句,但效率更高:
INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception],[BrowserCapabilities])
VALUES (@log_date,@thread,@log_level,@logger,@message,@exception,NULLIF(@BrowserCapabilities,'(null)')"