我正在更换我们的日志记录功能,手动浏览所有代码并替换它需要很长时间。
以下是当前代码:
错误消息:
cLogger.LogMessage(ComponentID.ClientID, CLASS_NAME, "AddContextMenuItem", MessageType.mtErrorMessage, "Null MenuItem provided. MenuItem's status not changed");
cLogger.LogMessage(ComponentID.ClientID, CLASS_NAME, "enableDisableToolbarItem", MessageType.mtErrorMessage, "Invalid toolbaritem provided.");
例外:
cLogger.LogMessage(ComponentID.ClientID, CLASS_NAME, "enableDisableContextMenuItem", MessageType.mtException, ex);
cLogger.LogMessage(ComponentID.ClientID, CLASS_NAME, "AddToolbarItem", MessageType.mtException, exc);
是否有一种简单的方法可以创建一个宏(之前从未使用过宏)或power shell或notepad ++脚本或其他东西来查找和替换所有这些不同的实例,使它们看起来如下所示:
新错误消息:
logger.Log(LogLevel.Error, CLASS_NAME + " AddContextMenuItem - Null MenuItem provided. MenuItem's status not changed");
logger.Log(LogLevel.Error, CLASS_NAME + " enableDisableToolbarItem - Invalid toolbaritem provided.");
和
新例外:
logger.Log(LogLevel.Exception, CLASS_NAME + " enableDisableContextMenuItem - " + ex);
logger.Log(LogLevel.Exception, CLASS_NAME + " AddToolbarItem - " + exc);
我正在替换整个项目中的代码,它只需要花费太长时间来完成并手动更改所有日志记录代码。非常感谢任何帮助。
答案 0 :(得分:2)
有几个选择:
正则表达式搜索&在Visual Studio中替换:
搜索异常示例
\w+logger.LogMessage\([^,]+,([^,]+),([^,]+),[^,]+,([^\",]+)\);
替换
logger.Log(LogLevel.Exception, $1 + $2 + $3);
答案 1 :(得分:1)
是的,您可以使用正则表达式执行此操作,在PowerShell中可能比在Notepad ++或VSCode中更容易。
很难从您的示例中准确地判断出每个项目中您要更改的内容,但基本概念是执行以下操作:
如果#3更复杂,您需要在替换之前进一步更改变量文本 - 这是脚本语言优于纯搜索和替换的地方。
这是一个简化的示例(PowerShell,但在支持正则表达式的其他语言或编辑器中类似),用于静态替换" FunctionOldName"在交换Param1和Param2的顺序并根据这些参数的原始名称更改名称时:
"Function_OldName Param1 Param2" -replace 'Function_OldName\s+(\w+)\s+(\w+)',
'NewFunctionName New$2Parm New$1Parm'
1美元和2美元是对第一个parens"和"第二个parens"分别在匹配字符串中。
如果你能写出明确的例子,说明你的改变文本的哪些部分必须匹配,只需改变,重新安排或重建,那么就可以向你展示一些更相关的例子......
您可以使用PowerShell或编辑器在许多文件中执行此操作,但通常在编程语言(例如,PowerShell)中对多个文件执行此操作会更容易一些。
Get-ChildItem *.PS1 -recurse | ForEach-Object {
'Function_OldName\s+(\w+)\s+(\w+)', # your match goes here
'NewFunctionName New$2Parm New$1Parm' # your replacement goes here
}