首页 > 解决方案 > 如何在 azure 管道中访问 log4net appender 文件值和替换

问题描述

我正在尝试从管道替换日志文件路径

<configuration>
 <configSections>
  <applicationSettings>
   <log4net debug="true">
    <appender name="appender1">
        <file value="log.txt"/>
    </appender>
   </log4net>
  </applicationSettings>
 </configSections>
</configuration>

我正在使用FileTransform任务来实现这一点。如何访问 log4net appender 文件值并在 azure 管道中替换 What 和 How 应该是要在变量中设置的“名称”。我希望将“值”设置为“D:\Logs\log.txt”。谢谢。

标签: xmlazureazure-devopsazure-pipelinesazure-pipelines-release-pipeline

解决方案


正如FileTransform 任务文档中所述。管道中定义的变量将与appSettings、applicationSettings 和 connectionStrings 部分中的key或条目匹配。name

在构建或发布管道中定义的变量将与任何配置文件和 parameters.xml 的 appSettings、applicationSettings 和 connectionStrings 部分中的“key”或“name”条目匹配。变量替换在配置转换后运行。

因此,您可以在配置文件中为属性添加name属性。file例如在下面。我添加了一个名称属性LogFile

 <applicationSettings>
   <log4net debug="true">
    <appender name="appender1">
        <file name="LogFile" value="log.txt"/>
    </appender>
   </log4net>
  </applicationSettings>

LogFile然后,您可以在 azure devops 管道的变量部分定义一个名为的变量。请参见下面的示例:

variables:
  LogFile: D:\Logs\log.txt

steps:
- task: FileTransform@1
  inputs:
    folderPath: $(System.DefaultWorkingDirectory)
    fileType: xml
    

如果您不想向属性添加name属性file。您可以使用 Task Magic Chuncks来替换file属性的值。

设置转换configuration/configSections/applicationSettings/log4net/appender/file/@value": "D:\Logs\log.txt"。请参见下面的示例:

请参阅此处了解如何转换 XML 文件

steps:
- task: sergeyzwezdin.magic-chunks.magic.chunks.MagicChunks@2
  displayName: 'Config transform'
  inputs:
    sourcePath: '$(System.DefaultWorkingDirectory)/path/to/app.config'
    transformations: |
     {
       "configuration/configSections/applicationSettings/log4net/appender/file/@value": "D:\Logs\log.txt"
      }

推荐阅读