Tôi đang sử dụng khung khai thác NLog và đang cố gắng để có được ngoại lệ và thông tin stacktrace hiển thị trong bất kỳ ứng dụng trình ghi nhật ký UDP nào, chẳng hạn như Sentinel và Log2Console, nhưng chỉ có thể nhận được phần thông điệp nhật ký hiển thị. Xuất ra một tập tin hoạt động tốt như hầu hết các ví dụ làm điều đó, do đó, vấn đề xoay quanh việc sử dụng các mục tiêu mạng với NLog.Cách đăng nhập ngoại lệ với các mục tiêu mạng trong NLog
Thưởng nếu định dạng tùy chỉnh có thể được áp dụng cho ngoại lệ và ngăn xếp bên trong, nhưng điều này không bắt buộc. Exception.ToString() sẽ đi một chặng đường dài.
Lưu ý trên mã ví dụ: Với Log2Console Tôi đã tìm thấy article về cách gửi ngoại lệ dưới dạng mục nhật ký riêng biệt. Mặc dù điều này làm việc, tôi đã không hài lòng với giải pháp.
Ví dụ đang ngoại lệ logging:
Logger Log = LogManager.GetCurrentClassLogger();
try
{
throw new InvalidOperationException("My ex", new FileNotFoundException("My inner ex1", new AccessViolationException("Innermost ex")));
}
catch (Exception e)
{
Log.ErrorException("TEST", e);
}
Ví dụ NLog.config:
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets async="true">
<!-- Send by UDP to Sentinel with NLogViewer protocol -->
<target name="network" xsi:type="NLogViewer" address="udp://192.168.1.3:9999" layout="${message}${onexception:inner=${newline}${exception:format=tostring}}" />
<!-- Send message by UDP to Log2Console with Chainsaw protocol -->
<target name="network2" xsi:type="Chainsaw" address="udp://192.168.1.3:9998" appinfo="Grocelist"/>
<!-- Send exception/stacktrace by UDP to Log2Console with generic network protocol -->
<target name="network2ex" xsi:type="Network" address="udp4://192.168.1.3:9998" layout="${exception:format=ToString}" />
<target name="logfile" xsi:type="File" layout="${longdate}|${level:uppercase=true}|${logger}|${message}|${exception:format=tostring}"
createDirs="true"
fileName="${basedir}/logs/${shortdate}.log"
/>
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="logfile" />
<logger name="*" minlevel="Debug" writeTo="network" />
<logger name="*" minlevel="Debug" writeTo="network2" />
<logger name="*" minlevel="Warn" writeTo="network2ex" />
</rules>
</nlog>
Một số liên kết:
- http://nlog-project.org
- http://nlog-project.org/wiki/Targets
- http://nlog-project.org/wiki/Exception_layout_renderer
- http://nlog-project.org/2011/04/20/exception-logging-enhancements.html
- http://nlog-project.org/wiki/How_to_properly_log_exceptions%3F
- How to tell NLog to log exceptions?
- https://stackoverflow.com/a/9684111/134761
- http://nlog-forum.1685105.n2.nabble.com/How-to-send-stacktrace-of-exceptions-to-Chainsaw-or-Log2Console-td5465045.html
Chỉnh sửa: Sau khi tìm kiếm thêm, điều này có vẻ là hạn chế đối với kết thúc của NLog. Một miếng vá gần đây là rõ ràng ngoài kia: log4jxmlevent does not render Exception
Edit2: tôi xây dựng lại NLog với bản vá, nhưng nó không có vẻ để giúp đỡ trong việc Sentinel hoặc Log2Console ứng dụng. Tôi có thể phải thử log4net để đảm bảo rằng những ứng dụng đó thực sự hỗ trợ những gì tôi đang cố gắng đạt được.
Edit3: Tôi hiện đang sử dụng string.Format() để tự mình tham gia và định dạng văn bản và thông báo ngoại lệ. Điều này hoạt động tốt, nhưng không phải là những gì tôi đang tìm kiếm ở đây.
Mã nguồn cho NLogViewerTarget trên Github cho thấy rằng Layout set {} là no-op nên bạn không thể ghi đè lên mặc định không có ngoại lệ. –