在shell脚本中,如何回显所有调用的shell命令并展开任何变量名?例如,给定以下行:
ls $DIRNAME
Run Code Online (Sandbox Code Playgroud)
我希望脚本运行该命令并显示以下内容
ls /full/path/to/some/dir
Run Code Online (Sandbox Code Playgroud)
目的是保存所有调用的shell命令及其参数的日志.也许有更好的方法来生成这样的日志?
我想了解人们如何处理跟踪和登录实际应用程序的故事.以下是一些可能有助于解释您的答案的问题.
构架
你使用什么框架?
如果使用跟踪,是否使用Trace.Correlation.StartLogicalOperation?
您是手动编写此代码,还是使用某种形式的面向方面编程来执行此操作?小心共享代码片段?
您是否在跟踪源上提供任何形式的粒度?例如,WPF TraceSources允许您在不同级别配置它们:
听众
你使用什么日志输出?
如果使用文件,您使用滚动日志还是仅使用单个文件?如何使日志可供人们使用?
查看
您可以使用哪些工具查看日志?
如果要构建ASP.NET解决方案,是否还使用ASP.NET运行状况监视?您是否在运行状况监视器事件中包含跟踪输出?那么Trace.axd呢?
自定义性能计数器怎么样?
我如何获得有关git/git-shell的一些调试信息?
我有一个问题,user1可以克隆存储库没有问题,而user2只能克隆一个空的.我设定了GIT_TRACE=1,但没有任何有用的东西被告知.
最后,经过长时间的反复试验,结果证明这是文件的权限问题.适当的错误消息可能会使此问题短路.
我想介绍一些我正在编写的C#应用程序的跟踪.可悲的是,我永远不会真的记得它是如何工作的,并且希望有一个具有参考品质的教程来检查它们.它应该包括:
你知道我们应该链接到的超级教程吗?
编辑:格伦斯拉文指出我正确的方向.将其添加到您的App.config/Web.config里面<configuration/>:
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add type="System.Diagnostics.TextWriterTraceListener" name="TextWriter"
initializeData="trace.log" />
</listeners>
</trace>
</system.diagnostics>
Run Code Online (Sandbox Code Playgroud)
这将添加一个TextWriterTraceListener将捕获您发送到的所有内容Trace.WriteLine等.
编辑: @DanEsparza指出你应该使用Trace.TraceInformation,Trace.TraceWarning而Trace.TraceError不是Trace.WriteLine,因为它们允许你以相同的方式格式化消息string.Format.
提示:如果您不添加任何侦听器,那么您仍然可以使用SysInternals程序DebugView(Dbgview.exe)查看跟踪输出:http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx
所以我正在尝试做一些简单的事情,我想在控制台中将我的踪迹分成几行,使用1个console.log语句:
console.log('roleName = '+roleName+' role_ID = '+role_ID+' modal_ID = '+modal_ID+\n+'related = '+related);
Run Code Online (Sandbox Code Playgroud)
您如何编写以上内容以追溯以下内容?
roleName = test
role_ID = test
modal_UD = test
related = test
Run Code Online (Sandbox Code Playgroud)
代替 roleName = test role_ID = test modal_UD = test related = test
我已经检查了其他几个看似相似的问题,但没有一个有帮助或正在谈论不同的事情.
谢谢参观!
假设我正在使用VB.Net中的一个小批量处理控制台应用程序.我希望能够像这样构建应用程序:
Sub WorkerMethod()
'Do some work
Trace.WriteLine("Work progress")
'Do more work
Trace.WriteLine("Another progress update")
'...
End Sub
Sub Main()
'Do any setup, like confirm the user wants to continue or whatever
WorkerMethod()
End Sub
Run Code Online (Sandbox Code Playgroud)
请注意,我正在使用Trace而不是Console我的输出.这是因为可以从其他地方调用worker方法,或甚至生活在不同的程序集中,并且我希望能够为其附加不同的跟踪侦听器.那么如何将控制台连接到跟踪?
我已经可以通过定义一个简单的类(如下所示)并在Trace的侦听器集合中添加一个实例来实现它,但我想知道是否有更多接受或内置的方法来完成此任务:
Public Class ConsoleTrace
Inherits Diagnostics.TraceListener
Public Overloads Overrides Sub Write(ByVal message As String)
Console.Write(message)
End Sub
Public Overloads Overrides Sub WriteLine(ByVal message As String)
Console.WriteLine(message)
End Sub
End Class
Run Code Online (Sandbox Code Playgroud) 在这个帖子中,很多人都表示他们使用log4net.我是TraceSources的粉丝,想知道为什么使用log4net.
这就是我喜欢跟踪源的原因:
由于.NET框架在内部使用TraceSources,它也为我提供了一种配置跟踪的一致方法 - 使用log4net,我必须配置log4net以及TraceSources.
什么log4net给我TraceSources没有(或通过编写几个自定义TraceListener无法完成)?
我已经实现了一个自定义跟踪侦听器(派生自TextWriteTraceListener),现在我想将我的应用程序设置为使用它而不是标准TextWriteTraceListener.
首先,我添加了默认值TextWriteTraceListener,以确保它正常工作.这是我的app.config:
<configuration>
<system.diagnostics>
<trace autoflush="true" indentsize="4">
<listeners>
<add name="TextListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="trace.log" />
<remove name="Default" />
</listeners>
</trace>
</system.diagnostics>
</configuration>
Run Code Online (Sandbox Code Playgroud)
现在我的跟踪侦听器在MyApp.Utils命名空间中定义并且被调用FormattedTextWriterTraceListener.所以我在上面的配置中更改了类型MyApp.Utils.FormattedTextWriterTraceListener,它目前看起来像这样:
<configuration>
<system.diagnostics>
<trace autoflush="true" indentsize="4">
<listeners>
<add name="MyTextListener" type="MyApp.Utils.FormattedTextWriterTraceListener" initializeData="trace.log" />
<remove name="Default" />
</listeners>
</trace>
</system.diagnostics>
</configuration>
Run Code Online (Sandbox Code Playgroud)
但是现在,当我尝试记录一些我正在收到ConfigurationErrorsException消息时:
找不到类MyApp.Utils.FormattedTextWriterTraceListener的类型.
有谁知道如何在配置中设置这个自定义监听器,如果它甚至可能?
来自Ocaml社区,我正在尝试学习一些Haskell.过渡进展顺利,但我对调试有点困惑.我曾经在我的ocaml代码中放置(很多)"printf",检查一些中间值,或者作为标志来查看计算完全失败的位置.
由于printf是一个IO动作,我是否必须解除IO monad中的所有haskell代码才能进行这种调试?或者有更好的方法来做到这一点(如果可以避免,我真的不想手工做)
我也找到了跟踪功能:http: //www.haskell.org/haskellwiki/Debugging#Printf_and_friends 这看起来正是我想要的,但我不明白它的类型:任何地方都没有IO!有人能解释一下跟踪功能的行为吗?