我正在使用新的 EventSource 类从我的应用程序写入 Windows 事件日志,到目前为止它很棒。但是,我观察到有两件事会导致可能相关的问题:传递给 Event 属性的格式字符串在写入事件日志之前似乎没有经过正常的 string.Format 处理。
考虑这个块:
[Event((int)LogEvent.UserCreated, Keywords=Keywords.Directory, Channel=EventChannel.Operational,
Message="Created username {0} with forum post signature {1} and homepage {2}.")]
public void UserCreated(string username, string signature, string homepageAddress)
{
WriteEvent((int)LogEvent.UserCreated, username, signature, homepageAddress);
}
会发生一些事情:
- 如果我尝试在消息的格式字符串中插入 \n,则事件日志中不会打印换行符。
- 如果签名字符串包含换行符,则换行符会自然地打印在事件日志中。
- 如果签名或 homepageAddress 字符串包含类似 ETW 的标记(%1、%2 或 %3),则 ETW 开始将这些伪标记替换为变量本身,并且最终得到嵌套在它们自身中的变量。
我假设如果 ETW 有一个转义字符,它可以用来在格式字符串中放置换行符,并且还允许我预处理我的字符串值以防止这些 sql 注入样式错误。
这样的转义字符是否存在?这通常是怎么做的?