Skip to content

Commit

Permalink
Fixes #994 (SetBinaryLogDirectory)
Browse files Browse the repository at this point in the history
  • Loading branch information
borrrden committed Mar 16, 2018
1 parent 4bdeeef commit eb9d6bf
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 27 deletions.
66 changes: 39 additions & 27 deletions src/Couchbase.Lite.Shared/Log/Log.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ internal static unsafe class Log
{
#region Constants

[NotNull]
private static readonly LogTo _To;

internal static readonly C4LogDomain* LogDomainBLIP = c4log_getDomain("BLIP", false);
Expand All @@ -52,14 +53,46 @@ internal static unsafe class Log
#region Variables

private static AtomicBool _Initialized = new AtomicBool(false);

private static string _BinaryLogDirectory;
private static ILogger TextLogger;

// ReSharper disable PrivateFieldCanBeConvertedToLocalVariable
private static readonly C4LogCallback _LogCallback = LiteCoreLog;
// ReSharper restore PrivateFieldCanBeConvertedToLocalVariable

internal static string BinaryLogDirectory { get; set; } = DefaultBinaryLogDirectory();
internal static string BinaryLogDirectory
{
get => _BinaryLogDirectory;
set {
if (_BinaryLogDirectory == value) {
return;
}

_BinaryLogDirectory = value ?? DefaultBinaryLogDirectory();
try {
Directory.CreateDirectory(_BinaryLogDirectory);
} catch(Exception e) {
Console.WriteLine($"COUCHBASE LITE WARNING: FAILED TO CREATE BINARY LOGGING DIRECTORY {_BinaryLogDirectory}: {e}");
return;
}

C4Error err;
#if DEBUG
var defaultLevel = C4LogLevel.Debug;
#else
var defaultLevel = C4LogLevel.Verbose;
#endif

var success = Native.c4log_writeToBinaryFile(defaultLevel,
Path.Combine(_BinaryLogDirectory,
$"log-{DateTimeOffset.UtcNow.ToUnixTimeSeconds()}"),
&err);
if(!success) {
Console.WriteLine($"COUCHBASE LITE WARNING: FAILED TO INITIALIZE LOGGING FILE IN {_BinaryLogDirectory}");
Console.WriteLine($"ERROR {err.domain} / {err.code}");
}
}
}

#endregion

Expand All @@ -70,6 +103,10 @@ internal static LogTo To
{
get {
if (!_Initialized.Set(true)) {
if (BinaryLogDirectory == null) {
BinaryLogDirectory = DefaultBinaryLogDirectory();
}

var oldLevel = Database.GetLogLevels(LogDomain.Couchbase)[LogDomain.Couchbase];
Database.SetLogLevel(LogDomain.Couchbase, LogLevel.Info);
To.Couchbase.I("Startup", HTTPLogic.UserAgent);
Expand All @@ -87,31 +124,6 @@ internal static LogTo To
static Log()
{
_To = new LogTo();
try {
Directory.CreateDirectory(BinaryLogDirectory);
} catch(Exception) {
Console.WriteLine($"COUCHBASE LITE WARNING: FAILED TO CREATE BINARY LOGGING DIRECTORY {BinaryLogDirectory}");
}

C4Error err;
#if DEBUG
var defaultLevel = C4LogLevel.Debug;
#else
var defaultLevel = C4LogLevel.Verbose;
#endif

if(!Directory.Exists(BinaryLogDirectory)) {
return;
}

var success = Native.c4log_writeToBinaryFile(defaultLevel,
Path.Combine(BinaryLogDirectory,
$"log-{DateTimeOffset.UtcNow.ToUnixTimeSeconds()}"),
&err);
if(!success) {
Console.WriteLine($"COUCHBASE LITE WARNING: FAILED TO INITIALIZE LOGGING FILE IN {BinaryLogDirectory}");
Console.WriteLine($"ERROR {err.domain} / {err.code}");
}
}

#endregion
Expand Down
19 changes: 19 additions & 0 deletions src/Couchbase.Lite.Tests.Shared/CSharpTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -517,6 +517,25 @@ public async Task TestMainThreadScheduler()
onMainThread.Should().BeTrue();
}

#else

[Fact]
public void TestChangeBinaryLogDirectory()
{
var testDir = Path.Combine(Environment.CurrentDirectory, "TestLog");
if (System.IO.Directory.Exists(testDir)) {
System.IO.Directory.Delete(testDir, true);
}

Couchbase.Lite.Support.NetDesktop.SetBinaryLogDirectory(testDir);
Couchbase.Lite.Logging.Log.To.Couchbase.E("TEST LOG", "TEST MESSAGE");
Couchbase.Lite.Support.NetDesktop.SetBinaryLogDirectory(null);
var file = System.IO.Directory.EnumerateFiles(testDir).First();
var line = File.ReadLines(file).Last();
line.Contains("TEST LOG").Should().BeTrue();
line.Contains("TEST MESSAGE").Should().BeTrue();
}

#endif


Expand Down

0 comments on commit eb9d6bf

Please sign in to comment.