using FishNet.Documenting; using System; using UnityEngine; namespace FishNet.Managing.Logging { /// /// Configuration ScriptableObject specifying which data to log. Used in conjuction with NetworkManager. /// [CreateAssetMenu(fileName = "New LoggingConfiguration", menuName = "FishNet/Logging/Logging Configuration")] public class LoggingConfiguration : ScriptableObject { #region Serialized. /// /// True to use logging features. False to disable all logging. /// [Tooltip("True to use logging features. False to disable all logging.")] [SerializeField] private bool _loggingEnabled = true; /// /// Type of logging to use for development builds and editor. /// [Tooltip("Type of logging to use for development builds and editor.")] [SerializeField] private LoggingType _developmentLogging = LoggingType.Common; /// /// Type of logging to use for GUI builds. /// [Tooltip("Type of logging to use for GUI builds.")] [SerializeField] private LoggingType _guiLogging = LoggingType.Warning; /// /// Type of logging to use for headless builds. /// [Tooltip("Type of logging to use for headless builds.")] [SerializeField] private LoggingType _headlessLogging = LoggingType.Error; #endregion #region Private. /// /// True when initialized. /// private bool _initialized; /// /// Highest type which can be logged. /// private LoggingType _highestLoggingType = LoggingType.Off; #endregion [APIExclude] public void LoggingConstructor(bool loggingEnabled, LoggingType development, LoggingType gui, LoggingType headless) { _loggingEnabled = loggingEnabled; _developmentLogging = development; _guiLogging = gui; _headlessLogging = headless; } /// /// Initializes script for use. /// /// internal void InitializeOnceInternal() { 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; } /// /// True if can log for loggingType. /// /// Type of logging being filtered. /// public bool CanLog(LoggingType loggingType) { if (!_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); } /// /// Returns if logging can be written to disk. /// /// internal bool CanWrite() { return false; //return _writeLogs; } /// /// Clones this logging configuration. /// /// internal LoggingConfiguration Clone() { LoggingConfiguration copy = ScriptableObject.CreateInstance(); copy.LoggingConstructor(_loggingEnabled, _developmentLogging, _guiLogging, _headlessLogging); return copy; } } }