Tôi có một ứng dụng C# .NET 4.5 đa luồng đang chạy.NLog đang bỏ qua các thông điệp tường trình. .NET vấn đề? Vấn đề đa luồng?
Chạy trên máy tính xách tay Windows 7 cục bộ của tôi, NLog ghi lại tất cả thư của tôi. Tôi xuất bản ứng dụng bằng Visual Studio ... sao chép ứng dụng đã xuất bản lên Windows Server 2008 ... và chạy ứng dụng trên máy chủ: kết quả là các thông báo tường trình bị bỏ qua. Ai đó có thể giúp tôi hiểu TẠI SAO và làm thế nào tôi có thể sửa lỗi này hoặc đề xuất một thay thế cho NLog?
tập tin cấu hình của tôi là như sau:
Tôi đã cố gắng này mà không có sự "async = true"
<targets async="true">
<target xsi:type="ColoredConsole"
name="ColoredConsole"
layout="${date} ${level} ${message} ${event-context:item=AlgID} " />
<target name="xmlfile" xsi:type="File"
fileName="C:\QRT\Logs\LogEmiter.Nlog.xlog" keepFileOpen="true"
layout="${log4jxmlevent}" />
<target xsi:type="File"
name ="LogFile" fileName="C:\QRT\Logs\QRTLog-${shortdate}.log"
layout ="${date:format=yyyy-MM-dd HH\:mm\:ss.fff}|${level}|${threadid}|${threadname}|${event-properties:item=FromID}|${message}${exception:format=tostring} "/>
<target xsi:type="File"
name ="TapeLogFile" fileName="C:\QRT\Logs\QRTMarketLog.txt"
layout ="${date:format=yyyy-MM-dd HH\:mm\:ss.fff}|${level}|${message}"/>
</targets>
<rules>
<!-- add your logging rules here -->
<logger name ="TapeLogFile" minlevel="Trace" writeTo="TapeLogFile" />
<logger name ="TapeLogFile" minlevel="Trace" writeTo="ColoredConsole" final="true"/>
<logger name="*" minlevel="Trace" writeTo="ColoredConsole" />
<logger name="*" minlevel="Trace" writeTo="xmlfile" />
<logger name="*" minlevel="Trace" writeTo="LogFile" />
<!--
Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace) to "f"
<logger name="*" minlevel="Debug" writeTo="f" />
-->
</rules>
</nlog>
tôi đăng nhập thông điệp theo cách này:
Trong lớp điển hình của tôi, tôi sẽ khởi tạo lớp trợ giúp NLog của tôi như sau:
private void InitliazlieLogger()
{
LogManager.ThrowExceptions = true;
m_logger = new NLogHelper(LogManager.GetCurrentClassLogger());
m_logger.Set("FromID", "Email"); // Class setting.
}
private void DoSomething(int _x)
{
m_logger.Debug ("Print this statement: {0}", _x);
}
Tôi có lớp trợ giúp NLog ...
public NLogHelper(Logger Logger)
{
m_logger = Logger;
m_properties = new Dictionary<string, object>();
}
public void Debug(string Message, params object[] Args)
{
m_logger.Debug()
.Message(Message, Args)
.Properties(m_properties)
.Write();
notify(Severity.Debug, Message);
}
Vấn đề là một số thông điệp tường trình chỉ bị bỏ qua. Tôi đã thêm lớp ghi nhật ký của riêng mình đã ghi vào một tệp theo cách thủ công và chèn một cuộc gọi vào NLogHelper.Debug và tôi thấy rằng tệp tôi đã viết thủ công có bộ thông điệp tường trình đầy đủ nhưng đầu ra NLog thiếu một số.
Một lần nữa, điều này hoạt động trên máy tính xách tay của tôi, nhưng không thành công trên Windows Server 2008. Máy chủ của tôi đã cài đặt .NET 4.6.1. Tôi dường như chỉ có 4.5.2 trên máy tính Windows 7 của mình. Đó có thể là nó?
Lưu ý: Nếu tôi tải tất cả các tệp nguồn lên máy chủ và sử dụng Visual Studio trên máy chủ để biên dịch cùng một mã, NLog có vẻ hoạt động?!?
-Được sử dụng.
Cảm ơn -ed
'm_logger.Debug()' sẽ đăng nhập khi nguồn ở chế độ DEBUG. phải không? điều đó có nghĩa là khi bạn xuất bản nguồn của mình trên máy chủ, các tệp nhị phân đó sẽ chạy trong chế độ RELEASE. Điều đó có nghĩa là nó sẽ bỏ qua tuyên bố đăng nhập. Bạn không nghĩ sao? – Savaratkar
Và bạn đã đề cập rằng, trên máy chủ của bạn, bạn chạy nguồn của bạn từ VS, do đó bạn chạy nó trong chế độ DEBUG một lần nữa. đúng? – Savaratkar
Bạn đúng. Tôi đã thử một số cách để chạy trên máy chủ. Tôi đã tìm thấy rằng "phát hành" đòi hỏi "cài đặt" trên hệ thống đích làm cho nó khó khăn để tìm tập tin cấu hình vì vậy tôi bây giờ chỉ cần sao chép toàn bộ bin/thư mục Debug. Dù sao, nhật ký Logger.Debug đã hoạt động. Đó là Logger.Info bị thiếu. –