Add LogEvent and EngineCrashEvent
This commit is contained in:
parent
b4cf8f81b1
commit
aa688a0ca4
5 changed files with 128 additions and 0 deletions
|
@ -0,0 +1,36 @@
|
|||
/*
|
||||
STAROPENSOURCE ENGINE SOURCE FILE
|
||||
Copyright (c) 2024 The StarOpenSource Engine Contributors
|
||||
Licensed under the GNU Affero General Public License v3
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package de.staropensource.sosengine.base.events;
|
||||
|
||||
import de.staropensource.sosengine.base.classes.Event;
|
||||
|
||||
/**
|
||||
* Called in the event of an engine crash, just before the JVM exists.
|
||||
*
|
||||
* @since 1-alpha0
|
||||
*/
|
||||
@SuppressWarnings({ "unused" })
|
||||
public final class EngineCrashEvent extends Event {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public void callEvent() {
|
||||
invokeAnnotatedMethods();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,60 @@
|
|||
/*
|
||||
STAROPENSOURCE ENGINE SOURCE FILE
|
||||
Copyright (c) 2024 The StarOpenSource Engine Contributors
|
||||
Licensed under the GNU Affero General Public License v3
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package de.staropensource.sosengine.base.events;
|
||||
|
||||
import de.staropensource.sosengine.base.classes.Event;
|
||||
import de.staropensource.sosengine.base.types.LogIssuer;
|
||||
import de.staropensource.sosengine.base.types.LogLevel;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
/**
|
||||
* Called before a new log message is printed.
|
||||
*
|
||||
* @since 1-alpha0
|
||||
*/
|
||||
@SuppressWarnings({ "unused" })
|
||||
public final class LogEvent extends Event {
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
* @deprecated use the {@code callEvent} method with arguments
|
||||
* @see LogEvent#callEventNew(LogLevel, LogIssuer, String)
|
||||
*/
|
||||
@Deprecated
|
||||
@Override
|
||||
public void callEvent() {
|
||||
invokeAnnotatedMethods();
|
||||
}
|
||||
|
||||
/**
|
||||
* Calls the event and notifies all annotated methods about it.
|
||||
*
|
||||
* @since 1-alpha0
|
||||
*/
|
||||
public void callEventNew(@NotNull LogLevel level, @NotNull LogIssuer logIssuer, @NotNull String message) {
|
||||
for (Method method : getAnnotatedMethods()) {
|
||||
try {
|
||||
method.invoke(null, level, logIssuer, message);
|
||||
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NullPointerException | ExceptionInInitializerError ignored) {}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
/*
|
||||
STAROPENSOURCE ENGINE SOURCE FILE
|
||||
Copyright (c) 2024 The StarOpenSource Engine Contributors
|
||||
Licensed under the GNU Affero General Public License v3
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Events used for engine-internal communication.
|
||||
* These events are meant to be listened on by the base engine and it's subsystems.
|
||||
*/
|
||||
package de.staropensource.sosengine.base.events.internal;
|
|
@ -21,6 +21,7 @@ package de.staropensource.sosengine.base.logging;
|
|||
|
||||
import de.staropensource.sosengine.base.EngineConfiguration;
|
||||
import de.staropensource.sosengine.base.classes.Placeholder;
|
||||
import de.staropensource.sosengine.base.events.EngineCrashEvent;
|
||||
import de.staropensource.sosengine.base.logging.placeholders.crashhandler.*;
|
||||
import de.staropensource.sosengine.base.types.LogIssuer;
|
||||
import de.staropensource.sosengine.base.types.LogLevel;
|
||||
|
@ -142,6 +143,9 @@ public final class CrashHandler {
|
|||
// Print log message
|
||||
Logger.getLoggerImplementation().print(LogLevel.CRASH, logIssuer, base);
|
||||
|
||||
// Send EngineCrash event
|
||||
EngineCrashEvent.getInstance().callEvent();
|
||||
|
||||
// Shutdown JVM
|
||||
if (EngineConfiguration.getInstance().isLoggerImmediateShutdown())
|
||||
Runtime.getRuntime().halt(69);
|
||||
|
|
|
@ -22,6 +22,7 @@ package de.staropensource.sosengine.base.logging;
|
|||
import de.staropensource.sosengine.base.EngineConfiguration;
|
||||
import de.staropensource.sosengine.base.classes.LoggerImpl;
|
||||
import de.staropensource.sosengine.base.classes.Placeholder;
|
||||
import de.staropensource.sosengine.base.events.LogEvent;
|
||||
import de.staropensource.sosengine.base.logging.placeholders.logger.*;
|
||||
import de.staropensource.sosengine.base.types.LogIssuer;
|
||||
import de.staropensource.sosengine.base.types.LogLevel;
|
||||
|
@ -113,6 +114,9 @@ public final class Logger {
|
|||
// Execute LoggerImpl#postPlaceholder
|
||||
base = loggerImplementation.postPlaceholder(level, logIssuer, base);
|
||||
|
||||
// Call event
|
||||
((LogEvent) LogEvent.getInstance()).callEventNew(level, logIssuer, message);
|
||||
|
||||
// Print log message
|
||||
loggerImplementation.print(level, logIssuer, base);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue