私は、Windowsサービスとそれを制御するシステムトレイアプリケーションを作成しています。私のサービスでは、たくさんのlog4netロギングステートメントがあります。私は、これらのメッセージをsystrayアプリケーションから開くことができるウィンドウに表示し、log4net TraceAppenderを試し始めました。私はまた、私のシステムトレイアプリケーションにカスタムTraceListenerを追加しました。残念ながら、私はシストレーアプリケーションでは何のメッセージも入ってこない。私は、他のアプリケーションでこれらのメッセージを受信することさえ可能であるとは確信していません。私のサービスで別のアプリケーションでTraceAppenderから送信されたlog4netメッセージを受信する
私はlog4net.xmlに次の行を追加しました:
<appender name="TraceAppender" type="log4net.Appender.TraceAppender">
<immediateFlush value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
をルートセクションで、私はこれらの線に持っているので、私はまた、ファイルアペンダを使用しています:
<root>
<level value="WARN" />
<appender-ref ref="RollingFileAppender" />
<appender-ref ref="TraceAppender" />
</root>
をメッセージはログファイルに届きます。システムトレイのアプリで
、私は次のクラスを追加しました:
class TextBoxTraceListener : TraceListener
{
private static TextBox _target;
private StringSendDelegate _invokeWrite;
public TextBoxTraceListener()
{
}
public TextBoxTraceListener(TextBox target)
{
_target = target;
_invokeWrite = new StringSendDelegate(SendString);
}
public override void Write(string message)
{
if (_target != null)
{
_target.Invoke(_invokeWrite, new object[] { message });
}
}
public override void WriteLine(string message)
{
if (_target != null)
{
_target.Invoke(_invokeWrite, new object[]
{ message + Environment.NewLine });
}
}
private delegate void StringSendDelegate(string message);
private void SendString(string message)
{
// No need to lock text box as this function will only
// ever be executed from the UI thread
_target.Text += message;
}
}
私はコンストラクタが見つかりませんでしたという例外が発生しましたので、私は、引数なしのコンストラクタを追加しました。
私のダイアログクラス(リサイズ)のコードはこれです:
public partial class LogWatcherForm : Form
{
TextBoxTraceListener _textBoxListener;
public LogWatcherForm()
{
InitializeComponent();
}
private void LogWatcherForm_Load(object sender, EventArgs e)
{
_textBoxListener = new TextBoxTraceListener(logTextBox);
Trace.Listeners.Add((TraceListener)_textBoxListener);
}
}
そして最後に、システムトレイのアプリのapp.configをが含まれています
<system.diagnostics>
<trace autoflush="false" indentsize="4">
<listeners>
<add name="myListener" type="Cordis.ServiceSysTray.TextBoxTraceListener,ServiceSysTray"/>
<remove name="Default" />
</listeners>
</trace>
</system.diagnostics>
私は、誰かが私を指すことができることを願っていますこの作業を行うには正しい方向に。これは、TraceAppenderを使用して作業することができますか?