142 lines
4.7 KiB
C#
142 lines
4.7 KiB
C#
using FishNet.Documenting;
|
|
using System;
|
|
using System.Runtime.CompilerServices;
|
|
using UnityEngine;
|
|
|
|
namespace FishNet.Managing.Logging
|
|
{
|
|
|
|
/// <summary>
|
|
/// Configuration ScriptableObject specifying which data to log. Used in conjuction with NetworkManager.
|
|
/// </summary>
|
|
[CreateAssetMenu(fileName = "New LevelLoggingConfiguration", menuName = "FishNet/Logging/Level Logging Configuration")]
|
|
public class LevelLoggingConfiguration : LoggingConfiguration
|
|
{
|
|
|
|
#region Serialized.
|
|
/// <summary>
|
|
/// Type of logging to use for development builds and editor.
|
|
/// </summary>
|
|
[Tooltip("Type of logging to use for development builds and editor.")]
|
|
[SerializeField]
|
|
private LoggingType _developmentLogging = LoggingType.Common;
|
|
/// <summary>
|
|
/// Type of logging to use for GUI builds.
|
|
/// </summary>
|
|
[Tooltip("Type of logging to use for GUI builds.")]
|
|
[SerializeField]
|
|
private LoggingType _guiLogging = LoggingType.Warning;
|
|
/// <summary>
|
|
/// Type of logging to use for headless builds.
|
|
/// </summary>
|
|
[Tooltip("Type of logging to use for headless builds.")]
|
|
[SerializeField]
|
|
private LoggingType _headlessLogging = LoggingType.Error;
|
|
#endregion
|
|
|
|
#region Private.
|
|
/// <summary>
|
|
/// True when initialized.
|
|
/// </summary>
|
|
private bool _initialized;
|
|
/// <summary>
|
|
/// Highest type which can be logged.
|
|
/// </summary>
|
|
private LoggingType _highestLoggingType = LoggingType.Off;
|
|
#endregion
|
|
|
|
[APIExclude]
|
|
public void LoggingConstructor(bool loggingEnabled, LoggingType development, LoggingType gui, LoggingType headless)
|
|
{
|
|
base.LoggingEnabled = loggingEnabled;
|
|
_developmentLogging = development;
|
|
_guiLogging = gui;
|
|
_headlessLogging = headless;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Initializes script for use.
|
|
/// </summary>
|
|
/// <param name="manager"></param>
|
|
public override void InitializeOnce()
|
|
{
|
|
byte currentHighest = (byte)LoggingType.Off;
|
|
#if UNITY_SERVER //if headless.
|
|
currentHighest = Math.Max(currentHighest, (byte)_headlessLogging);
|
|
#endif
|
|
#if UNITY_EDITOR || DEVELOPMENT_BUILD //if editor or development.
|
|
currentHighest = Math.Max(currentHighest, (byte)_developmentLogging);
|
|
#endif
|
|
#if !UNITY_EDITOR && !UNITY_SERVER //if a build.
|
|
currentHighest = Math.Max(currentHighest, (byte)_guiLogging);
|
|
#endif
|
|
_highestLoggingType = (LoggingType)currentHighest;
|
|
_initialized = true;
|
|
}
|
|
|
|
/// <summary>
|
|
/// True if can log for loggingType.
|
|
/// </summary>
|
|
/// <param name="loggingType">Type of logging being filtered.</param>
|
|
/// <returns></returns>
|
|
public override bool CanLog(LoggingType loggingType)
|
|
{
|
|
if (!base.LoggingEnabled)
|
|
return false;
|
|
|
|
if (!_initialized)
|
|
{
|
|
#if UNITY_EDITOR || DEVELOPMENT_BUILD
|
|
if (Application.isPlaying)
|
|
Debug.LogError("CanLog called before being initialized.");
|
|
else
|
|
return true;
|
|
#endif
|
|
return false;
|
|
}
|
|
|
|
return ((byte)loggingType <= (byte)_highestLoggingType);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Logs a common value if can log.
|
|
/// </summary>
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public override void Log(string value)
|
|
{
|
|
if (CanLog(LoggingType.Common))
|
|
Debug.Log(value);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Logs a warning value if can log.
|
|
/// </summary>
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public override void LogWarning(string value)
|
|
{
|
|
if (CanLog(LoggingType.Warning))
|
|
Debug.LogWarning(value);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Logs an error value if can log.
|
|
/// </summary>
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public override void LogError(string value)
|
|
{
|
|
if (CanLog(LoggingType.Error))
|
|
Debug.LogError(value);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Clones this logging configuration.
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public override LoggingConfiguration Clone()
|
|
{
|
|
LevelLoggingConfiguration copy = ScriptableObject.CreateInstance<LevelLoggingConfiguration>();
|
|
copy.LoggingConstructor(base.LoggingEnabled, _developmentLogging, _guiLogging, _headlessLogging);
|
|
return copy;
|
|
}
|
|
}
|
|
} |