根据https://docs.microsoft.com/en-us/dotnet/framework/network-programming/how-to-configure-network-tracing 上的参考文件
我们可以在 web.config 或任何其他配置文件中设置它,我们可以获得详细的 system.net 跟踪、HttpClient
调用的数据包跟踪以及调用中的任何类型的问题HttpClient
都可以在跟踪中捕获,无论是证书、TLS 还是其他任何东西。
但是,我们是否有类似的 dotnet 核心/标准实现,可以在 web 应用程序或控制台应用程序/库中使用?
dotnet 框架的配置:
<configuration>
<system.diagnostics>
<sources>
<source name="System.Net" tracemode="includehex" maxdatasize="1024">
<listeners>
<add name="System.Net"/>
</listeners>
</source>
--------------
----------------------
Run Code Online (Sandbox Code Playgroud) c# system.diagnostics dotnet-httpclient .net-core .net-standard
为了解决通过未发送电子邮件的smtp-server发送电子邮件的问题,我建议使用System.Diagnosis.TextWriterTraceListener启用日志记录,以跟踪与smtp-server的通信以跟踪任何错误.我将以下内容添加到节点下的web.config中:
<system.diagnostics>
<trace autoflush="true" />
<sources>
<source name="System.Net" >
<listeners>
<add name="MyTraceFile"/>
</listeners>
</source>
<source name="System.Net.Sockets">
<listeners>
<add name="MyTraceFile"/>
</listeners>
</source>
</sources>
<sharedListeners>
<add
name="MyTraceFile"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="System.Net.trace.log" />
</sharedListeners>
<switches>
<add name="System.Net" value="Verbose" />
<add name="System.Net.Sockets" value="Verbose" />
</switches>
</system.diagnostics>
Run Code Online (Sandbox Code Playgroud)
我在我的开发机器上试了一下它工作得很好!我可以轻松地读出与smtp-server的完整通信.但是,在生产环境(在Windows 2003 Server中的IIS 6上运行)中,它根本不起作用.没有日志写入文件系统.我的第一个想法是,ASP.NET工作进程帐户(NETWORK SERVICE)可能没有足够的权限写入指定位置的文件系统.我修好了,但仍然没有记录.其次,我认为文件夹可能设置为"只读"并修复了该文件夹.但我仍然没有写日志.
有谁知道问题可能是什么?或者也许就如何解决这个问题提出一些建议?Thanx提前!
使用System.Diagnostics
跟踪时,是否在发布模式下不在生产 ASP.NET应用程序上删除"默认"跟踪侦听器时会产生显着(可测量)性能影响,在编译时定义常量但在运行时没有附加调试器?TRACE
为了澄清,问题是"默认"跟踪侦听器对使用其他跟踪侦听器的应用程序的影响,而不是System.Diagnostics跟踪的替代方案.
没有连接调试器时,是否有任何衡量默认跟踪侦听器的影响?是否已经对生产中的影响做了任何基准测试,从而忽略了代码中的"remove"元素:
<configuration>
<system.diagnostics>
<trace autoflush="false" indentsize="4">
<listeners>
<remove name="Default" />
<add name="myListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="c:\myListener.log" />
</listeners>
</trace>
</system.diagnostics>
</configuration>
Run Code Online (Sandbox Code Playgroud)
这个问题与.NET跟踪不同:什么是"默认"监听器?从某种意义上说,当在Visual Studio下运行并更新调试UI时,其他问题集中在默认侦听器的影响上,而这个问题主要关注生产环境中的发布代码.
我们已经知道它是如何System.Diagnostics.Process.Start("C:\filename.png")
工作的,但如果文件名不以扩展名结尾怎么办?
如何使用与扩展名相关联的默认程序运行没有扩展名的文件.png
名?
就像是:
openFile("C:\filename","PNG")
Run Code Online (Sandbox Code Playgroud) 是否有机会在C#应用程序中确定它当前是否正在调试?这个想法是忽略例如超时,或提供额外的信息.
为了清楚说明,我不是在讨论条件编译器标志DEBUG
.这允许我决定如何编译代码.它没有提供有关它是否在调试器中运行的信息.
我需要在运行时决定,而不是在编译时.
我使用 GPG 在 ASP.NET、C# 中加密文件。我的代码使用 ProcessStartInfo 执行命令,然后执行 gpg.exe,但我遇到了问题。GPG 要求我使用“y”作为选项来授权始终信任。我也尝试使用“是”(正如 GPG 帮助中所建议的,对所有问题都假设“是”),但这也不起作用。
运行 GPG 的字符串是:
"gpg --armor --output fileOutput.gpg --recipient secure@site.com --encrypt fileInput.xml --always-trust --yes"
Run Code Online (Sandbox Code Playgroud)
提示的问题是:
不确定密钥是否属于用户 ID 中指定的人。如果你真的知道你在做什么,你可以回答下一个问题是
还是要用这个键?
我怎样才能完全忽略这个问题,或者在没有提示确认的情况下强制答案为真(“是”)?
谢谢。
在.NET中Process.GetProcessById
,如果没有运行具有此ID的进程,则抛出异常.如何安全地调用此方法,以便它不会抛出异常?我在想类似的东西
if(Process.IsRunning(id)) return Process.GetProcessById(id);
else return null; //or do something else
Run Code Online (Sandbox Code Playgroud)
但是找不到任何检查ID的方法,除了可能获取所有正在运行的进程并检查列表中是否存在id.
来自我的"回答"问题"任务中的秒表似乎是所有任务中的附加物,想要测量任务间隔"
创建新的秒表实例之间可能存在以下区别:
Stopwatch timer = System.Diagnostics.Stopwatch.StartNew();
Run Code Online (Sandbox Code Playgroud)
同
Stopwatch timer = new Stopwatch();
timer.Start();
Run Code Online (Sandbox Code Playgroud)
隐含的子问题:
为什么StartNew()
提供方法?
我希望能够声明一个EventSource,它至少有几种方法,默认情况下提供常规的日志记录工具.
例如
此外,我希望能够在每个服务中定义一个特定的事件源,该事件源继承自提供上述内容的基类.目前,创建清单的EventRegister.exe应用程序抱怨必须密封事件源.
我做错了吗?如果是这样,我怎样才能实现上述目标?查看示例代码:
public class ETWBase : EventSource
{
[Event(1, Channel = EventChannel.Admin, Message = "Info Message: {0}")]
public void Info(string message) { this.WriteEvent(1); }
[Event(2, Channel = EventChannel.Debug, Message = "Debug Message: {0}")]
public void Trace(string message) { this.WriteEvent(2); }
}
[EventSource(Name = "ABC-MyEtwServiceEventSource")]
public sealed class MyEtwServiceEventSource : ETWBase
{
public static MyEtwServiceEventSource Log = new MyEtwServiceEventSource();
[Event(3, Channel = EventChannel.Debug, Message = "My specific Message: {0}")]
public void Trace(string message) { this.WriteEvent(3); } …
Run Code Online (Sandbox Code Playgroud) 我正在寻找一个简单的本机.NET错误日志记录解决方案.我对使用log4net,Elmah或任何其他日志库不感兴趣.以下是我计划使用的内容.我的问题是我的网站上的性能是至关重要的,这个流程是否会引入任何性能问题?
Global.asax中
protected void Application_Start(object sender, EventArgs e)
{
GlobalFilters.Filters.Add(new HandleExceptionsAttribute());
}
Run Code Online (Sandbox Code Playgroud)
处理异常属性:
public sealed class HandleExceptionsAttribute : HandleErrorAttribute
{
private void TraceError(Exception _this)
{
Trace.TraceError("{0} Exception {1}", DateTime.Now.ToString("M/d/yyyy h:mmtt"), _this);
}
public override void OnException(ExceptionContext filterContext)
{
var ex = filterContext.Exception;
TraceError(ex);
Task.Run(() =>
{
using (var msg = new MailMessage(ConfigurationManager.AppSettings["SendErrorsFrom"], ConfigurationManager.AppSettings["SendErrorsTo"]))
{
msg.Subject = ex.Message;
msg.Body = ex.StackTrace;
using (var smtp = new SmtpClient())
smtp.Send(msg);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
web.config中:
<system.diagnostics>
<trace autoflush="true" indentsize="4">
<listeners>
<add name="textWriterListener" type="System.Diagnostics.TextWriterTraceListener" …
Run Code Online (Sandbox Code Playgroud)