Tôi không thể nói rằng tôi đã thực sự thử điều này, nhưng bạn có thể sử dụng when filter và condition để đạt được những gì bạn muốn.
Dưới đây là một ví dụ từ condition
page:
<rules>
<logger name="*" writeTo="file">
<filters>
<when condition="length(message) > 100" action="Ignore" />
<when condition="equals('${logger}','MyApps.SomeClass')" action="Ignore" />
<when condition="(level >= LogLevel.Debug and contains(message,'PleaseDontLogThis')) or level==LogLevel.Warn" action="Ignore" />
<when condition="not starts-with('${message}','PleaseLogThis')" action="Ignore" />
</filters>
</logger>
</rules>
Để đạt được mục tiêu của bạn, bạn có thể làm cho một filter
như thế này:
<rules>
<logger name="*" writeTo="file">
<filters>
<when condition="length('${exception}') > 0" action="Log" />
</filters>
</logger>
</rules>
Ý tưởng được rằng bạn chỉ muốn ghi lại các tin nhắn nếu độ dài của chuỗi ngoại lệ là> 0. Một số ví dụ when condition
sử dụng cú pháp NLog LayoutRenderer (ví dụ: ${message}
) và một số không (ví dụ: message
). Tôi không chắc chắn đó là chính xác hoặc cú pháp để sử dụng trong tình huống nào. Ví dụ tôi đã đăng trực tiếp ở trên có thể khiến tin nhắn được ghi CHỈ nếu có ngoại lệ. Bạn cũng nên có thể cấu hình sao cho thư của bạn đến một đích được ghi "bình thường" và thư đến "ExceptionHoneypotTarget" của bạn chỉ được ghi lại nếu có ngoại lệ.
Có lẽ một cái gì đó như thế này:
<rules>
<logger name="*" writeTo="ExceptionHoneypot">
<filters>
<when condition="length('${exception}') > 0" action="Log" />
</filters>
</logger>
<logger name="*" writeTo="file">
</logger>
</rules>
Như tôi đã đề cập từ rất sớm, tôi đã không thực sự cố gắng nào của điều này, nhưng nó có vẻ như bạn sẽ có thể để làm điều đó, hy vọng tương tự như những gì trình bày ở trên .
Hoặc, bạn có thể sử dụng một số FilteringWrapper xung quanh HoneypotTarget. Cấu hình có thể giống như thế này:
<?xml version="1.0" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target name="Honeypot" xsi:type="FilteringWrapper"
condition="length('${exception}')>0">
<target xsi:type="File" fileName="${basedir}/Honeypot.txt" />
</target>
<target name="normal" xsi:type="File" fileName="${basedir}/Log.txt" />
</target>
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="Honeypot,normal" />
</rules>
</nlog>
tôi dựa ví dụ FilteringWrapper
trên một ví dụ từ từ here. Cách nó sẽ hoạt động, nếu cấu hình của tôi là chính xác, là tất cả các thư sẽ được ghi vào "Log.txt" và các thư có ngoại lệ không null sẽ được ghi vào "Honeypot.txt".
Ah lớn câu trả lời, cảm ơn. –
Tôi đã thử giải pháp này nhưng tôi phải kèm theo $ {exception} trong các dấu nháy đơn như sau: length ('$ {exception}'). Tôi đã gửi bản sửa đổi mới để đánh giá ngang hàng. –