多个布局渲染器之间的可选空间?

Optional spaces between multiple layout renderers?

我想我一定遗漏了一些非常明显的东西,但是疯狂的文档阅读和谷歌搜索却让我失望了。我有以下文件名布局:

<target name="asyncLogFile" xsi:type="AsyncWrapper" queueLimit="5000" overflowAction="Discard" >
      <target name="mainLogFile" xsi:type="File" fileName="logs/${mdlc:item=GameServer:whenEmpty=Main} ${mdlc:item=Controller}.log"
              layout="${longdate} ${level:uppercase=true} | ${logger} | ${message} ${exception:format=toString,Data:maxInnerExceptionLevel=3}" />
    </target>

MDLC 项目都可以为空,在 GameServer 的游戏中它被替换为“Main”而 Controller 无关紧要(如果 GameServer 是null 那么 Controller 将为 null)。

然而,这意味着如果 GameServer 为空,我最终会得到

Main .log 因为 space 我在两个 mdlc 条目之间。我怎样才能使 space 作为 GameServer mldc 条目的一部分可选!?我看过 :pad 在 之后添加 space 但这似乎不起作用。我试过连接 mdlc,但这不起作用。

我原以为您可以添加一些简单的东西作为环境 属性,例如 :suffix,但不存在这样的东西。

同样,我认为我一定遗漏了一些基本的东西,但它让我望而却步。

丑陋但这个有效

<target name="mainLogFile" xsi:type="File" fileName="logs/${when:when=length('${mdlc:item=GameServer}') > 0:inner=${mdlc:item=GameServer} ${mdlc:item=Controller}:else=Main}.log"

同样丑陋,但由于分配较少而更快:

    <variable name="GameServerLogFile" value="${when:when='${mdlc:item=GameServer}'=='':inner=Main:else=${mdlc:item=GameServer} ${mdlc:item=Controller}}" />

    <targets>
       <target name="mainLogFile" xsi:type="File" fileName="logs/${GameServerLogFile}.log" />
    </targets>

最好与空字符串 '' 进行比较,而不是调用 length() 方法。