本文整理汇总了C#中NLog.Targets.NetworkTarget.WriteAsyncLogEvent方法的典型用法代码示例。如果您正苦于以下问题:C# NetworkTarget.WriteAsyncLogEvent方法的具体用法?C# NetworkTarget.WriteAsyncLogEvent怎么用?C# NetworkTarget.WriteAsyncLogEvent使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类NLog.Targets.NetworkTarget
的用法示例。
在下文中一共展示了NetworkTarget.WriteAsyncLogEvent方法的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: NetworkTargetHappyPathTest
public void NetworkTargetHappyPathTest()
{
var senderFactory = new MySenderFactory();
var target = new NetworkTarget();
target.Address = "tcp://someaddress/";
target.SenderFactory = senderFactory;
target.Layout = "${message}";
target.NewLine = true;
target.KeepConnection = true;
target.Initialize(null);
var exceptions = new List<Exception>();
var mre = new ManualResetEvent(false);
int remaining = 3;
AsyncContinuation asyncContinuation = ex =>
{
lock (exceptions)
{
exceptions.Add(ex);
if (--remaining == 0)
{
mre.Set();
}
}
};
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger", "msg1").WithContinuation(asyncContinuation));
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger", "msg2").WithContinuation(asyncContinuation));
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger", "msg3").WithContinuation(asyncContinuation));
mre.WaitOne();
foreach (var ex in exceptions)
{
if (ex != null)
{
Assert.Fail(ex.ToString());
}
}
Assert.AreEqual(1, senderFactory.Senders.Count);
var sender = senderFactory.Senders[0];
target.Close();
Assert.AreEqual(18L, sender.MemoryStream.Length);
Assert.AreEqual("msg1\r\nmsg2\r\nmsg3\r\n", target.Encoding.GetString(sender.MemoryStream.GetBuffer(), 0, (int)sender.MemoryStream.Length));
// we invoke the sender 3 times, each time sending 4 bytes
string expectedLog = @"1: connect tcp://someaddress/
1: send 0 6
1: send 0 6
1: send 0 6
1: close
";
Assert.AreEqual(expectedLog, senderFactory.Log.ToString());
}
示例2: NetworkTargetSendFailureWithoutKeepAliveTests
public void NetworkTargetSendFailureWithoutKeepAliveTests()
{
var senderFactory = new MySenderFactory()
{
FailCounter = 3, // first 3 sends will fail
};
var target = new NetworkTarget();
target.Address = "tcp://${logger}.company.lan/";
target.SenderFactory = senderFactory;
target.Layout = "${message}";
target.KeepConnection = false;
target.OnOverflow = NetworkTargetOverflowAction.Discard;
target.Initialize(null);
var exceptions = new List<Exception>();
var mre = new ManualResetEvent(false);
int remaining = 5;
AsyncContinuation asyncContinuation = ex =>
{
lock (exceptions)
{
exceptions.Add(ex);
if (--remaining == 0)
{
mre.Set();
}
}
};
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger1", "0123456").WithContinuation(asyncContinuation));
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger1", "0123456").WithContinuation(asyncContinuation));
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger1", "0123456").WithContinuation(asyncContinuation));
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger1", "0123456").WithContinuation(asyncContinuation));
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger1", "01234").WithContinuation(asyncContinuation));
mre.WaitOne();
Assert.IsNotNull(exceptions[0]);
Assert.IsNotNull(exceptions[1]);
Assert.IsNotNull(exceptions[2]);
Assert.IsNull(exceptions[3]);
Assert.IsNull(exceptions[4]);
target.Close();
string expectedLog = @"1: connect tcp://logger1.company.lan/
1: send 0 7
1: failed
1: close
2: connect tcp://logger1.company.lan/
2: send 0 7
2: failed
2: close
3: connect tcp://logger1.company.lan/
3: send 0 7
3: failed
3: close
4: connect tcp://logger1.company.lan/
4: send 0 7
4: close
5: connect tcp://logger1.company.lan/
5: send 0 5
5: close
";
Assert.AreEqual(expectedLog, senderFactory.Log.ToString());
}
示例3: NetworkTargetNotConnectedTest
public void NetworkTargetNotConnectedTest()
{
var target = new NetworkTarget()
{
Address = "tcp4://127.0.0.1:33415",
Layout = "${message}\n",
KeepConnection = true,
};
target.Initialize(new LoggingConfiguration());
int toWrite = 10;
int pendingWrites = toWrite;
var writeCompleted = new ManualResetEvent(false);
var exceptions = new List<Exception>();
AsyncContinuation writeFinished =
ex =>
{
lock (exceptions)
{
exceptions.Add(ex);
pendingWrites--;
Console.WriteLine("Write finished. Pending {0}", pendingWrites);
if (pendingWrites == 0)
{
writeCompleted.Set();
}
}
};
for (int i = 0; i < toWrite; ++i)
{
var ev = new LogEventInfo(LogLevel.Info, "logger1", "message" + i).WithContinuation(writeFinished);
target.WriteAsyncLogEvent(ev);
}
Console.WriteLine("Waiting for completion...");
writeCompleted.WaitOne();
Console.WriteLine("Closing...");
// no exception
target.Close();
Assert.AreEqual(toWrite, exceptions.Count);
foreach (var ex in exceptions)
{
Assert.IsNotNull(ex);
}
Thread.Sleep(1000);
}
示例4: NetworkTargetUdpTest
public void NetworkTargetUdpTest()
{
var target = new NetworkTarget()
{
Address = "udp://127.0.0.1:3002",
Layout = "${message}\n",
KeepConnection = true,
};
string expectedResult = string.Empty;
using (var listener = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
{
Exception receiveException = null;
var receivedMessages = new List<string>();
var receiveFinished = new ManualResetEvent(false);
byte[] receiveBuffer = new byte[4096];
listener.Bind(new IPEndPoint(IPAddress.Loopback, 3002));
EndPoint remoteEndPoint = null;
AsyncCallback receivedDatagram = null;
receivedDatagram = result =>
{
try
{
int got = listener.EndReceiveFrom(result, ref remoteEndPoint);
string message = Encoding.UTF8.GetString(receiveBuffer, 0, got);
lock (receivedMessages)
{
receivedMessages.Add(message);
if (receivedMessages.Count == 100)
{
receiveFinished.Set();
}
}
remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
listener.BeginReceiveFrom(receiveBuffer, 0, receiveBuffer.Length, SocketFlags.None, ref remoteEndPoint, receivedDatagram, null);
}
catch (Exception ex)
{
receiveException = ex;
}
};
remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
listener.BeginReceiveFrom(receiveBuffer, 0, receiveBuffer.Length, SocketFlags.None, ref remoteEndPoint, receivedDatagram, null);
target.Initialize(new LoggingConfiguration());
int pendingWrites = 100;
var writeCompleted = new ManualResetEvent(false);
var exceptions = new List<Exception>();
AsyncContinuation writeFinished =
ex =>
{
lock (exceptions)
{
exceptions.Add(ex);
pendingWrites--;
if (pendingWrites == 0)
{
writeCompleted.Set();
}
}
};
int toWrite = pendingWrites;
for (int i = 0; i < toWrite; ++i)
{
var ev = new LogEventInfo(LogLevel.Info, "logger1", "message" + i).WithContinuation(writeFinished);
target.WriteAsyncLogEvent(ev);
expectedResult += "message" + i + "\n";
}
Assert.IsTrue(writeCompleted.WaitOne(30000, false));
target.Close();
Assert.IsTrue(receiveFinished.WaitOne(30000, false));
Assert.AreEqual(toWrite, receivedMessages.Count);
for (int i = 0; i < toWrite; ++i)
{
Assert.IsTrue(receivedMessages.Contains("message" + i + "\n"), "Message #" + i + " not received.");
}
Assert.IsNull(receiveException, "Receive exception: " + receiveException);
}
}
示例5: NetworkTargetTcpTest
public void NetworkTargetTcpTest()
{
NetworkTarget target;
target = new NetworkTarget()
{
Address = "tcp://127.0.0.1:3004",
Layout = "${message}\n",
KeepConnection = true,
};
string expectedResult = string.Empty;
using (var listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
{
Exception receiveException = null;
var resultStream = new MemoryStream();
var receiveFinished = new ManualResetEvent(false);
listener.Bind(new IPEndPoint(IPAddress.Loopback, 3004));
listener.Listen(10);
listener.BeginAccept(
result =>
{
try
{
Console.WriteLine("Accepting...");
byte[] buffer = new byte[4096];
using (Socket connectedSocket = listener.EndAccept(result))
{
Console.WriteLine("Accepted...");
int got;
while ((got = connectedSocket.Receive(buffer, 0, buffer.Length, SocketFlags.None)) > 0)
{
Console.WriteLine("Got {0} bytes", got);
resultStream.Write(buffer, 0, got);
}
Console.WriteLine("Closing connection...");
}
}
catch (Exception ex)
{
Console.WriteLine("Receive exception {0}", ex);
receiveException = ex;
}
finally
{
receiveFinished.Set();
}
}, null);
target.Initialize(new LoggingConfiguration());
int pendingWrites = 100;
var writeCompleted = new ManualResetEvent(false);
var exceptions = new List<Exception>();
AsyncContinuation writeFinished =
ex =>
{
lock (exceptions)
{
Console.WriteLine("{0} Write finished {1}", pendingWrites, ex);
exceptions.Add(ex);
pendingWrites--;
if (pendingWrites == 0)
{
writeCompleted.Set();
}
}
};
int toWrite = pendingWrites;
for (int i = 0; i < toWrite; ++i)
{
var ev = new LogEventInfo(LogLevel.Info, "logger1", "messagemessagemessagemessagemessage" + i).WithContinuation(writeFinished);
target.WriteAsyncLogEvent(ev);
expectedResult += "messagemessagemessagemessagemessage" + i + "\n";
}
Assert.IsTrue(writeCompleted.WaitOne(10000, false), "Writes did not complete");
target.Close();
Assert.IsTrue(receiveFinished.WaitOne(10000, false), "Receive did not complete");
string resultString = Encoding.UTF8.GetString(resultStream.GetBuffer(), 0, (int)resultStream.Length);
Assert.IsNull(receiveException, "Receive exception: " + receiveException);
Assert.AreEqual(expectedResult, resultString);
}
}
示例6: NetworkTargetMultipleConnectionsWithMessageErrorTest
public void NetworkTargetMultipleConnectionsWithMessageErrorTest()
{
var senderFactory = new MySenderFactory();
var target = new NetworkTarget();
target.Address = "tcp://${logger}.company.lan/";
target.SenderFactory = senderFactory;
target.Layout = "${message}";
target.KeepConnection = true;
target.MaxMessageSize = 10;
target.OnOverflow = NetworkTargetOverflowAction.Error;
target.Initialize(null);
var exceptions = new List<Exception>();
var mre = new ManualResetEvent(false);
int remaining = 3;
AsyncContinuation asyncContinuation = ex =>
{
lock (exceptions)
{
exceptions.Add(ex);
if (--remaining == 0)
{
mre.Set();
}
}
};
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger1", "0123456").WithContinuation(asyncContinuation));
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger1", "012345678901234").WithContinuation(asyncContinuation));
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger2", "01234").WithContinuation(asyncContinuation));
mre.WaitOne();
Assert.IsNull(exceptions[0]);
Assert.IsNotNull(exceptions[1]);
Assert.AreEqual("Attempted to send a message larger than MaxMessageSize (10). Actual size was: 15. Adjust OnOverflow and MaxMessageSize parameters accordingly.", exceptions[1].Message);
Assert.IsNull(exceptions[2]);
target.Close();
string expectedLog = @"1: connect tcp://logger1.company.lan/
1: send 0 7
1: close
2: connect tcp://logger2.company.lan/
2: send 0 5
2: close
";
Assert.AreEqual(expectedLog, senderFactory.Log.ToString());
}
示例7: NetworkTargetMultipleConnectionsWithoutKeepAliveTest
public void NetworkTargetMultipleConnectionsWithoutKeepAliveTest()
{
var senderFactory = new MySenderFactory();
var target = new NetworkTarget();
target.Address = "tcp://${logger}.company.lan/";
target.SenderFactory = senderFactory;
target.Layout = "${message}";
target.KeepConnection = false;
target.Initialize(null);
var exceptions = new List<Exception>();
var mre = new ManualResetEvent(false);
int remaining = 6;
AsyncContinuation asyncContinuation = ex =>
{
lock (exceptions)
{
exceptions.Add(ex);
if (--remaining == 0)
{
mre.Set();
}
}
};
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger1", "msg1").WithContinuation(asyncContinuation));
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger2", "msg2").WithContinuation(asyncContinuation));
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger1", "msg3").WithContinuation(asyncContinuation));
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger3", "msg1").WithContinuation(asyncContinuation));
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger1", "msg2").WithContinuation(asyncContinuation));
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger2", "msg3").WithContinuation(asyncContinuation));
mre.WaitOne();
foreach (var ex in exceptions)
{
if (ex != null)
{
Assert.Fail(ex.ToString());
}
}
target.Close();
string expectedLog = @"1: connect tcp://logger1.company.lan/
1: send 0 4
1: close
2: connect tcp://logger2.company.lan/
2: send 0 4
2: close
3: connect tcp://logger1.company.lan/
3: send 0 4
3: close
4: connect tcp://logger3.company.lan/
4: send 0 4
4: close
5: connect tcp://logger1.company.lan/
5: send 0 4
5: close
6: connect tcp://logger2.company.lan/
6: send 0 4
6: close
";
Assert.AreEqual(expectedLog, senderFactory.Log.ToString());
}
示例8: NetworkTargetMultipleConnectionsWithMessageDiscardTest
public void NetworkTargetMultipleConnectionsWithMessageDiscardTest()
{
var senderFactory = new MySenderFactory();
var target = new NetworkTarget();
target.Address = "tcp://${logger}.company.lan/";
target.SenderFactory = senderFactory;
target.Layout = "${message}";
target.KeepConnection = true;
target.MaxMessageSize = 10;
target.OnOverflow = NetworkTargetOverflowAction.Discard;
target.Initialize(null);
var exceptions = new List<Exception>();
var mre = new ManualResetEvent(false);
int remaining = 3;
AsyncContinuation asyncContinuation = ex =>
{
lock (exceptions)
{
exceptions.Add(ex);
if (--remaining == 0)
{
mre.Set();
}
}
};
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger1", "0123456").WithContinuation(asyncContinuation));
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger1", "012345678901234").WithContinuation(asyncContinuation));
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger2", "01234").WithContinuation(asyncContinuation));
mre.WaitOne();
foreach (var ex in exceptions)
{
if (ex != null)
{
Assert.Fail(ex.ToString());
}
}
target.Close();
string expectedLog = @"1: connect tcp://logger1.company.lan/
1: send 0 7
2: connect tcp://logger2.company.lan/
2: send 0 5
1: close
2: close
";
Assert.AreEqual(expectedLog, senderFactory.Log.ToString());
}
示例9: NetworkTargetSendFailureTests
public void NetworkTargetSendFailureTests()
{
var senderFactory = new MySenderFactory()
{
FailCounter = 3, // first 3 sends will fail
};
var target = new NetworkTarget();
target.Address = "tcp://${logger}.company.lan/";
target.SenderFactory = senderFactory;
target.Layout = "${message}";
target.KeepConnection = true;
target.OnOverflow = NetworkTargetOverflowAction.Discard;
target.Initialize(null);
var exceptions = new List<Exception>();
var mre = new ManualResetEvent(false);
int remaining = 5;
AsyncContinuation asyncContinuation = ex =>
{
lock (exceptions)
{
exceptions.Add(ex);
if (--remaining == 0)
{
mre.Set();
}
}
};
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger1", "0123456").WithContinuation(asyncContinuation));
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger1", "0123456").WithContinuation(asyncContinuation));
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger1", "0123456").WithContinuation(asyncContinuation));
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger1", "0123456").WithContinuation(asyncContinuation));
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger1", "01234").WithContinuation(asyncContinuation));
mre.WaitOne();
Assert.NotNull(exceptions[0]);
Assert.NotNull(exceptions[1]);
Assert.NotNull(exceptions[2]);
Assert.Null(exceptions[3]);
Assert.Null(exceptions[4]);
target.Close();
var result = senderFactory.Log.ToString();
Assert.True(result.IndexOf("1: connect tcp://logger1.company.lan/") != -1);
Assert.True(result.IndexOf("1: send 0 7") != -1);
Assert.True(result.IndexOf("1: failed") != -1);
Assert.True(result.IndexOf("1: close") != -1);
Assert.True(result.IndexOf("2: connect tcp://logger1.company.lan/") != -1);
Assert.True(result.IndexOf("2: send 0 7") != -1);
Assert.True(result.IndexOf("2: failed") != -1);
Assert.True(result.IndexOf("2: close") != -1);
Assert.True(result.IndexOf("3: connect tcp://logger1.company.lan/") != -1);
Assert.True(result.IndexOf("3: send 0 7") != -1);
Assert.True(result.IndexOf("3: failed") != -1);
Assert.True(result.IndexOf("3: close") != -1);
Assert.True(result.IndexOf("4: connect tcp://logger1.company.lan/") != -1);
Assert.True(result.IndexOf("4: send 0 7") != -1);
Assert.True(result.IndexOf("4: send 0 5") != -1);
Assert.True(result.IndexOf("4: close") != -1);
}
示例10: NetworkTargetMultipleConnectionsWithMessageSplitTest
public void NetworkTargetMultipleConnectionsWithMessageSplitTest()
{
var senderFactory = new MySenderFactory();
var target = new NetworkTarget();
target.Address = "tcp://${logger}.company.lan/";
target.SenderFactory = senderFactory;
target.Layout = "${message}";
target.KeepConnection = true;
target.MaxMessageSize = 9;
target.OnOverflow = NetworkTargetOverflowAction.Split;
target.Initialize(null);
var exceptions = new List<Exception>();
var mre = new ManualResetEvent(false);
int remaining = 3;
AsyncContinuation asyncContinuation = ex =>
{
lock (exceptions)
{
exceptions.Add(ex);
if (--remaining == 0)
{
mre.Set();
}
}
};
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger1", "012345678901234567890123456789").WithContinuation(asyncContinuation));
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger1", "012345678901234").WithContinuation(asyncContinuation));
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger2", "012345678901234567890123").WithContinuation(asyncContinuation));
mre.WaitOne();
foreach (var ex in exceptions)
{
if (ex != null)
{
Assert.True(false, ex.ToString());
}
}
target.Close();
var result = senderFactory.Log.ToString();
Assert.True(result.IndexOf("1: connect tcp://logger1.company.lan/") != -1);
Assert.True(result.IndexOf("1: send 0 9") != -1);
Assert.True(result.IndexOf("1: send 9 9") != -1);
Assert.True(result.IndexOf("1: send 18 9") != -1);
Assert.True(result.IndexOf("1: send 27 3") != -1);
Assert.True(result.IndexOf("1: send 0 9") != -1);
Assert.True(result.IndexOf("1: send 9 6") != -1);
Assert.True(result.IndexOf("2: connect tcp://logger2.company.lan/") != -1);
Assert.True(result.IndexOf("2: send 0 9") != -1);
Assert.True(result.IndexOf("2: send 9 9") != -1);
Assert.True(result.IndexOf("2: send 18 6") != -1);
Assert.True(result.IndexOf("1: close") != -1);
Assert.True(result.IndexOf("2: close") != -1);
}
示例11: NetworkTargetMultipleConnectionsWithCacheOverflowTest
public void NetworkTargetMultipleConnectionsWithCacheOverflowTest()
{
var senderFactory = new MySenderFactory();
var target = new NetworkTarget();
target.Address = "tcp://${logger}.company.lan/";
target.SenderFactory = senderFactory;
target.Layout = "${message}";
target.KeepConnection = true;
target.ConnectionCacheSize = 2;
target.Initialize(null);
var exceptions = new List<Exception>();
var mre = new ManualResetEvent(false);
int remaining = 6;
AsyncContinuation asyncContinuation = ex =>
{
lock (exceptions)
{
exceptions.Add(ex);
if (--remaining == 0)
{
mre.Set();
}
}
};
// logger1 should be kept alive because it's being referenced frequently
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger1", "msg1").WithContinuation(asyncContinuation));
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger2", "msg2").WithContinuation(asyncContinuation));
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger1", "msg3").WithContinuation(asyncContinuation));
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger3", "msg1").WithContinuation(asyncContinuation));
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger1", "msg2").WithContinuation(asyncContinuation));
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger2", "msg3").WithContinuation(asyncContinuation));
mre.WaitOne();
foreach (var ex in exceptions)
{
if (ex != null)
{
Assert.True(false, ex.ToString());
}
}
target.Close();
string result = senderFactory.Log.ToString();
Assert.True(result.IndexOf("1: connect tcp://logger1.company.lan/") != -1);
Assert.True(result.IndexOf("1: send 0 4") != -1);
Assert.True(result.IndexOf("2: connect tcp://logger2.company.lan/") != -1);
Assert.True(result.IndexOf("2: send 0 4") != -1);
Assert.True(result.IndexOf("1: send 0 4") != -1);
Assert.True(result.IndexOf("2: close") != -1);
Assert.True(result.IndexOf("3: connect tcp://logger3.company.lan/") != -1);
Assert.True(result.IndexOf("3: send 0 4") != -1);
Assert.True(result.IndexOf("1: send 0 4") != -1);
Assert.True(result.IndexOf("3: close") != -1);
Assert.True(result.IndexOf("4: connect tcp://logger2.company.lan/") != -1);
Assert.True(result.IndexOf("4: send 0 4") != -1);
Assert.True(result.IndexOf("1: close") != -1);
Assert.True(result.IndexOf("4: close") != -1);
}
示例12: NetworkTargetMultipleConnectionsTest
public void NetworkTargetMultipleConnectionsTest()
{
var senderFactory = new MySenderFactory();
var target = new NetworkTarget();
target.Address = "tcp://${logger}.company.lan/";
target.SenderFactory = senderFactory;
target.Layout = "${message}";
target.KeepConnection = true;
target.Initialize(null);
var exceptions = new List<Exception>();
var mre = new ManualResetEvent(false);
int remaining = 3;
AsyncContinuation asyncContinuation = ex =>
{
lock (exceptions)
{
exceptions.Add(ex);
if (--remaining == 0)
{
mre.Set();
}
}
};
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger1", "msg1").WithContinuation(asyncContinuation));
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger2", "msg2").WithContinuation(asyncContinuation));
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger3", "msg3").WithContinuation(asyncContinuation));
mre.WaitOne();
foreach (var ex in exceptions)
{
if (ex != null)
{
Assert.True(false, ex.ToString());
}
}
mre.Reset();
AsyncContinuation flushContinuation = ex =>
{
mre.Set();
};
target.Flush(flushContinuation);
mre.WaitOne();
target.Close();
var actual = senderFactory.Log.ToString();
Assert.True(actual.IndexOf("1: connect tcp://logger1.company.lan/") != -1);
Assert.True(actual.IndexOf("1: send 0 4") != -1);
Assert.True(actual.IndexOf("2: connect tcp://logger2.company.lan/") != -1);
Assert.True(actual.IndexOf("2: send 0 4") != -1);
Assert.True(actual.IndexOf("3: connect tcp://logger3.company.lan/") != -1);
Assert.True(actual.IndexOf("3: send 0 4") != -1);
Assert.True(actual.IndexOf("1: flush") != -1);
Assert.True(actual.IndexOf("2: flush") != -1);
Assert.True(actual.IndexOf("3: flush") != -1);
Assert.True(actual.IndexOf("1: close") != -1);
Assert.True(actual.IndexOf("2: close") != -1);
Assert.True(actual.IndexOf("3: close") != -1);
}
示例13: HappyPathTest
private void HappyPathTest(bool newLine, LineEndingMode lineEnding, params string[] messages)
{
var senderFactory = new MySenderFactory();
var target = new NetworkTarget();
target.Address = "tcp://someaddress/";
target.SenderFactory = senderFactory;
target.Layout = "${message}";
target.NewLine = newLine;
target.LineEnding = lineEnding;
target.KeepConnection = true;
target.Initialize(null);
var exceptions = new List<Exception>();
var mre = new ManualResetEvent(false);
int remaining = 3;
AsyncContinuation asyncContinuation = ex =>
{
lock (exceptions)
{
exceptions.Add(ex);
if (--remaining == 0)
{
mre.Set();
}
}
};
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger", "msg1").WithContinuation(asyncContinuation));
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger", "msg2").WithContinuation(asyncContinuation));
target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger", "msg3").WithContinuation(asyncContinuation));
mre.WaitOne();
foreach (var ex in exceptions)
{
if (ex != null)
{
Assert.True(false, ex.ToString());
}
}
Assert.Equal(1, senderFactory.Senders.Count);
var sender = senderFactory.Senders[0];
target.Close();
// Get the length of all the messages and their line endings
var eol = newLine ? lineEnding.NewLineCharacters : string.Empty;
var eolLength = eol.Length;
var length = messages.Sum(m => m.Length) + (eolLength * messages.Length);
Assert.Equal(length, sender.MemoryStream.Length);
Assert.Equal(string.Join(eol, messages) + eol, target.Encoding.GetString(sender.MemoryStream.GetBuffer(), 0, (int)sender.MemoryStream.Length));
// we invoke the sender for each message, each time sending 4 bytes
var actual = senderFactory.Log.ToString();
Assert.True(actual.IndexOf("1: connect tcp://someaddress/") != -1);
foreach (var message in messages)
{
Assert.True(actual.IndexOf(string.Format("1: send 0 {0}", message.Length + eolLength)) != -1);
}
Assert.True(actual.IndexOf("1: close") != -1);
}