【问题标题】:Exception during StringFormat: Input string was not in a correct formatStringFormat 期间的异常:输入字符串的格式不正确
【发布时间】:2021-05-13 07:02:22
【问题描述】:

我正在使用 log4net 在我的 .net 应用程序中记录信息,它按预期工作,但没有记录以下字符串

{"SuccessfulMessage":null,"FailedMessage":null,"InvalidMessage":"ID 1234 are invalid","PendingMessage":null,"AlreadyProcessedMessage":null,"InvalidIDMessage":null,"InvalidOperatorMessage":null}

当我尝试记录上述字符串时,它会记录以下内容。

<log4net.Error>Exception during StringFormat: Input string was not in a correct format. <format>{"SuccessfulMessage":null,"FailedMessage":null,"InvalidMessage":"ID 1234 are invalid","PendingMessage":null,"AlreadyProcessedMessage":null,"InvalidIDMessage":null,"InvalidOperatorMessage":null}</format><args>{}</args></log4net.Error>

我正在使用下面的代码来写日志。

private ILog AppLogger { get; set; }
AppLogger.InfoFormat(message, args)

Log4net 版本: 2.0.8.0

【问题讨论】:

  • 如果您的args 为空,那么您只需致电AppLogger.Info(message)。如果您确实有 args,那么您需要了解 InfoFormat 采用类似于 String.Format 的参数。所以你的message 需要像"{0} for arg[0], {1} etc." 这样的字符串,对于至少有2 个项目的args

标签: c# .net log4net


【解决方案1】:

字符串格式的这个例外似乎是由于 { 和 } 字符引起的,您可能需要将它们转义或用另一个合适的字符替换它们。

【讨论】:

  • 如果您演示了如何逃避它们,您的答案将会大大改善。
  • 感谢您的提示,我用 C# 交互式窗口的示例屏幕截图对其进行了更新。
  • @ruzgarustu 谢谢你,我赞成你的回答
【解决方案2】:

@ruzgarustu 的回答帮助我确定了问题的根本原因。

我通过下面的代码解决了这个问题。所以基本上我已经删除了括号。

AppLogger.InfoFormat(message.Trim('{', '}'), args);

【讨论】:

    【解决方案3】:

    你使用了不好的方法,使用AppLogger.Info(message)而不是AppLogger.InfoFormat(message, args)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-12
      • 2018-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-30
      • 1970-01-01
      相关资源
      最近更新 更多