234 lines
5.9 KiB
C#
234 lines
5.9 KiB
C#
using System;
|
|
#if WINDOWS_UWP || WINDOWS_WSA
|
|
using Windows.Foundation.Diagnostics;
|
|
using MetroLog;
|
|
using MetroLog.Targets;
|
|
#elif MONO
|
|
using NLog;
|
|
using NLog.Config;
|
|
using NLog.Targets;
|
|
using GameAnalyticsSDK.Net.Device;
|
|
using System.IO;
|
|
#endif
|
|
|
|
namespace GameAnalyticsSDK.Net.Logging
|
|
{
|
|
internal class GALogger
|
|
{
|
|
#region Fields and properties
|
|
|
|
private static readonly GALogger _instance = new GALogger();
|
|
private bool infoLogEnabled;
|
|
private bool infoLogVerboseEnabled;
|
|
#pragma warning disable 0649
|
|
private static bool debugEnabled;
|
|
#pragma warning restore 0649
|
|
private const string Tag = "GameAnalytics";
|
|
|
|
#if WINDOWS_UWP || WINDOWS_WSA
|
|
private IFileLoggingSession session;
|
|
private ILoggingChannel logger;
|
|
private ILogger log;
|
|
#elif MONO
|
|
private static ILogger logger;
|
|
#elif !UNITY
|
|
private ILogger logger;
|
|
#endif
|
|
|
|
private static GALogger Instance
|
|
{
|
|
get
|
|
{
|
|
return _instance;
|
|
}
|
|
}
|
|
|
|
public static bool InfoLog
|
|
{
|
|
set
|
|
{
|
|
Instance.infoLogEnabled = value;
|
|
}
|
|
}
|
|
|
|
public static bool VerboseLog
|
|
{
|
|
set
|
|
{
|
|
Instance.infoLogVerboseEnabled = value;
|
|
}
|
|
}
|
|
|
|
#endregion // Fields and properties
|
|
|
|
private GALogger()
|
|
{
|
|
#if DEBUG
|
|
debugEnabled = true;
|
|
#endif
|
|
#if WINDOWS_UWP || WINDOWS_WSA
|
|
session = new FileLoggingSession("ga-session");
|
|
#if WINDOWS_UWP
|
|
var options = new LoggingChannelOptions();
|
|
logger = new LoggingChannel("ga-channel", options);
|
|
#else
|
|
logger = new LoggingChannel("ga-channel");
|
|
#endif
|
|
session.AddLoggingChannel(logger);
|
|
|
|
LogManagerFactory.DefaultConfiguration.AddTarget(LogLevel.Trace, LogLevel.Fatal, new StreamingFileTarget());
|
|
log = LogManagerFactory.DefaultLogManager.GetLogger<GALogger>();
|
|
#elif MONO
|
|
logger = LogManager.GetCurrentClassLogger();
|
|
var config = new LoggingConfiguration();
|
|
|
|
var consoleTarget = new ColoredConsoleTarget();
|
|
config.AddTarget("console", consoleTarget);
|
|
|
|
var fileTarget = new FileTarget();
|
|
config.AddTarget("file", fileTarget);
|
|
|
|
//consoleTarget.Layout = @"${date:format=HH\:mm\:ss} ${logger} ${message}";
|
|
fileTarget.FileName = GADevice.WritablePath + Path.DirectorySeparatorChar + "ga_log.txt";
|
|
fileTarget.Layout = "${message}";
|
|
|
|
var rule1 = new LoggingRule("*", LogLevel.Debug, consoleTarget);
|
|
config.LoggingRules.Add(rule1);
|
|
|
|
var rule2 = new LoggingRule("*", LogLevel.Debug, fileTarget);
|
|
config.LoggingRules.Add(rule2);
|
|
|
|
LogManager.Configuration = config;
|
|
#endif
|
|
}
|
|
|
|
#region Public methods
|
|
|
|
public static void I(String format)
|
|
{
|
|
if(!Instance.infoLogEnabled)
|
|
{
|
|
return;
|
|
}
|
|
|
|
string message = "Info/" + Tag + ": " + format;
|
|
Instance.SendNotificationMessage(message, EGALoggerMessageType.Info);
|
|
}
|
|
|
|
public static void W(String format)
|
|
{
|
|
string message = "Warning/" + Tag + ": " + format;
|
|
Instance.SendNotificationMessage(message, EGALoggerMessageType.Warning);
|
|
}
|
|
|
|
public static void E(String format)
|
|
{
|
|
string message = "Error/" + Tag + ": " + format;
|
|
Instance.SendNotificationMessage(message, EGALoggerMessageType.Error);
|
|
}
|
|
|
|
public static void II(String format)
|
|
{
|
|
if(!Instance.infoLogVerboseEnabled)
|
|
{
|
|
return;
|
|
}
|
|
|
|
string message = "Verbose/" + Tag + ": " + format;
|
|
Instance.SendNotificationMessage(message, EGALoggerMessageType.Info);
|
|
}
|
|
|
|
public static void D(String format)
|
|
{
|
|
if(!debugEnabled)
|
|
{
|
|
return;
|
|
}
|
|
|
|
string message = "Debug/" + Tag + ": " + format;
|
|
Instance.SendNotificationMessage(message, EGALoggerMessageType.Debug);
|
|
}
|
|
|
|
#endregion // Public methods
|
|
|
|
#region Private methods
|
|
|
|
private void SendNotificationMessage(string message, EGALoggerMessageType type)
|
|
{
|
|
switch(type)
|
|
{
|
|
case EGALoggerMessageType.Error:
|
|
{
|
|
#if UNITY
|
|
UnityEngine.Debug.LogError(message);
|
|
#elif WINDOWS_UWP || WINDOWS_WSA
|
|
logger.LogMessage(message, LoggingLevel.Error);
|
|
log.Error(message);
|
|
GameAnalytics.MessageLogged(message, type);
|
|
#elif MONO
|
|
logger.Error(message);
|
|
#else
|
|
logger.LogError(message);
|
|
GameAnalytics.MessageLogged(message, type);
|
|
#endif
|
|
}
|
|
break;
|
|
|
|
case EGALoggerMessageType.Warning:
|
|
{
|
|
#if UNITY
|
|
UnityEngine.Debug.LogWarning(message);
|
|
#elif WINDOWS_UWP || WINDOWS_WSA
|
|
logger.LogMessage(message, LoggingLevel.Warning);
|
|
log.Warn(message);
|
|
GameAnalytics.MessageLogged(message, type);
|
|
#elif MONO
|
|
logger.Warn(message);
|
|
#else
|
|
logger.LogWarning(message);
|
|
GameAnalytics.MessageLogged(message, type);
|
|
#endif
|
|
}
|
|
break;
|
|
|
|
case EGALoggerMessageType.Debug:
|
|
{
|
|
#if UNITY
|
|
UnityEngine.Debug.Log(message);
|
|
#elif WINDOWS_UWP || WINDOWS_WSA
|
|
logger.LogMessage(message, LoggingLevel.Information);
|
|
log.Debug(message);
|
|
GameAnalytics.MessageLogged(message, type);
|
|
#elif MONO
|
|
logger.Debug(message);
|
|
#else
|
|
logger.LogDebug(message);
|
|
GameAnalytics.MessageLogged(message, type);
|
|
#endif
|
|
}
|
|
break;
|
|
|
|
case EGALoggerMessageType.Info:
|
|
{
|
|
#if UNITY
|
|
UnityEngine.Debug.Log(message);
|
|
#elif WINDOWS_UWP || WINDOWS_WSA
|
|
logger.LogMessage(message, LoggingLevel.Information);
|
|
log.Info(message);
|
|
GameAnalytics.MessageLogged(message, type);
|
|
#elif MONO
|
|
logger.Info(message);
|
|
#else
|
|
logger.LogInformation(message);
|
|
GameAnalytics.MessageLogged(message, type);
|
|
#endif
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
#endregion // Private methods
|
|
}
|
|
}
|
|
|