We’re excited to announce the release of Beta 24, packed with powerful new features, essential bug fixes, and impactful improvements that enhance performance and security. This release brings more robust logging capabilities, enhanced configuration flexibility, and new query-handling methods to streamline your development experience. We’ve also squashed several parsing bugs, ensuring smoother code execution.
Whether you’re optimizing your runtime with custom logging encoders or leveraging the new queryColumnList for seamless data manipulation, Beta 24 is designed to empower developers with a more secure, customizable, and efficient development environment.
🐞 Bug Fixes
• BL-797: Parsing issue fixed when using a < symbol before a tag. No more parsing hiccups!
• BL-798: = sign after an if tag? No problem now! Fixed to handle this scenario smoothly.
• BL-799: Parentheses confusion resolved! Opening parentheses (afterword operators will no longer be mistaken for function calls.
• BL-800: Environmental safety improved: BOXLANG_DEBUG will now be parsed only if non-null to prevent unexpected behavior.
✨ New Features
Improved Logging
BoxLang's logging features have been completely revamped in preparation for its stable release. You also have fine-grain control over them, and module developers will be able to register and leverage custom loggers and appenders.
Please note that the logsDirectory setting has been moved from the root of the boxlang.json to the new logging section.
Check out the new configuration:
// Logging Settings for the runtime"logging": {// The location of the log files the runtime will produce"logsDirectory":"${boxlang-home}/logs",// The maximum number of days to keep log files before rotation// Default is 90 days or 3 months// Set to 0 to never rotate"maxLogDays":90,// The maximum file size for a single log file before rotation// You can use the following suffixes: KB, MB, GB// Default is 100MB"maxFileSize":"100MB",// The total cap size of all log files before rotation// You can use the following suffixes: KB, MB, GB// Default is 5GB"totalCapSize":"5GB",// The root logger level// Valid values are in order of severity: ERROR, WARN, INFO, DEBUG, TRACE, OFF// If the runtime is in Debug mode, this will be set to DEBUG"rootLevel":"WARN",// Default Encoder for file appenders.// The available options are "text" and "json""defaultEncoder":"text",// A collection of pre-defined loggers and their configurations"loggers": {// The runtime main and default log"runtime": {// Valid values are in order of severity: ERROR, WARN, INFO, DEBUG, TRACE, OFF// Leave out if it should inherit from the root logger//"level": "WARN",// Valid values are: "file", "console",// Coming soon: "smtp", "socket", "db", "syslog" or "java class name"// Please note that we only use Rolling File Appenders"appender":"file",// Use the defaults from the runtime"appenderArguments": {},// The available options are "text" and "json""encoder":"text",// Additive logging: true means that this logger will inherit the appenders from the root logger// If false, it will only use the appenders defined in this logger"additive":true },// The modules log"modules": {// Valid values are in order of severity: ERROR, WARN, INFO, DEBUG, TRACE, OFF// Leave out if it should inherit from the root logger//"level": "WARN",// Valid values are: "file", "console",// Coming soon: "smtp", "socket", "db", "syslog" or "java class name"// Please note that we only use Rolling File Appenders"appender":"file",// Use the defaults from the runtime"appenderArguments": {},// The available options are "text" and "json""encoder":"text",// Additive logging: true means that this logger will inherit the appenders from the root logger// If false, it will only use the appenders defined in this logger"additive":true },// All applications will use this logger"application": {// Valid values are in order of severity: ERROR, WARN, INFO, DEBUG, TRACE, OFF// Leave out if it should inherit from the root logger"level":"TRACE",// Valid values are: "file", "console",// Coming soon: "smtp", "socket", "db", "syslog" or "java class name"// Please note that we only use Rolling File Appenders"appender":"file",// Use the defaults from the runtime"appenderArguments": {},// The available options are "text" and "json""encoder":"text",// Additive logging: true means that this logger will inherit the appenders from the root logger// If false, it will only use the appenders defined in this logger"additive":true },// All scheduled tasks logging"scheduler": {// Valid values are in order of severity: ERROR, WARN, INFO, DEBUG, TRACE, OFF// Leave out if it should inherit from the root logger"level":"INFO",// Valid values are: "file", "console",// Coming soon: "smtp", "socket", "db", "syslog" or "java class name"// Please note that we only use Rolling File Appenders"appender":"file",// Use the defaults from the runtime"appenderArguments": {},// The available options are "text" and "json""encoder":"text",// Additive logging: true means that this logger will inherit the appenders from the root logger// If false, it will only use the appenders defined in this logger"additive":true } }},
JSON Anyone?
We have added support for JSON Lines log files. You can now switch the default encoder for the log files from text to json and see the JSON log files in full splendor!
• BL-792: Introducing CFConfig support and named loggers for more precise control over your logging setup!
• BL-793: Added the ability to configure logging items, giving you more flexibility in managing your logs.
• BL-803: Choose your logging format! You can now select text and JSON logging encoders for better runtime output customization.
📈 Improvements
• BL-782: Refined the LoggingService to encapsulate all logging characteristics, streamlining log management.
• BL-783: Strengthened security by disabling absolute path logging and prohibiting custom log extensions. Your logs are safer now!
• BL-785: Upgraded logging to follow ISO8601 date/time format and threading standards for more standardized logs.
• BL-786: Replaced FileAppender with RollingFileAppender to better handle large log files through automatic rotation.
• BL-795: Introduced queryColumnList BIF and a columnList() member method for easier Query column management.
• BL-804: Enhanced support for customTagPaths in Application.cfc/bx, expanding customization capabilities.