using UnityEngine;
namespace Unity.Netcode
{
///
/// Helper class for logging
///
public static class NetworkLog
{
///
/// Gets the current log level.
///
/// The current log level.
public static LogLevel CurrentLogLevel => NetworkManager.Singleton == null ? LogLevel.Normal : NetworkManager.Singleton.LogLevel;
// internal logging
///
/// Locally logs a info log with Netcode prefixing.
///
/// The message to log
public static void LogInfo(string message) => Debug.Log($"[Netcode] {message}");
///
/// Locally logs a warning log with Netcode prefixing.
///
/// The message to log
public static void LogWarning(string message) => Debug.LogWarning($"[Netcode] {message}");
///
/// Locally logs a error log with Netcode prefixing.
///
/// The message to log
public static void LogError(string message) => Debug.LogError($"[Netcode] {message}");
///
/// Logs an info log locally and on the server if possible.
///
/// The message to log
public static void LogInfoServer(string message) => LogServer(message, LogType.Info);
///
/// Logs a warning log locally and on the server if possible.
///
/// The message to log
public static void LogWarningServer(string message) => LogServer(message, LogType.Warning);
///
/// Logs an error log locally and on the server if possible.
///
/// The message to log
public static void LogErrorServer(string message) => LogServer(message, LogType.Error);
internal static NetworkManager NetworkManagerOverride;
private static void LogServer(string message, LogType logType)
{
var networkManager = NetworkManagerOverride ??= NetworkManager.Singleton;
// Get the sender of the local log
ulong localId = networkManager?.LocalClientId ?? 0;
bool isServer = networkManager?.IsServer ?? true;
switch (logType)
{
case LogType.Info:
if (isServer)
{
LogInfoServerLocal(message, localId);
}
else
{
LogInfo(message);
}
break;
case LogType.Warning:
if (isServer)
{
LogWarningServerLocal(message, localId);
}
else
{
LogWarning(message);
}
break;
case LogType.Error:
if (isServer)
{
LogErrorServerLocal(message, localId);
}
else
{
LogError(message);
}
break;
}
if (!isServer && networkManager.NetworkConfig.EnableNetworkLogs)
{
var networkMessage = new ServerLogMessage
{
LogType = logType,
Message = message
};
var size = networkManager.ConnectionManager.SendMessage(ref networkMessage, NetworkDelivery.ReliableFragmentedSequenced, NetworkManager.ServerClientId);
networkManager.NetworkMetrics.TrackServerLogSent(NetworkManager.ServerClientId, (uint)logType, size);
}
}
internal static void LogInfoServerLocal(string message, ulong sender) => Debug.Log($"[Netcode-Server Sender={sender}] {message}");
internal static void LogWarningServerLocal(string message, ulong sender) => Debug.LogWarning($"[Netcode-Server Sender={sender}] {message}");
internal static void LogErrorServerLocal(string message, ulong sender) => Debug.LogError($"[Netcode-Server Sender={sender}] {message}");
internal enum LogType : byte
{
Info,
Warning,
Error,
None
}
}
}