mirror of
https://github.com/Nanaloveyuki/BitLogger.git
synced 2026-07-26 18:02:19 +00:00
🐛 fix native file sink lifecycle behavior
This commit is contained in:
+25
-24
@@ -642,24 +642,22 @@ test "configured logger queue helpers stay aligned with runtime sink helpers" {
|
||||
}
|
||||
|
||||
test "configured logger close stays aligned with runtime sink close" {
|
||||
let console_logger = build_logger(
|
||||
LoggerConfig::new(
|
||||
min_level=Level::Info,
|
||||
target="config.close.console",
|
||||
sink=SinkConfig::new(kind=SinkKind::Console),
|
||||
queue=Some(QueueConfig::new(2, overflow=QueueOverflowPolicy::DropNewest)),
|
||||
),
|
||||
let console_config = LoggerConfig::new(
|
||||
min_level=Level::Info,
|
||||
target="config.close.console",
|
||||
sink=SinkConfig::new(kind=SinkKind::Console),
|
||||
queue=Some(QueueConfig::new(2, overflow=QueueOverflowPolicy::DropNewest)),
|
||||
)
|
||||
let console_sink = console_logger.sink
|
||||
let console_logger = build_logger(console_config)
|
||||
let console_sink = build_logger(console_config).sink
|
||||
inspect(console_logger.close() == console_sink.close(), content="true")
|
||||
|
||||
let file_logger = build_logger(
|
||||
LoggerConfig::new(
|
||||
target="config.close.file",
|
||||
sink=SinkConfig::new(kind=SinkKind::File, path="config-close.log"),
|
||||
),
|
||||
let file_config = LoggerConfig::new(
|
||||
target="config.close.file",
|
||||
sink=SinkConfig::new(kind=SinkKind::File, path="config-close.log"),
|
||||
)
|
||||
let file_sink = file_logger.sink
|
||||
let file_logger = build_logger(file_config)
|
||||
let file_sink = build_logger(file_config).sink
|
||||
inspect(file_logger.close() == file_sink.close(), content="true")
|
||||
}
|
||||
|
||||
@@ -1628,20 +1626,18 @@ test "configured logger exposes file flush and close helpers" {
|
||||
}
|
||||
|
||||
test "configured logger file flush and close stay aligned with runtime sink helpers" {
|
||||
let file_logger = build_logger(
|
||||
LoggerConfig::new(
|
||||
sink=SinkConfig::new(kind=SinkKind::File, path="config-file-helper-delegate.log"),
|
||||
),
|
||||
let file_config = LoggerConfig::new(
|
||||
sink=SinkConfig::new(kind=SinkKind::File, path="config-file-helper-delegate.log"),
|
||||
)
|
||||
let file_sink = file_logger.sink
|
||||
let file_logger = build_logger(file_config)
|
||||
let file_sink = build_logger(file_config).sink
|
||||
|
||||
inspect(file_logger.file_flush() == file_sink.file_flush(), content="true")
|
||||
inspect(file_logger.file_close() == file_sink.file_close(), content="true")
|
||||
|
||||
let console_logger = build_logger(
|
||||
LoggerConfig::new(sink=SinkConfig::new(kind=SinkKind::Console)),
|
||||
)
|
||||
let console_sink = console_logger.sink
|
||||
let console_config = LoggerConfig::new(sink=SinkConfig::new(kind=SinkKind::Console))
|
||||
let console_logger = build_logger(console_config)
|
||||
let console_sink = build_logger(console_config).sink
|
||||
|
||||
inspect(console_logger.file_flush() == console_sink.file_flush(), content="true")
|
||||
inspect(console_logger.file_close() == console_sink.file_close(), content="true")
|
||||
@@ -2715,7 +2711,12 @@ test "configured logger projection preserves file runtime helpers through unwrap
|
||||
inspect(full.file_reset_failure_counters() == configured.file_reset_failure_counters(), content="true")
|
||||
inspect(full.file_flush() == configured.file_flush(), content="true")
|
||||
inspect(full.pending_count() == configured.pending_count(), content="true")
|
||||
inspect(full.file_close() == configured.file_close(), content="true")
|
||||
|
||||
let was_available = configured.file_available()
|
||||
inspect(configured.file_close() == was_available, content="true")
|
||||
inspect(full.file_available(), content="false")
|
||||
inspect(configured.file_available(), content="false")
|
||||
inspect(full.file_close(), content="false")
|
||||
}
|
||||
|
||||
test "default library logger mirrors shared sync defaults" {
|
||||
|
||||
@@ -6,6 +6,24 @@ test "default logger can be reconfigured" {
|
||||
inspect(logger.target, content="global")
|
||||
}
|
||||
|
||||
test "default logger snapshots shared defaults at creation time" {
|
||||
set_default_min_level(Level::Warn)
|
||||
set_default_target("before")
|
||||
let before = default_logger()
|
||||
|
||||
set_default_min_level(Level::Debug)
|
||||
set_default_target("after")
|
||||
let after = default_logger()
|
||||
|
||||
inspect(before.is_enabled(Level::Error), content="true")
|
||||
inspect(before.is_enabled(Level::Info), content="false")
|
||||
inspect(before.target, content="before")
|
||||
|
||||
inspect(after.is_enabled(Level::Error), content="true")
|
||||
inspect(after.is_enabled(Level::Info), content="true")
|
||||
inspect(after.target, content="after")
|
||||
}
|
||||
|
||||
test "logger can enable timestamps" {
|
||||
let logger = Logger::new(console_sink(), min_level=Level::Info, target="time")
|
||||
.with_timestamp()
|
||||
|
||||
@@ -37,7 +37,7 @@ type NativeFileHandle
|
||||
#borrow(path, mode)
|
||||
extern "C" fn file_open_ffi(path : Bytes, mode : Bytes) -> NativeFileHandle = "fopen"
|
||||
|
||||
extern "C" fn file_is_null_ffi(handle : NativeFileHandle) -> Bool = "moonbitlang_async_pointer_is_null"
|
||||
extern "C" fn file_is_null_ffi(handle : NativeFileHandle) -> Bool = "bitlogger_pointer_is_null"
|
||||
|
||||
#borrow(buffer)
|
||||
extern "C" fn file_write_ffi(
|
||||
|
||||
@@ -7,6 +7,7 @@ import {
|
||||
}
|
||||
|
||||
options(
|
||||
"native-stub": [ "stub.c" ],
|
||||
targets: {
|
||||
"file_backend_native.mbt": [ "native", "llvm" ],
|
||||
"file_backend_stub.mbt": [ "js", "wasm", "wasm-gc" ],
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
#include <stdint.h>
|
||||
|
||||
int32_t bitlogger_pointer_is_null(void *ptr) {
|
||||
return ptr == 0;
|
||||
}
|
||||
Reference in New Issue
Block a user