标签: tracesource

使用Trace和TraceSource之间的区别

谁知道System.Diagnostic.TraceSystem.Diagnostic.TraceSource班级之间的区别?

我一直在使用Trace来完成我的大部分项目,而且我刚刚发现了TraceSource前几天.他们似乎提供类似的API,是一个比另一个更好?

.net logging system.diagnostics tracesource

32
推荐指数
2
解决办法
8910
查看次数

System.Diagnostics.TraceSource中的跟踪输出格式

以下代码:

static void Main(string[] args)
{
    TraceSource ts = new TraceSource("MyApplication");

    ts.Switch = new SourceSwitch("MySwitch");
    ts.Switch.Level = SourceLevels.All;

    ts.Listeners.Add(new TextWriterTraceListener(Console.Out));

    ts.TraceInformation("Hello World");
    Console.ReadKey();
}
Run Code Online (Sandbox Code Playgroud)

生成以下输出:

MyApplication信息:0:Hello World

跟踪输出开头的"MyApplication Information:0:"部分来自TraceSource类本身.

但是,我需要在行的开头有一个时间戳,我想将"信息"更改为"信息".

有没有办法在跟踪输出中获得更多自由,这样我可以将其配置为:

13:03:00 - MyApplication Info:Hello World

我尝试了几个小时,但没有成功.无论我做什么,在输出行的开头,始终有这个常量预定义的"MyApplication Information:0:Hello World"输出.

MSDN文档也没有透露任何有用的信息.

.net c# system.diagnostics tracesource

18
推荐指数
2
解决办法
1万
查看次数

我什么时候在代码中需要多个TraceSource?

如果一个应用程序将其所有活动数据写入一个日志文件中,是否有使用多个TraceSource的用途?我只是对代码中需要多个TraceSource的用例感到好奇.

c# tracesource

5
推荐指数
1
解决办法
2963
查看次数

如何使用app.config阻止TextWriterTraceListener附加?

我正在使用System.Diagnostics.TraceSource进行日志记录,我的一个侦听器是TextWriterTraceListener.在跟踪引物中,它将其设置如下:

<listeners>
  <add initializeData="output.txt" 
       type="System.Diagnostics.TextWriterTraceListener"
       name="myLocalListener" />
</listeners>
Run Code Online (Sandbox Code Playgroud)

问题是这将始终附加到output.txt.如何在配置文件中将其更改为覆盖?

以编程方式我想要的听众是:

new TextWriterTraceListener(new StreamWriter("output.txt", false));
Run Code Online (Sandbox Code Playgroud)

c# logging app-config tracesource

5
推荐指数
1
解决办法
2699
查看次数

如何在.NET程序中解析TraceSource名称?

TraceSource类的MSDN文档中有一个示例,说明app.config文件如何列出TraceSource实例的信息:

http://msdn.microsoft.com/en-us/library/system.diagnostics.tracesource.aspx

但是,没有关于TraceSource值存储位置的信息...现有的TraceSource对象存储在哪里?什么时候(编辑:它们意味着配置的实例)构建?在创建TraceSource对象时,TraceSource对象如何知道如何返回命名实例(编辑:应该配置实例)而不是新实例?我可以在不使用Reflection的情况下找到现有TraceSource对象的列表吗?

.net c# app-config tracesource

5
推荐指数
1
解决办法
1156
查看次数

OWIN 干扰 log4net

在我的应用程序中,我有以下日志记录策略/附加程序:

  • DebugAppender:如果根级别为 DEBUG,则将与 DEBUG 匹配的每条消息写入默认跟踪侦听器输出
  • ConsoleAppender:如果应用程序模式(全局上下文属性)是“控制台”,则将警告上方的每条消息写入控制台输出
  • EventLogAppender:如果应用程序模式(全局上下文属性)为“服务”,则将 ERRROR 以上的每条消息写入控制台输出
  • RollingFileAppender:将 INFO 上方的每条消息写入滚动平面文件

这在整个应用程序中都非常有效,直到我使用IAppBuilder界面启动 OWIN 网络主机的第一行。我一调用WebApp.Start,就注意到以下行为:

  • 调试消息 (ILogger.Debug) 正在写入控制台输出
  • 调试消息 (ILogger.Debug) 两次写入 VS 调试输出

经过进一步调查,我发现 OWIN 默默地将System.Diagnostics.DefaultTraceListener和的实例附加System.Diagnostics.TextWriterTraceListener到默认跟踪/调试输出,这可能是问题的根源。但是,DefaultTraceListener在 app.config 中明确声明并没有帮助。

有什么办法可以将 OWIN 配置为不那么......偷偷摸摸?

c# debugging log4net tracesource owin

5
推荐指数
1
解决办法
1701
查看次数

我可以在 ASP .Net Core 中使用 TraceSource 进行日志记录吗?

TraceSource 可以从System.Diagnostics我的 ASP .NET Core 项目中访问。

在 src 文件中,您可以找到标头:

#region Assembly System.Diagnostics.TraceSource, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.netcore.app\2.2.0\ref\netcoreapp2.2\System.Diagnostics.TraceSource.dll
#endregion
Run Code Online (Sandbox Code Playgroud)

这是什么意思?.Net Famework >=4.1.1.0 的版本可以接受吗?TraceSource 是否包含在某些版本的 .Net Standard 中?

更新我的解决方案: 它需要配置。

1) app.config 仅适用于 .NET Framework,https://github.com/dotnet/corefx/issues/24829

2) .Net Core 草案:

TraceSource.Listeners.Add(new MyListener());
TraceSource.Switch = new SourceSwitch();
Run Code Online (Sandbox Code Playgroud)

.net c# tracesource .net-core .net-standard

5
推荐指数
1
解决办法
2104
查看次数

TraceSource锁定文件

我有一个课程的实例,可以存在很长时间(几个小时到几个月).它有一个将日志事件输出到文本文件的方法C:\mylog.txt.如下

public MyClass
{
    private static System.Diagnostics.TraceSource traceSource = new System.Diagnostics.TraceSource("My.Source");

    private static void MyMethod()
    {
        traceSource.TraceEvent(System.Diagnostics.TraceEventType.Information, 0, "MyMethod called.");
    }
}
Run Code Online (Sandbox Code Playgroud)

C:\mylog.txt可能会变得非常大,我想删除它.但我无法删除该文件,因为它被锁定traceSource(通过终止进程我可以删除文件).

所有示例都将System.Diagnostics.TraceSource其实例声明为上面的静态类成员.鉴于我的情况,在下面的方法中初始化它是否可以接受?

public MyClass
{
    private static void MyMethod()
    {
        var traceSource = new System.Diagnostics.TraceSource("My.Source");
        traceSource.TraceEvent(System.Diagnostics.TraceEventType.Information, 0, "MyMethod called.");
    }
}
Run Code Online (Sandbox Code Playgroud)

或者是否有必须声明为静态的特定原因?难道我做错了什么?文件是否锁定了预期/必需的行为?

.net c# tracesource

4
推荐指数
1
解决办法
662
查看次数

TraceSource和ASP.NET:适用于Web应用程序,而不适用于WebSites

我正在向ASP.NET网站添加跟踪功能,所以我决定通过创建几个原型来研究TraceSource ; Web应用程序项目和网站项目.

我正在为每个项目使用类似的Web.config来记录到Windows事件日志的跟踪:

<configuration>
    <system.web>
        <compilation debug="true" strict="false" explicit="true" targetFramework="4.0"/>
    </system.web>    
    <system.diagnostics>
        <trace autoflush="true" />
        <sources>
            <source name="HelloWorld">
                <listeners>
                    <add name="eventlogListener" />
                </listeners>
            </source>
        </sources>    
        <sharedListeners>
            <add name="eventlogListener" type="System.Diagnostics.EventLogTraceListener" initializeData="My Source" />
        </sharedListeners>
    </system.diagnostics>
</configuration>
Run Code Online (Sandbox Code Playgroud)

我只是从以下基本跟踪开始:

private static TraceSource _ts = new TraceSource("HelloWorld", SourceLevels.All);

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);

    _ts.TraceEvent(TraceEventType.Information, 10, "Greetings from OnLoad.");
}
Run Code Online (Sandbox Code Playgroud)

使用Web应用程序项目,我可以看到在事件日志中创建的跟踪.但是,有了网站项目,我不能.

网站项目需要使用TraceSource的其他步骤(例如:web.config设置,权限等)吗?

c# asp.net trace .net-4.0 tracesource

3
推荐指数
1
解决办法
1437
查看次数

如何过滤由事件ID监听的跟踪?

我正在使用next方法添加跟踪记录:

TraceSource.TraceEvent(TraceEventType, Int32, String)
Run Code Online (Sandbox Code Playgroud)

其中Int32表示事件ID.

那么如何在TraceSwitch中过滤以仅按指定的事件ID进行监听?呃,这是不可能的?

<system.diagnostics>
    <sources>
        <source name="MyTraceSource" switchName="sourceSwitch" switchType="System.Diagnostics.SourceSwitch>"
            <listeners>
                <add name="console" type="System.Diagnostics.ConsoleTraceListener" />
            </listeners>
        </source>
    </sources>
    <switches>
        <add name="sourceSwitch" value="?" />
    </switches>
</system.diagnostics>
Run Code Online (Sandbox Code Playgroud)

c# trace traceswitch tracelistener tracesource

2
推荐指数
1
解决办法
2073
查看次数

等待Task.Run在退出时更改跟踪ActivityId

我试图使用Trace.CorrelationManager.ActivityId来关联日志条目.但是,我发现此代码完成时:

var result = await Task.Run(() => LongRunningMethod());
Run Code Online (Sandbox Code Playgroud)

ActivityId已经从输入时改变了.在LongRunningMethod()中它是正确的(我在方法中有各种跟踪事件),它似乎只在await完成时改变.

我的问题是为什么ActivityId改变了?

这行代码在使用async声明的函数中,而async又由MVC项目中的异步控制器操作调用:

async public Task<ActionResult> Index()
{
...
var tasks = {list of Download<T> delegates}

var result = await Task.WhenAll(tasks)
}


async public Task<OperationResult> Download<T>(IEnumerable<T> data, Device device)
{
...
var result = await Task.Run(() => LongRunningMethod());

return result
}
Run Code Online (Sandbox Code Playgroud)

也许我错误地使用async/await或Task方法?我基本上希望所有'LongRunningMethod'同时异步启动,然后等到所有完成.

c# task-parallel-library async-await tracesource

2
推荐指数
1
解决办法
1725
查看次数