log4net 插入(空)到自定义列

log4net inserting (null) into custom column

按照建议添加了自定义列here。当我使用代码行

将某些内容登录到此专栏时,一切都运行良好
log4net.GlobalContext.Properties["CustomColumn"] = "Custom value";

但是如果我像下面这样传递空值

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

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

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

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

试试这个

log4net.GlobalContext.Properties["CustomColumn"] = DBNull.Value;

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

"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 )" 

现在可以正常工作了。

在这种情况下,我更喜欢 "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)')"