【问题标题】:log4net inserting (null) into custom columnlog4net 插入(空)到自定义列
【发布时间】:2015-03-10 13:24:15
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: c# logging log4net


    【解决方案1】:

    我已将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 )" 
    

    现在可以正常工作了。

    【讨论】:

      【解决方案2】:

      试试这个

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

      【讨论】:

      • 嗨 Szeki,DBNull.Value 导致空字符串 - '' 但不是 null。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-23
        • 2011-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多