Renderer/src/main/java/electrosphere/logger/Logger.java
austin 96b65dba46
Some checks failed
studiorailgun/Renderer/pipeline/pr-master There was a failure building this commit
fix array error
2024-11-07 13:39:47 -05:00

186 lines
5.3 KiB
Java

package electrosphere.logger;
import org.graalvm.polyglot.HostAccess.Export;
/**
* A channel for logging messages
*/
public class Logger {
/**
* The different logging levels
*/
public enum LogLevel {
LOOP_DEBUG, //this should be used for debugging messages that are executed very rapidly/every frame
DEBUG,
INFO,
WARNING,
ERROR,
}
//the level of this log
LogLevel level;
//The name of the logger
String name;
/**
* Creates a logger channel
* @param name The name of the logger
* @param level The level of message to report on this channel
*/
public Logger(String name, LogLevel level){
this.name = name;
this.level = level;
}
/**
* Sets the logging level of this logger
* @param level The logging level
*/
public void setLevel(LogLevel level){
this.level = level;
new Exception("Changing log level to " + level + "!").printStackTrace();
}
/**
* Logs a loop debug message.
* This should be used for debugging messages that are executed very rapidly/every frame
* @param message The message to report
*/
public void DEBUG_LOOP(String message){
if(level == LogLevel.LOOP_DEBUG){
System.out.println(message);
}
}
/**
* Logs a debug message.
* This should be used for debugging messages that are executed on a given condition that won't necessarily be every loop (ie all network messages)
* @param message The message to report
*/
@Export
public void DEBUG(String message){
if(level == LogLevel.LOOP_DEBUG || level == LogLevel.DEBUG){
System.out.println(message);
}
}
/**
* Logs a debug message.
* This should be used for debugging messages that are executed on a given condition that won't necessarily be every loop (ie all network messages)
* @param message The message to report
* @param e The exception to also log
*/
public void DEBUG(String message, Exception e){
if(level == LogLevel.LOOP_DEBUG || level == LogLevel.DEBUG){
System.out.println(message);
e.printStackTrace();
}
}
/**
* Logs an info message.
* This should be used for messages that would have interest to someone running a server (ie specific network messages, account creation, etc)
* @param message The message to report
*/
@Export
public void INFO(String message){
if(level == LogLevel.LOOP_DEBUG || level == LogLevel.DEBUG || level == LogLevel.INFO){
System.out.println(message);
}
}
/**
* Logs a warning message.
* This should be used for reporting events that happen in the engine that are concerning but don't mean the engine has failed to execute (ie a texture failed to load)
* @param message The message to report
*/
@Export
public void WARNING(String message){
if(level == LogLevel.LOOP_DEBUG || level == LogLevel.DEBUG || level == LogLevel.INFO || level == LogLevel.WARNING){
System.out.println(message);
}
}
/**
* Logs an error message.
* This should be used every time we throw any kind of error in the engine
* @param message The message to report
*/
public void ERROR(String message, Exception e){
if(level == LogLevel.LOOP_DEBUG || level == LogLevel.DEBUG || level == LogLevel.INFO || level == LogLevel.WARNING || level == LogLevel.ERROR){
System.err.println(message);
ERROR(e);
}
}
/**
* Logs an error message.
* This should be used every time we throw any kind of error in the engine
* @param e The exception to report
*/
public void ERROR(Exception e){
if(level == LogLevel.LOOP_DEBUG || level == LogLevel.DEBUG || level == LogLevel.INFO || level == LogLevel.WARNING || level == LogLevel.ERROR){
e.printStackTrace();
}
}
/**
* Logs an error message.
* This should be used every time we throw any kind of error in the engine
* @param e The exception to report
*/
public void ERROR(Error e){
if(level == LogLevel.LOOP_DEBUG || level == LogLevel.DEBUG || level == LogLevel.INFO || level == LogLevel.WARNING || level == LogLevel.ERROR){
e.printStackTrace();
}
}
/**
* Prints a message at the specified logging level
* @param level The logging level
* @param message The message
*/
public void PRINT(LogLevel level, String message){
switch(level){
case ERROR:{
this.ERROR(new Exception(message));
} break;
case WARNING:{
this.WARNING(message);
} break;
case INFO:{
this.INFO(message);
} break;
case DEBUG:{
this.DEBUG(message);
} break;
case LOOP_DEBUG:{
this.DEBUG_LOOP(message);
} break;
}
}
/**
* Gets the level of the logger
* @return The level
*/
public LogLevel getLevel(){
return this.level;
}
/**
* Gets the name of the logger
* @return the name
*/
public String getName(){
return this.name;
}
}