Commit 36e56c3
authored
Fix Darwin OSLog composition failure in historical logs (#594)
Fixes #588
## Description
This PR fixes an issue where logs on macOS (using `DarwinKLogger`) would show `<compose failure>` when viewed in historical logs (via `log show` or Console.app), despite appearing correctly in live logs (`log stream`).
The issue was caused by passing a dynamically allocated format string to `os_log`. Apple's `os_log` system requires the format string to be a C string literal located in the `__TEXT,__oslogstring` section of the binary for security and privacy (redaction) reasons. Wrappers or dynamic strings do not satisfy this requirement by default, causing the logging system to fail composition during archival.
## Solution
Implemented a C-interop solution to provide a valid static format string to `os_log`:
1. **Added C-Interop Definition (`oslog.def`)**: Created a C header/def file that defines a static inline function `kotlin_logging_os_log`.
```c
static inline void kotlin_logging_os_log(os_log_t log, os_log_type_t type, const char* message) {
os_log_with_type(log, type, "%{public}s", message);
}
```
This function uses `"%{public}s"` as a constant C string literal, which `clang` places in the correct section.
2. **Updated Build Configuration (`build.gradle.kts`)**: Configured all Darwin targets to include this C-interop definition.
3. **Updated `DarwinKLogger`**: Modified `DarwinKLogger.kt` to call `kotlin_logging_os_log` instead of `_os_log_internal`.
## Verification
- Added `Issue588Test` to reproduce the issue.
- Verified that logs are successfully persisted and readable using `log show`:
```bash
log show --predicate 'processImagePath CONTAINS "test.kexe"' --info --style syslog --last 5m
```
- Confirmed output contains the log message instead of `<compose failure>`.1 parent 4ff0b7d commit 36e56c3
9 files changed
Lines changed: 56 additions & 16 deletions
File tree
- src
- darwinMain
- cinterop
- kotlin/io/github/oshai/kotlinlogging
- internal
- darwinTest/kotlin/io/github/oshai/kotlinlogging
- jvmMain/kotlin/io/github/oshai/kotlinlogging
- logback/internal
- nativeMain/kotlin/io/github/oshai/kotlinlogging/internal
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
271 | 271 | | |
272 | 272 | | |
273 | 273 | | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
274 | 278 | | |
275 | 279 | | |
276 | 280 | | |
| |||
407 | 411 | | |
408 | 412 | | |
409 | 413 | | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
8 | | - | |
| 8 | + | |
| 9 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
Lines changed: 12 additions & 13 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| 5 | + | |
5 | 6 | | |
6 | 7 | | |
7 | | - | |
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
12 | | - | |
13 | | - | |
14 | 12 | | |
15 | 13 | | |
16 | 14 | | |
| |||
21 | 19 | | |
22 | 20 | | |
23 | 21 | | |
24 | | - | |
25 | | - | |
26 | | - | |
27 | | - | |
28 | | - | |
29 | | - | |
30 | | - | |
31 | | - | |
32 | | - | |
33 | | - | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
34 | 33 | | |
35 | 34 | | |
36 | 35 | | |
| |||
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | | - | |
| 5 | + | |
Lines changed: 15 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
Lines changed: 2 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| 15 | + | |
15 | 16 | | |
16 | 17 | | |
17 | 18 | | |
18 | 19 | | |
19 | 20 | | |
20 | 21 | | |
| 22 | + | |
21 | 23 | | |
22 | 24 | | |
23 | 25 | | |
| |||
Lines changed: 1 addition & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
41 | 41 | | |
42 | 42 | | |
43 | 43 | | |
| 44 | + | |
44 | 45 | | |
45 | 46 | | |
46 | 47 | | |
| |||
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | | - | |
| 5 | + | |
0 commit comments