【问题标题】:Optional spaces between multiple layout renderers?多个布局渲染器之间的可选空格?
【发布时间】:2020-12-24 10:20:52
【问题描述】:

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

<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 的游戏中,它被替换为“主要”,Controller 无关紧要(如果 GameServer 为空,那么 Controller 将为空)。

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

Main .log 因为我在两个 mdlc 条目之间有空间。我怎样才能使该空间成为GameServer mldc 条目的一部分!?我查看了:pad 在之后添加一个空格,但这似乎不起作用。我已经尝试连接mdlc,但这不起作用。

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

再次,我认为我必须在这里遗漏一些基本的东西,但它让我望而却步。

【问题讨论】:

    标签: nlog


    【解决方案1】:

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

        <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() 方法更好。

    【讨论】:

      【解决方案2】:

      很丑,但是这个行得通

      <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"
      

      【讨论】:

        猜你喜欢
        • 2011-04-20
        • 2011-11-07
        • 2019-10-05
        • 2013-12-10
        • 2018-07-29
        • 1970-01-01
        • 1970-01-01
        • 2011-04-17
        • 2015-01-21
        相关资源
        最近更新 更多