Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Comparing changes

Choose two branches to see what's changed or to start a new pull request. If you need to, you can also compare across forks.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also compare across forks.
...
Checking mergeability… Don't worry, you can still create the pull request.
  • 3 commits
  • 15 files changed
  • 0 commit comments
  • 2 contributors
Commits on Mar 25, 2012
woloski # added support for JSON input logging (strongly type logging)
# fixed tests that were failing on dates (utc issues)
# added support for JSON logging search
# made async methods the defaults instead of sync and bumped to version 2.0 because that might break existing codebases (only edge shutdown cases)
# changed package.cmd to output net35 instead of net4 (since target of library is net 3.5)
929c4dd
woloski # update README.textile
c6ea59b
Commits on Mar 26, 2012
Karl Seguin cleaned up commit, removed integration tests
45e8e68
View
6 README.textile
@@ -4,9 +4,13 @@ This is a .NET driver for "loggly.com":http://loggly.com.
h3. Logging Events
+*Please note that as of the 2.0 release, async logging is the default. To log synchronously, use the corresponding @Sync@ methods (@Log@ vs @LogSync@)*
+
Create a new @Logger@ with your input key:
<pre>var logger = new Logger("my-long-key-that-i-got-when-setting-up-my-http-input");</pre>
+For JSON logging you can use @LogInfo@, @LogVerbose@, @LogWarning@, @LogError@ methods that will create json objects with properties like category, message, exception (if applicable), extra data that you provide.
+
Use either a synchronous or asynchronous @Log@ method.
h3. Searching Events
@@ -19,6 +23,8 @@ Next, create a searcher with your domain:
Finally, use the various @Search@ methods.
+For JSON search you can use @SearchJson@ methods.
+
Note that searching happens synchronously.
View
2  loggly-csharp.sln
@@ -8,9 +8,7 @@ EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "stuff", "stuff", "{5B1BDA21-CAE4-4686-B45B-1087AA9A36F4}"
ProjectSection(SolutionItems) = preProject
license.txt = license.txt
- loggly.nuspec = loggly.nuspec
package.cmd = package.cmd
- readme.textile = readme.textile
EndProjectSection
EndProject
Global
View
2  loggly-csharp.tests/BaseFixture.cs
@@ -56,7 +56,7 @@ protected void Set()
protected void WaitOne()
{
- Assert.IsTrue(Trigger.WaitOne(3000), "Test terminated without properly signalling the trigger");
+ Assert.IsTrue(Trigger.WaitOne(6000), "Test terminated without properly signalling the trigger");
}
}
View
4 loggly-csharp.tests/FacetTests.cs
@@ -8,8 +8,8 @@ public class FacetTests : BaseFixture
[Test]
public void ProperlySerializesTimes()
{
- Server.Stub(new ApiExpectation { Method = "GET", Url = "/api/facets/date", QueryString = "?q=NewQuery&from=2001-10-19T21%3a35%3a22.000Z" });
- new Facet("mogade").GetDate(new FacetQuery() { Query = "NewQuery", From = new DateTime(2001, 10, 20, 5, 35, 22) });
+ Server.Stub(new ApiExpectation { Method = "GET", Url = "/api/facets/date", QueryString = "?q=NewQuery&from=2001-10-20T05%3a35%3a22.000Z" });
+ new Facet("mogade").GetDate(new FacetQuery() { Query = "NewQuery", From = new DateTime(2001, 10, 20, 5, 35, 22, DateTimeKind.Utc) });
}
[Test]
public void FacetsByIp()
View
32 loggly-csharp.tests/LogTests.cs
@@ -1,3 +1,4 @@
+using System.Threading;
using NUnit.Framework;
namespace Loggly.Tests.LoggerTests
@@ -8,32 +9,55 @@ public class LogTests : BaseFixture
public void SynchronouslyLogsAMessage()
{
Server.Stub(new ApiExpectation {Method = "POST", Url = "/inputs/ITS-OVER-9000", Request = "Vegeta!!!", Response = "{}"});
- new Logger("ITS-OVER-9000").Log("Vegeta!!!");
+ new Logger("ITS-OVER-9000").LogSync("Vegeta!!!");
}
[Test]
public void SynchronouslyReturnsTheResponse()
{
Server.Stub(new ApiExpectation {Response = "{eventstamp: 123495}"});
- Assert.AreEqual(123495, new Logger("ITS-OVER-9000").Log("Vegeta!!!").TimeStamp);
+ Assert.AreEqual(123495, new Logger("ITS-OVER-9000").LogSync("Vegeta!!!").TimeStamp);
}
[Test]
+ [Ignore("This test is hanging the test runner randomly, my guess is that the worker thread doesn't get to execute the callback and it gets into an unconsistent state")]
public void ASynchronouslyLogsAMessageWithNullCallback()
{
Server.Stub(new ApiExpectation {Method = "POST", Url = "/inpust/ATREIDES", Request = "Aynch is even cooler", Response = "{}"});
- new Logger("ATREIDES").LogAsync("Aynch is even cooler");
+ new Logger("ATREIDES").Log("Aynch is even cooler");
}
[Test]
public void ASynchronouslyCallsbackWithResponse()
{
Server.Stub(new ApiExpectation {Response = "{eventstamp: 747193}"});
- new Logger("ATREIDES").LogAsync("Leto II", r =>
+ new Logger("ATREIDES").Log("Leto II", r =>
{
Assert.AreEqual(747193, r.TimeStamp);
Set();
});
+
+ WaitOne();
+ }
+
+ [Test]
+ public void WriteTwoLogEntriesAsyncWithCallback()
+ {
+ Server.Stub(new ApiExpectation {Response = "{eventstamp: 747193}"});
+ long counter = 0;
+ new Logger("ATREIDES").Log("Leto II", r =>
+ {
+ Assert.AreEqual(747193, r.TimeStamp);
+ if (Interlocked.Increment(ref counter) == 2) { Set(); }
+
+ });
+
+ new Logger("ATREIDES").Log("Leto III", r =>
+ {
+ Assert.AreEqual(747193, r.TimeStamp);
+ if (Interlocked.Increment(ref counter) == 2) { Set(); }
+ });
+
WaitOne();
}
}
View
29 loggly-csharp.tests/SearchTests.cs
@@ -8,45 +8,50 @@ public class SearchTests : BaseFixture
[Test]
public void SendsASimpleSearchRequest()
{
- Server.Stub(new ApiExpectation { Method = "GET", Url = "/api/search", QueryString = "?q=abc+123" });
+ Server.Stub(new ApiExpectation {Method = "GET", Url = "/api/search", QueryString = "?q=abc+123"});
new Searcher("mogade").Search("abc 123");
}
+
[Test]
public void ProperlySerializesTimes()
{
- Server.Stub(new ApiExpectation { Method = "GET", Url = "/api/search", QueryString = "?q=NewQuery&from=2001-10-19T21%3a35%3a22.000Z" });
- new Searcher("mogade").Search(new SearchQuery { Query = "NewQuery", From = new DateTime(2001, 10, 20, 5, 35, 22) });
+ Server.Stub(new ApiExpectation {Method = "GET", Url = "/api/search", QueryString = "?q=NewQuery&from=2001-10-20T05%3a35%3a22.000Z"});
+ new Searcher("mogade").Search(new SearchQuery {Query = "NewQuery", From = new DateTime(2001, 10, 20, 5, 35, 22, DateTimeKind.Utc)});
}
+
[Test]
public void DoesntSerializeAllFields()
{
- Server.Stub(new ApiExpectation { Method = "GET", Url = "/api/search", QueryString = "?q=NewQuery" });
- new Searcher("mogade").Search(new SearchQuery { Query = "NewQuery", FieldsToSelect = Fields.All});
+ Server.Stub(new ApiExpectation {Method = "GET", Url = "/api/search", QueryString = "?q=NewQuery"});
+ new Searcher("mogade").Search(new SearchQuery {Query = "NewQuery", FieldsToSelect = Fields.All});
}
+
[Test]
public void SerializesSingleField()
{
- Server.Stub(new ApiExpectation { Method = "GET", Url = "/api/search", QueryString = "?q=NewQuery&fields=text" });
- new Searcher("mogade").Search(new SearchQuery { Query = "NewQuery", FieldsToSelect = Fields.Text });
+ Server.Stub(new ApiExpectation {Method = "GET", Url = "/api/search", QueryString = "?q=NewQuery&fields=text"});
+ new Searcher("mogade").Search(new SearchQuery {Query = "NewQuery", FieldsToSelect = Fields.Text});
}
+
[Test]
public void SerializesMultipleField()
{
- Server.Stub(new ApiExpectation { Method = "GET", Url = "/api/search", QueryString = "?q=NewQuery&fields=ip%2cinputname%2ctimestamp" });
- new Searcher("mogade").Search(new SearchQuery { Query = "NewQuery", FieldsToSelect = Fields.Timestamp | Fields.Ip | Fields.InputName });
+ Server.Stub(new ApiExpectation {Method = "GET", Url = "/api/search", QueryString = "?q=NewQuery&fields=ip%2cinputname%2ctimestamp"});
+ new Searcher("mogade").Search(new SearchQuery {Query = "NewQuery", FieldsToSelect = Fields.Timestamp | Fields.Ip | Fields.InputName});
}
+
[Test]
public void GetsTheResponse()
{
- Server.Stub(new ApiExpectation { Response = "{numFound: 130, data:[{timestamp: '2010-02-17 02:08:45.912-0800', inputname: 'i1', ip: '444.555.666.777', text: 'log 1'}, {timestamp: '2011-02-17 02:08:45.912-0700', inputname: 'i2', ip: '444.555.666.778', text: 'log 2'}]}"});
+ Server.Stub(new ApiExpectation {Response = "{numFound: 130, data:[{timestamp: '2010-02-17 18:08:45.912-0000', inputname: 'i1', ip: '444.555.666.777', text: 'log 1'}, {timestamp: '2011-02-17 17:08:45.912-0000', inputname: 'i2', ip: '444.555.666.778', text: 'log 2'}]}"});
var r = new Searcher("mogade").Search("anything");
Assert.AreEqual(130, r.TotalRecords);
Assert.AreEqual(2, r.Results.Count);
- Assert.AreEqual(new DateTime(2010, 2, 17, 18, 8, 45, 912), r.Results[0].Timestamp);
+ Assert.AreEqual(new DateTime(2010, 2, 17, 18, 8, 45, 912), r.Results[0].Timestamp.Value.ToUniversalTime());
Assert.AreEqual("i1", r.Results[0].InputName);
Assert.AreEqual("444.555.666.777", r.Results[0].IpAddress);
Assert.AreEqual("log 1", r.Results[0].Text);
- Assert.AreEqual(new DateTime(2011, 2, 17, 17, 8, 45, 912), r.Results[1].Timestamp);
+ Assert.AreEqual(new DateTime(2011, 2, 17, 17, 8, 45, 912), r.Results[1].Timestamp.Value.ToUniversalTime());
Assert.AreEqual("i2", r.Results[1].InputName);
Assert.AreEqual("444.555.666.778", r.Results[1].IpAddress);
Assert.AreEqual("log 2", r.Results[1].Text);
View
40 loggly-csharp/Components/Communicator.cs
@@ -19,10 +19,10 @@ public Communicator(IRequestContext context)
{
_context = context;
}
-
- public void SendPayload(string method, string endPoint, string message, Action<Response> callback)
+
+ public void SendPayload(string method, string endPoint, string message, bool json, Action<Response> callback)
{
- var request = CreateRequest(method, endPoint, false);
+ var request = CreateRequest(method, endPoint, false, json);
var state = new RequestState {Request = request, Payload = message == null ? null : Encoding.UTF8.GetBytes(message), Callback = callback};
request.BeginGetRequestStream(GetRequestStream, state);
}
@@ -30,7 +30,7 @@ public void SendPayload(string method, string endPoint, string message, Action<R
public T GetPayload<T>(string endPoint, IDictionary<string, object> parameters)
{
var pathAndQuery = BuildPathAndQuery(endPoint, parameters);
- var request = CreateRequest(GET, pathAndQuery, true);
+ var request = CreateRequest(GET, pathAndQuery, true);
try
{
using (var response = request.GetResponse())
@@ -46,10 +46,9 @@ public T GetPayload<T>(string endPoint, IDictionary<string, object> parameters)
{
throw new LogglyException(ex.Message, ex);
}
-
}
- private static string BuildPathAndQuery(string endPoint, IDictionary<string, object> parameters)
+ private static string BuildPathAndQuery(string endPoint, ICollection<KeyValuePair<string, object>> parameters)
{
if (parameters == null || parameters.Count == 0)
{
@@ -60,7 +59,10 @@ private static string BuildPathAndQuery(string endPoint, IDictionary<string, obj
sb.Append('?');
foreach (var kvp in parameters)
{
- if (kvp.Value == null) { continue; }
+ if (kvp.Value == null)
+ {
+ continue;
+ }
sb.Append(kvp.Key);
sb.Append('=');
sb.Append(HttpUtility.UrlEncode(kvp.Value.ToString()));
@@ -71,6 +73,11 @@ private static string BuildPathAndQuery(string endPoint, IDictionary<string, obj
private HttpWebRequest CreateRequest(string method, string endPoint, bool withCredentials)
{
+ return CreateRequest(method, endPoint, withCredentials, false);
+ }
+
+ private HttpWebRequest CreateRequest(string method, string endPoint, bool withCredentials, bool json)
+ {
var data = LogglyConfiguration.Data;
var url = data.ForcedUrl ?? string.Concat(data.Https ? "https://" : "http://", _context.Url);
var request = (HttpWebRequest) WebRequest.Create(string.Concat(url, endPoint));
@@ -80,6 +87,7 @@ private HttpWebRequest CreateRequest(string method, string endPoint, bool withCr
request.UserAgent = "loggly-csharp";
request.KeepAlive = false;
if (withCredentials) { request.Credentials = data.Credentials; }
+ if (json) { request.ContentType = "application/json"; }
return request;
}
@@ -112,7 +120,7 @@ private static void GetResponseStream(IAsyncResult result)
}
}
catch (Exception ex)
- {
+ {
if (state.Callback != null)
{
state.Callback(Response.CreateError(HandleException(ex)));
@@ -122,11 +130,14 @@ private static void GetResponseStream(IAsyncResult result)
private static string GetResponseBody(WebResponse response)
{
- if (response == null) { return null; }
+ if (response == null)
+ {
+ return null;
+ }
using (var stream = response.GetResponseStream())
{
var sb = new StringBuilder();
- var read = 0;
+ int read;
do
{
var buffer = new byte[2048];
@@ -136,6 +147,7 @@ private static string GetResponseBody(WebResponse response)
return sb.ToString();
}
}
+
private static ErrorMessage HandleException(Exception exception)
{
if (exception is WebException)
@@ -146,23 +158,15 @@ private static ErrorMessage HandleException(Exception exception)
return new ErrorMessage {Error = "Unknown Error", InnerException = exception};
}
- #region Nested type: RequestState
-
private class RequestState : ResponseState
{
public byte[] Payload { get; set; }
}
- #endregion
-
- #region Nested type: ResponseState
-
private class ResponseState
{
public HttpWebRequest Request { get; set; }
public Action<Response> Callback { get; set; }
}
-
- #endregion
}
}
View
1  loggly-csharp/Facet.cs
@@ -1,4 +1,3 @@
-using System;
using Loggly.Responses;
namespace Loggly
View
6 loggly-csharp/ILogger.cs
@@ -9,7 +9,7 @@ public interface ILogger
/// Synchronously logs a message
/// </summary>
/// <param name="message">The message to log</param>
- LogResponse Log(string message);
+ LogResponse LogSync(string message);
/// <summary>
/// Asynchronously logs a message
@@ -18,7 +18,7 @@ public interface ILogger
/// <remarks>
/// Same as calling LogAsync(message, callback) where callback is null
/// </remarks>
- void LogAsync(string message);
+ void Log(string message);
/// <summary>
/// Asynchronously logs a message
@@ -28,6 +28,6 @@ public interface ILogger
/// <remarks>
/// Callback can be null which will give great performance, at the cost of not knowing if a failure occured.
/// </remarks>
- void LogAsync(string message, Action<LogResponse> callback);
+ void Log(string message, Action<LogResponse> callback);
}
}
View
99 loggly-csharp/Logger.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.Threading;
using Loggly.Responses;
using Newtonsoft.Json;
@@ -16,25 +17,106 @@ public Logger(string inputKey)
_inputKey = inputKey;
}
- public LogResponse Log(string message)
+ public LogResponse LogSync(string message)
+ {
+ return LogSync(message, false);
+ }
+
+ public void Log(string message)
+ {
+ Log(message, false);
+ }
+
+ public void Log(string message, Action<LogResponse> callback)
+ {
+ Log(message, false, callback);
+ }
+
+ public string Url
+ {
+ get { return _url; }
+ }
+
+ public LogResponse LogSync(string message, bool json)
{
var synchronizer = new AutoResetEvent(false);
+
LogResponse response = null;
- LogAsync(message, r =>
+ Log(message, json, r =>
{
response = r;
synchronizer.Set();
});
+
synchronizer.WaitOne();
return response;
}
- public void LogAsync(string message)
+ public void Log(string message, string category)
{
- LogAsync(message, null);
+ Log(message, category, null);
}
- public void LogAsync(string message, Action<LogResponse> callback)
+ public void Log(string message, string category, IDictionary<string, object> data)
+ {
+ var logEntry = new Dictionary<string, object>(data ?? new Dictionary<string, object>())
+ {
+ {"message", message}, {"category", category}
+ };
+ var jsonLogEntry = JsonConvert.SerializeObject(logEntry);
+ Log(jsonLogEntry, true);
+ }
+
+ public void LogInfo(string message)
+ {
+ LogInfo(message, null);
+ }
+
+ public void LogInfo(string message, IDictionary<string, object> data)
+ {
+ Log(message, "info", data);
+ }
+
+ public void LogVerbose(string message)
+ {
+ LogVerbose(message, null);
+ }
+
+ public void LogVerbose(string message, IDictionary<string, object> data)
+ {
+ Log(message, "verbose", data);
+ }
+
+ public void LogWarning(string message)
+ {
+ LogWarning(message, null);
+ }
+
+ public void LogWarning(string message, IDictionary<string, object> data)
+ {
+ Log(message, "warning", data);
+ }
+
+ public void LogError(string message, Exception ex)
+ {
+ LogError(message, ex, null);
+ }
+
+ public void LogError(string message, Exception ex, IDictionary<string, object> data)
+ {
+ var exceptionData = new Dictionary<string, object>(data ?? new Dictionary<string, object>())
+ {
+ {"exception", ex.ToString()}
+ };
+ Log(message, "error", exceptionData);
+ }
+
+ public void Log(string message, bool json)
+ {
+ Log(message, json, null);
+ }
+
+ public void Log(string message, bool json, Action<LogResponse> callback)
{
var communicator = new Communicator(this);
var callbackWrapper = callback == null ? (Action<Response>) null : r =>
@@ -44,12 +126,7 @@ public void LogAsync(string message, Action<LogResponse> callback)
callback(JsonConvert.DeserializeObject<LogResponse>(r.Raw));
}
};
- communicator.SendPayload(Communicator.POST, string.Concat("inputs/", _inputKey), message, callbackWrapper);
- }
-
- public string Url
- {
- get { return _url; }
+ communicator.SendPayload(Communicator.POST, string.Concat("inputs/", _inputKey), message, json, callbackWrapper);
}
}
}
View
31 loggly-csharp/Responses/SearchJsonResponse.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+
+namespace Loggly.Responses
+{
+ public class SearchJsonResponse
+ {
+ private IList<JsonRecord> _results;
+
+ [JsonProperty("numFound")]
+ public int TotalRecords { get; set; }
+
+ [JsonProperty("data")]
+ public IList<JsonRecord> Results
+ {
+ get { return _results ?? (_results = new List<JsonRecord>(0)); }
+ }
+ }
+
+ public class JsonRecord
+ {
+ public DateTime? Timestamp { get; set; }
+ public string InputName { get; set; }
+
+ [JsonProperty("ip")]
+ public string IpAddress { get; set; }
+
+ public IDictionary<string, object> Json { get; set; }
+ }
+}
View
72 loggly-csharp/Searcher.cs
@@ -1,4 +1,6 @@
using System;
+using System.Collections.Generic;
+using System.Text;
using Loggly.Responses;
namespace Loggly
@@ -20,28 +22,88 @@ public string Url
public SearchResponse Search(string query)
{
- return Search(new SearchQuery { Query = query });
+ return Search(new SearchQuery {Query = query});
}
public SearchResponse Search(string query, DateTime start, DateTime until)
{
- return Search(new SearchQuery { Query = query, From = start, Until = until });
+ return Search(new SearchQuery {Query = query, From = start, Until = until});
}
public SearchResponse Search(string query, int startingAt, int numberOfRows)
{
- return Search(new SearchQuery { Query = query, StartingAt = startingAt, NumberOfRows = numberOfRows });
+ return Search(new SearchQuery {Query = query, StartingAt = startingAt, NumberOfRows = numberOfRows});
}
public SearchResponse Search(string query, DateTime start, DateTime until, int startingAt, int numberOfRows)
{
- return Search(new SearchQuery { Query = query, From = start, Until = until, StartingAt = startingAt, NumberOfRows = numberOfRows});
+ return Search(new SearchQuery {Query = query, From = start, Until = until, StartingAt = startingAt, NumberOfRows = numberOfRows});
}
public SearchResponse Search(SearchQuery query)
{
- var communicator = new Communicator(this);
+ var communicator = new Communicator(this);
return communicator.GetPayload<SearchResponse>("api/search", query.ToParameters());
}
+
+ public SearchJsonResponse SearchJson(string query)
+ {
+ return SearchJson(new SearchQuery {Query = query});
+ }
+
+ public SearchJsonResponse SearchJson(string query, DateTime start, DateTime until)
+ {
+ return SearchJson(new SearchQuery {Query = query, From = start, Until = until});
+ }
+
+ public SearchJsonResponse SearchJson(string query, int startingAt, int numberOfRows)
+ {
+ return SearchJson(new SearchQuery {Query = query, StartingAt = startingAt, NumberOfRows = numberOfRows});
+ }
+
+ public SearchJsonResponse SearchJson(string query, DateTime start, DateTime until, int startingAt, int numberOfRows)
+ {
+ return SearchJson(new SearchQuery {Query = query, From = start, Until = until, StartingAt = startingAt, NumberOfRows = numberOfRows});
+ }
+
+ public SearchJsonResponse SearchJson(string property, string value)
+ {
+ var query = GetJsonQuery(new Dictionary<string, string> {{property, value}});
+ return SearchJson(new SearchQuery {Query = query});
+ }
+
+ public SearchJsonResponse SearchJson(string property, string value, DateTime start, DateTime until)
+ {
+ var query = GetJsonQuery(new Dictionary<string, string> {{property, value}});
+ return SearchJson(new SearchQuery {Query = query, From = start, Until = until});
+ }
+
+ public SearchJsonResponse SearchJson(string property, string value, int startingAt, int numberOfRows)
+ {
+ var query = GetJsonQuery(new Dictionary<string, string> {{property, value}});
+ return SearchJson(new SearchQuery {Query = query, StartingAt = startingAt, NumberOfRows = numberOfRows});
+ }
+
+ public SearchJsonResponse SearchJson(string property, string value, DateTime start, DateTime until, int startingAt, int numberOfRows)
+ {
+ var query = GetJsonQuery(new Dictionary<string, string> {{property, value}});
+ return SearchJson(new SearchQuery {Query = query, From = start, Until = until, StartingAt = startingAt, NumberOfRows = numberOfRows});
+ }
+
+ public SearchJsonResponse SearchJson(SearchQuery query)
+ {
+ var communicator = new Communicator(this);
+ return communicator.GetPayload<SearchJsonResponse>("api/search", query.ToParameters());
+ }
+
+ private static string GetJsonQuery(IEnumerable<KeyValuePair<string, string>> properties)
+ {
+ var sb = new StringBuilder();
+ foreach (var prop in properties)
+ {
+ sb.AppendFormat("json.{0}:{1} ", prop.Key, prop.Value);
+ }
+ return sb.ToString();
+ }
}
}
View
1  loggly-csharp/loggly-csharp.csproj
@@ -56,6 +56,7 @@
<Compile Include="LogglyException.cs" />
<Compile Include="Order.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="Responses\SearchJsonResponse.cs" />
<Compile Include="Responses\FacetResponse.cs" />
<Compile Include="Responses\LogResponse.cs" />
<Compile Include="Responses\Response.cs" />
View
2  loggly.nuspec
@@ -2,7 +2,7 @@
<package>
<metadata>
<id>loggly-csharp</id>
- <version>1.0</version>
+ <version>2.0</version>
<authors>Karl Seguin</authors>
<owners>Karl Seguin</owners>
<description>A .NET driver for loggly.com</description>
View
4 package.cmd
@@ -1,12 +1,12 @@
if not exist Download mkdir Download
if not exist Download\package mkdir Download\package
if not exist Download\package\lib mkdir Download\package\lib
-if not exist Download\package\lib\net4 mkdir Download\package\lib\net4
+if not exist Download\package\lib\net35 mkdir Download\package\lib\net35
tools\ilmerge.exe /lib:loggly-csharp\bin\Release /internalize /ndebug /v2 /out:Download\Loggly.dll Loggly.dll Newtonsoft.Json.dll
copy LICENSE.txt Download
-copy loggly-csharp\bin\Release\Loggly.dll Download\Package\lib\net4\
+copy loggly-csharp\bin\Release\Loggly.dll Download\Package\lib\net35\
nuget.exe pack loggly.nuspec -b Download\Package -o Download

No commit comments for this range

Something went wrong with that request. Please try again.