我正在使用Nlog从我的c#app登录.以下是<targets>我的Nlog.config中的部分:
<targets>
<target name="logfile" xsi:type="File" fileName="..\logs\${date:format=yyyyMMdd_HHmmss}_trg.log"
layout="${counter} | ${date:format=yyyy-MM-dd HH\:mm\:ss.ffff} | ${machinename} | ${level:uppercase=true} | ${logger:shortName=true} | ${stacktrace} | ${message:exceptionSeparator=EXCEPTION:withException=true}"
keepFileOpen="true"/>
</targets>
Run Code Online (Sandbox Code Playgroud)
对于filename我使用${date:format=yyyyMMdd_HHmmss}_trg.log基于创建时就来命名日志.但是,当我的应用程序运行时,记录器每秒都会创建一个新的日志文件.如何强制Nlog修复文件名,每个会话只创建一个日志?
这是我在StackOverflow上的第一篇文章,所以请耐心等待.如果我的代码示例有点长,我会提前道歉.
使用C#和LINQ,我试图id在更大的XML文件中识别一系列第三级元素(在这种情况下为000049).每个第三级id都是唯一的,我想要的是基于每个级别的一系列后代信息.更具体地说,如果type == A和location type(old) == vault和location type(new) == out,然后我想选择id.下面是我正在使用的XML和C#代码.
一般来说,我的代码有效.如下所示,它将返回id两次000049,这是正确的.但是,我发现了一个小故障.如果我删除history包含的第一个块type == A,我的代码仍然会返回id两次000049,它应该只返回一次.我知道它为什么会发生,但我无法找到更好的方法来运行查询.有没有更好的方法来运行我的查询来获得我想要的输出并仍然使用LINQ?
我的XML:
<?xml version="1.0" encoding="ISO8859-1" ?>
<data type="historylist">
<date type="runtime">
<year>2011</year>
<month>04</month>
<day>22</day>
<dayname>Friday</dayname>
<hour>15</hour>
<minutes>24</minutes>
<seconds>46</seconds>
</date>
<customer>
<id>0001</id>
<description>customer</description>
<mediatype>
<id>kit</id>
<description>customer kit</description>
<volume>
<id>000049</id>
<history>
<date type="optime">
<year>2011</year>
<month>04</month>
<day>22</day>
<dayname>Friday</dayname>
<hour>03</hour>
<minutes>00</minutes>
<seconds>02</seconds>
</date>
<userid>batch</userid>
<type>OD</type>
<location type="old">
<repository>vault</repository>
<slot>0</slot>
</location>
<location type="new">
<repository>out</repository> …Run Code Online (Sandbox Code Playgroud) 所以,我想在c#中为我正在开发的应用程序编写一个记录器.但是,由于我喜欢效率,我不想在执行期间反复打开和关闭日志文件.
我想我想将所有事件写入RAM,然后在应用程序退出时写入日志文件一次.这是一个好习惯吗?如果是这样,我该如何实施呢?
如果这不是一个好习惯,会是什么?
(而且我现在不使用Windows的事件日志.)