Essentially I'm doing some static initialisation and I wan to access a logger instance; because it's an initialiser I can't pass anything into it so I'm trying to access a logger via
Code: Select all
var loggerInstance = LoggerFactory.getLogger("someNameHere");
I've left my log4j file in the default SFS2X state but I'll list it anyway;
Code: Select all
# ConsoleAppender
log4j.appender.consoleAppender=org.apache.log4j.ConsoleAppender
log4j.appender.consoleAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.consoleAppender.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p [%t] %c{2} %3x - %m%n
# SocketAppender
log4j.appender.socketAppender=org.apache.log4j.net.SocketAppender
log4j.appender.socketAppender.remoteHost=localhost
log4j.appender.socketAppender.port=4445
log4j.appender.socketAppender.locationInfo=true
# Regular FileAppender
# NOTE: altering the ConversionPattern will cause a portion of the AdminTool's Log Viewer module to stop working properly
log4j.appender.fileAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.fileAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.fileAppender.File=logs/smartfox.log
log4j.appender.fileAppender.layout.ConversionPattern=%d{dd MMM yyyy | HH:mm:ss,SSS} | %-5p | %t | %c{3} | %3x | %m%n
log4j.appender.fileAppender.Encoding=UTF-8
# The file is rolled over every day.
# Other examples:
#
# '.'yyyy-MM-dd-HH rolls every hour
# '.'yyyy-MM-dd-HH-mm rolls every minute
log4j.appender.fileAppender.DatePattern='.'yyyy-MM-dd
# BootLogger FileAppender(s)
log4j.appender.bootFileAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.bootFileAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.bootFileAppender.File=logs/boot/boot.log
log4j.appender.bootConsoleAppender.threshold=DEBUG
log4j.appender.bootFileAppender.layout.ConversionPattern=%d{dd MMM yyyy | HH:mm:ss,SSS} | %-5p | %t | %c{3} | %3x | %m%n
log4j.appender.bootFileAppender.Encoding=UTF-8
log4j.appender.bootConsoleAppender=org.apache.log4j.ConsoleAppender
log4j.appender.bootConsoleAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.bootConsoleAppender.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p [%t] %c{3} %3x - %m%n
log4j.appender.bootConsoleAppender.threshold=WARN
# log4j.category.com.smartfoxserver.v2=DEBUG,consoleAppender,fileAppender,socketAppender
log4j.category.com.smartfoxserver=INFO,consoleAppender,fileAppender
log4j.category.org.apache=INFO,consoleAppender,fileAppender
log4j.category.org.apache.http=INFO,consoleAppender,fileAppender
log4j.category.org.eclipse.jetty=WARN,consoleAppender,fileAppender
log4j.category.bootLogger=DEBUG,bootFileAppender,bootConsoleAppender
log4j.category.sfs2x=INFO,consoleAppender,fileAppender
log4j.category.Extensions=INFO,consoleAppender,fileAppender
log4j.category.hsqldb.db=WARN,consoleAppender,fileAppender
log4j.category.jndi=INFO,consoleAppender,fileAppender
So if you were to take an example of the code I'm running it would be something akin to;
Code: Select all
pubilc class SomeManager {
public final static List<String> someStrings = new List<String>();
static {
var loggerInstance = LoggerFactory.getLogger("Extensions"); // I tried various names and just ended on using categories listed in the properties file
// Do some calculations on which strings to add from files and add them to the list
// code code code...
// Add a task to the scheduler
var offset = randomBetween(3600, 7200);
SmartFoxServer.getInstance().getTaskScheduler().schedule(new MyRunnableTask(), offset, TimeUnit.SECONDS);
// Log the task schedule time
loggerInstance.info("XYZ Task Scheduled to run in " + offsetSeconds + " seconds");
}
}
Obviously this is not the exact code but should give you an idea. I've run it through the debugger and nothing is crashing. It hits the log line, then the exit brace, then everything continues running as normal. I added a printLn statement after the logger info line, which successfully printed to console just to ensure the log line itself wasn't crashing out of the initialiser.
What am I doing wrong here?
EDIT: I thought I'd add where in the actual program execution this happens; this happens as the server is starting up, it starts loading the Zone, which loads a long-lived Room, which accesses some of this static data during its `init()` method.