我们有一个自定义的TraceListener(从System.Diagnostics.TraceListener继承),用于ASP.NET Web应用程序日志记录。它一直都很好-没有问题。然后突然间它停止在我们的开发环境中工作(TraceListener.TraceEvent()停止触发)。我们对为什么它停止工作感到困惑。我们真正在代码中所做的唯一更改是添加了更多的构建配置(Dev,Test,Stage,Prod)。以前,它只有Debug和Release。

我注意到,当我在本地测试使用Debug配置进行构建时,会触发TraceListener.TraceEvent()。当我切换到其他构建配置(即测试)时,TraceEvent()便再也不会触发。这是我的Web .csproj文件的片段:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
  <DebugSymbols>true</DebugSymbols>
  <DebugType>full</DebugType>
  <Optimize>false</Optimize>
  <OutputPath>bin\</OutputPath>
  <DefineConstants>TRACE;DEBUG;SkipPostSharp</DefineConstants>
  <ErrorReport>prompt</ErrorReport>
  <WarningLevel>4</WarningLevel>
  <ExcludeGeneratedDebugSymbol>false</ExcludeGeneratedDebugSymbol>
  <PlatformTarget>AnyCPU</PlatformTarget>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Dev|AnyCPU'">
  <OutputPath>bin\</OutputPath>
  <DefineConstants>TRACE</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Test|AnyCPU'">
  <DebugSymbols>true</DebugSymbols>
  <DebugType>full</DebugType>
  <Optimize>false</Optimize>
  <OutputPath>bin\</OutputPath>
  <DefineConstants>TRACE;DEBUG;SkipPostSharp</DefineConstants>
  <ErrorReport>prompt</ErrorReport>
  <WarningLevel>4</WarningLevel>
  <ExcludeGeneratedDebugSymbol>false</ExcludeGeneratedDebugSymbol>
  <PlatformTarget>AnyCPU</PlatformTarget>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Stage|AnyCPU'">
  <OutputPath>bin\</OutputPath>
  <DefineConstants>TRACE</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Prod|AnyCPU'">
  <OutputPath>bin\</OutputPath>
  <DefineConstants>TRACE</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
  <OutputPath>bin\</OutputPath>
  <DefineConstants>TRACE</DefineConstants>
</PropertyGroup>

我不确定为什么切换构建配置似乎会关闭我们的日志记录。谁能指出我正确的方向?

最佳答案

找出问题。我的代码调用System.Diagnostics.TraceSource.TraceEvent()来广播跟踪事件是在另一个项目中。我需要通过以下方式启用对那个项目的跟踪:

<DefineConstants>TRACE</DefineConstants>

我错误地认为我只需要专注于主要目标项目(即Web项目)。现在这很有意义-调用System.Diagnostics.TraceSource.TraceEvent()的项目/程序集必须启用跟踪(通过目标构建配置的项目属性)以广播这些跟踪。然后,您的跟踪监听器可以听到它们。 :)

09-26 21:21