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

时间:2015-03-10 13:24:15

标签: c# logging log4net

添加了建议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

3 个答案:

答案 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)')"