Context
I ran borg create through the various logging/verbosity flag combinations to see how the output
actually feels: is it clean, does it nest properly, is everything logged at the right level, and is it
saying too much or too little? Findings are up top; every command with its full output is pasted
verbatim at the bottom.
Environment
| Item |
Value |
| borg version |
2.0.0b21.dev770+g15d55d48e (master @ 87bd65c05) |
| Platform |
native Linux, run as python -m borg |
| Repo |
local, encryption none |
| Source tree |
4 files (24 B – 4 KB) across 2 subdirs; +1 file added on the incremental run |
| Streams |
borg logs to stderr; only --json writes to stdout |
borg2 note: the command syntax is borg [-r REPO] create NAME PATH … (not the borg1
repo::archive form). Commands below are shown without the -r REPO prefix for brevity.
Analysis
Concrete bugs
None. (An earlier draft flagged a 0x08 byte in the --print_config help metavar — that turned out to be an intentional jsonargparse detail, not a borg issue. See Known / expected below.)
Needs attention / for discussion (not fixing unilaterally)
| ID |
Combo(s) |
Observation |
Question |
| A |
1 |
Baseline create says nothing at all: no stdout, no stderr, exit 0. Nothing to tell you an archive was even made. |
Intended (quiet-on-success) or too little? |
| B |
5, 6 |
Creating archive at "<REPO PATH>" prints the repository path, never the archive name (a5/a6). |
Should it name the archive, or say "in repository …"? |
| C |
8 |
--progress leaves a cryptic final line 0 B O 0 B U 0 N op/src (reads unfinished), two stray blank lines, and Saving files cache / chunks cache / cache config messages present only in progress mode. |
Should the trailing progress state be cleared / show final counts? |
| D |
3 vs 10 |
--json stats block leaves out deduplicated_size (and compression) that text --stats prints. |
The two stats views don't match. Should they? |
| E |
11 |
--list under --log-json emits {"type": "file_status", …} objects with no levelname. |
Confirm intended contract (only regular log messages carry levels, not file_status). |
Looks good (no change needed)
| Combo(s) |
Why it's fine |
2, 4 --list (± --stats) |
Per-item list, depth-first (files then their d dir), no interleave with stats. |
3 --stats |
Clean summary block. |
6 --info |
Same as --verbose (they alias), plus the stats. |
7 --debug |
Lots of output, but that's what debug is for. The "files cache can't be read" line on a new series is harmless. |
9 --progress --list |
Rejected with a clear message, which is the intended behaviour (exit 2). |
11 --log-json --list |
Clean JSONL, one object per item. |
12 --list --filter=AME |
Correctly drops d dir entries. |
| 13 incremental |
U/A/d statuses correct; stats report Added 1 / Unchanged 4. |
| 14–17 quiet levels |
--list/--stats honoured at every level; ladder is monotonic (see below). |
Log-level ladder (monotonicity check)
--list and --stats go through their own loggers (borg.output.list / borg.output.stats), which
aren't gated by the global log level. So if you ask for a list you get it, no matter how quiet you set
things. Raising verbosity only ever adds lines; it never drops or contradicts what a lower level showed.
| Level |
Ambient log lines added |
--list / --stats still shown? |
--critical / --error / --warning / default |
none |
✅ yes |
--info / --verbose |
+ Creating archive at "<repo>" |
✅ yes |
--debug |
+ full borgstore / lock / security / chunk-index firehose |
✅ yes |
Known / expected (documented, not bugs)
| Behaviour |
Detail |
Reference |
--progress + --list rejected |
Parser errors with "Options --progress and --list do not play nicely together." Intentional (combo 9). |
archiver/__init__.py:378 |
M/U need a reused series |
Incremental statuses only show up when you reuse the same archive name (series); borg2's files-cache is per-series. |
— |
Modified-within-second → A |
A file changed within the same mtime-second as the backup is conservatively re-added as A (not M); files-cache safety window. |
archive.py:1427 |
--dry-run + --stats |
Mutually exclusive but do not error; borg proceeds with dry-run and silently drops stats. (Not exercised below.) |
create_cmd.py:816-817 |
0x08 in --print_config help |
The backspace byte in the usage/help metavar comes from jsonargparse (metavar="\b[=flags]"), not from borg. It's a deliberate trick to erase the space argparse inserts, so a real terminal renders --print_config[=flags] correctly. Only visible when the output is piped/captured (e.g. cat -v). Nothing for borg to fix. |
jsonargparse _actions.py:170 |
Verdict table
| # |
Command |
Stream |
Exit |
Verdict |
| 1 |
create (baseline) |
— |
0 |
⚠️ silent |
| 2 |
create --list |
stderr |
0 |
✅ |
| 3 |
create --stats |
stderr |
0 |
✅ |
| 4 |
create --list --stats |
stderr |
0 |
✅ |
| 5 |
--verbose create --list |
stderr |
0 |
⚠️ wording |
| 6 |
--info create --stats |
stderr |
0 |
✅ (== verbose) |
| 7 |
--debug create |
stderr |
0 |
✅ (volume ok) |
| 8 |
create --progress |
stderr |
0 |
⚠️ residue |
| 9 |
create --progress --list |
stderr |
2 |
✅ expected error |
| 10 |
create --json |
stdout |
0 |
⚠️ stats mismatch |
| 11 |
--log-json create --list |
stderr |
0 |
✅ |
| 12 |
create --list --filter=AME |
stderr |
0 |
✅ |
| 13 |
create --list (incremental, reused series) |
stderr |
0 |
✅ |
| 14 |
--warning create --list |
stderr |
0 |
✅ |
| 15 |
--error create --stats |
stderr |
0 |
✅ |
| 16 |
--critical create --list --stats |
stderr |
0 |
✅ |
| 17 |
create --list (default level) |
stderr |
0 |
✅ |
Commands run & full outputs (verbatim)
1. borg create a1 (exit 0)
(no output on stdout or stderr)
2. borg create --list a2 (exit 0)
stderr:
A op/src/dir1/file_b.bin
A op/src/dir1/file_d.bin
d op/src/dir1
A op/src/dir2/file_c.txt
d op/src/dir2
A op/src/file_a.bin
d op/src
3. borg create --stats a3 (exit 0)
stderr:
Repository: /home/rog_mr/Desktop/joy/borg/op/repo
Archive name: a3
Archive fingerprint: a51e9887602011d1dd5e4f32e066c76a7badbc9797cee4c3a8e1442e072af046
Time (nominal): Mon, 2026-07-06 10:39:41 +0530
Time (start): Mon, 2026-07-06 10:39:41 +0530
Time (end): Mon, 2026-07-06 10:39:41 +0530
Duration: 0.007 seconds
Number of files: 4
Original size: 7.20 kB
Deduplicated size: 482 B
Time spent in hashing: 0.000 seconds
Time spent in chunking: 0.000 seconds
Added files: 4
Unchanged files: 0
Modified files: 0
Error files: 0
Files changed while reading: 0
Bytes read from remote: 0
Bytes sent to remote: 0
4. borg create --list --stats a4 (exit 0)
stderr:
A op/src/dir1/file_b.bin
A op/src/dir1/file_d.bin
d op/src/dir1
A op/src/dir2/file_c.txt
d op/src/dir2
A op/src/file_a.bin
d op/src
Repository: /home/rog_mr/Desktop/joy/borg/op/repo
Archive name: a4
Archive fingerprint: ff0900e8e177a6ae55ea377695a2914cdf5c29edd2f2b2c799ea1926b913dee4
Time (nominal): Mon, 2026-07-06 10:39:42 +0530
Time (start): Mon, 2026-07-06 10:39:42 +0530
Time (end): Mon, 2026-07-06 10:39:42 +0530
Duration: 0.009 seconds
Number of files: 4
Original size: 7.20 kB
Deduplicated size: 489 B
Time spent in hashing: 0.000 seconds
Time spent in chunking: 0.000 seconds
Added files: 4
Unchanged files: 0
Modified files: 0
Error files: 0
Files changed while reading: 0
Bytes read from remote: 0
Bytes sent to remote: 0
5. borg --verbose create --list a5 (exit 0)
stderr:
Creating archive at "/home/rog_mr/Desktop/joy/borg/op/repo"
A op/src/dir1/file_b.bin
A op/src/dir1/file_d.bin
d op/src/dir1
A op/src/dir2/file_c.txt
d op/src/dir2
A op/src/file_a.bin
d op/src
6. borg --info create --stats a6 (exit 0)
stderr:
Creating archive at "/home/rog_mr/Desktop/joy/borg/op/repo"
Repository: /home/rog_mr/Desktop/joy/borg/op/repo
Archive name: a6
Archive fingerprint: db336ea03bf3b322b0d55aaed178c8c7601e91f2d4bddeef74d76f5a942a92cd
Time (nominal): Mon, 2026-07-06 10:39:43 +0530
Time (start): Mon, 2026-07-06 10:39:43 +0530
Time (end): Mon, 2026-07-06 10:39:43 +0530
Duration: 0.012 seconds
Number of files: 4
Original size: 7.20 kB
Deduplicated size: 489 B
Time spent in hashing: 0.000 seconds
Time spent in chunking: 0.000 seconds
Added files: 4
Unchanged files: 0
Modified files: 0
Error files: 0
Files changed while reading: 0
Bytes read from remote: 0
Bytes sent to remote: 0
7. borg --debug create a7 (exit 0)
stderr:
using builtin fallback logging configuration
17 self-tests completed in 0.09 seconds
borgstore: load('config/readme', offset=0, size=None, deleted=False) -> 73B in 0.1ms
borgstore: load('config/version', offset=0, size=None, deleted=False) -> 1B in 0.1ms
borgstore: load('config/id', offset=0, size=None, deleted=False) -> 64B in 0.1ms
LOCK-INIT: initializing. store: <Store(backend='PosixFS')>, stale: 1800s, refresh: 900s.
LOCK-ACQUIRE: trying to acquire a lock. exclusive: False.
borgstore: list_start('locks', deleted=False)
borgstore: list_end('locks', deleted=False) -> 0
LOCK-CREATE: creating lock in store. key: ab22b0129f86b739844cb91c47c5144cbd91458df82fc79bcb3d65aef33c4add, lock: {'exclusive': False, 'hostid': 'rog_mr-HP-ProBook-445-14-inch-G10-Notebook-PC@110289787484537', 'processid': 17300, 'threadid': 0, 'time': '2026-07-06T05:09:44.578+00:00'}.
borgstore: store('locks/ab22b0129f86b739844cb91c47c5144cbd91458df82fc79bcb3d65aef33c4add') -> 182B in 0.4ms
borgstore: list_start('locks', deleted=False)
borgstore: list_end('locks', deleted=False) -> 1
borgstore: load('locks/ab22b0129f86b739844cb91c47c5144cbd91458df82fc79bcb3d65aef33c4add', offset=0, size=None, deleted=False) -> 182B in 0.1ms
LOCK-ACQUIRE: success! no exclusive locks detected.
borgstore: load('config/manifest', offset=0, size=None, deleted=False) -> 370B in 0.1ms
security: read previous location '/home/rog_mr/Desktop/joy/borg/op/repo'
security: read manifest timestamp '2026-07-06T05:09:43.887130+00:00'
security: determined newest manifest timestamp as 2026-07-06T05:09:43.887130+00:00
security: repository checks ok, allowing access
Creating archive at "/home/rog_mr/Desktop/joy/borg/op/repo"
Using /home/rog_mr/.cache/borg/393ce96b709bf446b0e2e5fb2ceb084deabae57c0145aa64ad179cea4832dce1 as cache
security: read previous location '/home/rog_mr/Desktop/joy/borg/op/repo'
security: read manifest timestamp '2026-07-06T05:09:43.887130+00:00'
security: determined newest manifest timestamp as 2026-07-06T05:09:43.887130+00:00
security: repository checks ok, allowing access
Processing files ...
Reading files cache ...
The files cache can't be read. [[Errno 2] No such file or directory: '/home/rog_mr/.cache/borg/393ce96b709bf446b0e2e5fb2ceb084deabae57c0145aa64ad179cea4832dce1/files.20377cec9f51f6bf5ba1fa64649f3b1614e4eee833fd0fc5893f24f6e0accbaf']
borgstore: list_start('archives', deleted=False)
borgstore: list_end('archives', deleted=False) -> 6
borgstore: list_start('index', deleted=False)
borgstore: list_end('index', deleted=False) -> 7
chunk indexes: ['1a049ec0a9a163ab714bee62291b059dede5eec140aacae84b1df88abba783f6', '4acd8bcd44be6162e5869fd30055807286dc3654fe5b6831ceba18589af577aa', '7863f8a9845a9093fc3df01080de7d3632d81f486b9fa391458090a0328fa4f4', '9a9b3074616eca7dbf3d9df436c433ea774540fb4e2a6e1ade343f99ceaa054b', 'c7e9813bb14952fc80df7a61ccae310740248b45c665e54961fbb53aa0e849a6', 'f070c6a51916ee6f68aba7cf2af6835dce1f21cd7d298c9768db3464d2728787', 'f7c384a63afe086bcfe913397d9d8b6e2b2feccee3119398abcaab92ba32e802']
trying to load index/1a049ec0a9a163ab714bee62291b059dede5eec140aacae84b1df88abba783f6 from the repo...
borgstore: load('index/1a049ec0a9a163ab714bee62291b059dede5eec140aacae84b1df88abba783f6', offset=0, size=None, deleted=False) -> 469B in 0.1ms
index/1a049ec0a9a163ab714bee62291b059dede5eec140aacae84b1df88abba783f6 is valid.
cached chunk index 1a049ec0a9a163ab714bee62291b059dede5eec140aacae84b1df88abba783f6 gets merged...
trying to load index/4acd8bcd44be6162e5869fd30055807286dc3654fe5b6831ceba18589af577aa from the repo...
borgstore: load('index/4acd8bcd44be6162e5869fd30055807286dc3654fe5b6831ceba18589af577aa', offset=0, size=None, deleted=False) -> 469B in 0.1ms
index/4acd8bcd44be6162e5869fd30055807286dc3654fe5b6831ceba18589af577aa is valid.
cached chunk index 4acd8bcd44be6162e5869fd30055807286dc3654fe5b6831ceba18589af577aa gets merged...
trying to load index/7863f8a9845a9093fc3df01080de7d3632d81f486b9fa391458090a0328fa4f4 from the repo...
borgstore: load('index/7863f8a9845a9093fc3df01080de7d3632d81f486b9fa391458090a0328fa4f4', offset=0, size=None, deleted=False) -> 949B in 0.1ms
index/7863f8a9845a9093fc3df01080de7d3632d81f486b9fa391458090a0328fa4f4 is valid.
cached chunk index 7863f8a9845a9093fc3df01080de7d3632d81f486b9fa391458090a0328fa4f4 gets merged...
trying to load index/9a9b3074616eca7dbf3d9df436c433ea774540fb4e2a6e1ade343f99ceaa054b from the repo...
borgstore: load('index/9a9b3074616eca7dbf3d9df436c433ea774540fb4e2a6e1ade343f99ceaa054b', offset=0, size=None, deleted=False) -> 469B in 0.1ms
index/9a9b3074616eca7dbf3d9df436c433ea774540fb4e2a6e1ade343f99ceaa054b is valid.
cached chunk index 9a9b3074616eca7dbf3d9df436c433ea774540fb4e2a6e1ade343f99ceaa054b gets merged...
trying to load index/c7e9813bb14952fc80df7a61ccae310740248b45c665e54961fbb53aa0e849a6 from the repo...
borgstore: load('index/c7e9813bb14952fc80df7a61ccae310740248b45c665e54961fbb53aa0e849a6', offset=0, size=None, deleted=False) -> 469B in 0.1ms
index/c7e9813bb14952fc80df7a61ccae310740248b45c665e54961fbb53aa0e849a6 is valid.
cached chunk index c7e9813bb14952fc80df7a61ccae310740248b45c665e54961fbb53aa0e849a6 gets merged...
trying to load index/f070c6a51916ee6f68aba7cf2af6835dce1f21cd7d298c9768db3464d2728787 from the repo...
borgstore: load('index/f070c6a51916ee6f68aba7cf2af6835dce1f21cd7d298c9768db3464d2728787', offset=0, size=None, deleted=False) -> 469B in 0.1ms
index/f070c6a51916ee6f68aba7cf2af6835dce1f21cd7d298c9768db3464d2728787 is valid.
cached chunk index f070c6a51916ee6f68aba7cf2af6835dce1f21cd7d298c9768db3464d2728787 gets merged...
trying to load index/f7c384a63afe086bcfe913397d9d8b6e2b2feccee3119398abcaab92ba32e802 from the repo...
borgstore: load('index/f7c384a63afe086bcfe913397d9d8b6e2b2feccee3119398abcaab92ba32e802', offset=0, size=None, deleted=False) -> 389B in 0.1ms
index/f7c384a63afe086bcfe913397d9d8b6e2b2feccee3119398abcaab92ba32e802 is valid.
cached chunk index f7c384a63afe086bcfe913397d9d8b6e2b2feccee3119398abcaab92ba32e802 gets merged...
borgstore: load('packs/21e2d9e7df671acaa019cb79688cd3ea266c7eb4827eabc1812b95b582b6a57f', offset=0, size=469, deleted=False) -> 469B in 0.1ms
borgstore: load('packs/6c6287218a27b60fdb4f8c8a3c97c9ed35fff52d42a399f69cc3125b58b9f050', offset=7765, size=450, deleted=False) -> 450B in 0.1ms
borgstore: load('packs/3a526a9b04a3fe7c29b1f11aba0107e3a870fb75633b1ebb934f2d7daaccc4f0', offset=0, size=459, deleted=False) -> 459B in 0.1ms
borgstore: load('packs/855ce3bc7739605e3b81d18e60fcb6a624f7d1c51d4801d48794f9888e8a7103', offset=0, size=467, deleted=False) -> 467B in 0.1ms
borgstore: load('packs/aaddfbbc6a844a2940d45b22244a5eef3ad06454c72f4061d79454a1905edc5b', offset=0, size=460, deleted=False) -> 460B in 0.0ms
borgstore: load('packs/ae77013aa3c686eb9a720923da80a23c37ec9e3da4c21d106f2638dcb4a3f80c', offset=0, size=467, deleted=False) -> 467B in 0.0ms
writing item metadata stream chunk 2d401dadfe28e74e0d0b59b9fa1b3a15ba190ae78aa08f6241400f8306cf79cf
writing item_ptrs chunk a8cfe66a1e52c56b4f2c5fd2a4b17811d9e280b642b7dd6c98c0c9ea99a59ce9
borgstore: store('packs/514dbeb0adab4ff270ab8d939ad79c991a44887072d4f6ec2d170467bb7126f4') -> 459B in 0.4ms
borgstore: store('archives/d873778e2633f3883635de3b417beff3d2e05e68b83cd9ae57dccafba40c70e9') -> 0B in 0.2ms
borgstore: list_start('archives', deleted=False)
borgstore: list_end('archives', deleted=False) -> 7
borgstore: store('config/manifest') -> 370B in 0.3ms
security: saving state for 393ce96b709bf446b0e2e5fb2ceb084deabae57c0145aa64ad179cea4832dce1 to /home/rog_mr/snap/code/243/.local/share/borg/security/393ce96b709bf446b0e2e5fb2ceb084deabae57c0145aa64ad179cea4832dce1
security: current location /home/rog_mr/Desktop/joy/borg/op/repo
security: key type 2
security: manifest timestamp 2026-07-06T05:09:44.643580+00:00
Chunks index stats: del: 0
Chunks index stats: get: 51
Chunks index stats: iter: 1
Chunks index stats: linear: 60
Chunks index stats: lookup: 88
Chunks index stats: resize_kv: 0
Chunks index stats: resize_table: 0
Chunks index stats: set: 33
caching 1 chunks (incremental=True).
borgstore: list_start('index', deleted=False)
borgstore: list_end('index', deleted=False) -> 7
chunk indexes: ['1a049ec0a9a163ab714bee62291b059dede5eec140aacae84b1df88abba783f6', '4acd8bcd44be6162e5869fd30055807286dc3654fe5b6831ceba18589af577aa', '7863f8a9845a9093fc3df01080de7d3632d81f486b9fa391458090a0328fa4f4', '9a9b3074616eca7dbf3d9df436c433ea774540fb4e2a6e1ade343f99ceaa054b', 'c7e9813bb14952fc80df7a61ccae310740248b45c665e54961fbb53aa0e849a6', 'f070c6a51916ee6f68aba7cf2af6835dce1f21cd7d298c9768db3464d2728787', 'f7c384a63afe086bcfe913397d9d8b6e2b2feccee3119398abcaab92ba32e802']
storing chunks index as index/551e94e550b4b1b11c71cced2ebb2972c93a5e55230ecbe577496bed3be76d1c in repository...
borgstore: store('index/551e94e550b4b1b11c71cced2ebb2972c93a5e55230ecbe577496bed3be76d1c') -> 469B in 0.2ms
borgstore: list_start('locks', deleted=False)
borgstore: list_end('locks', deleted=False) -> 1
borgstore: load('locks/ab22b0129f86b739844cb91c47c5144cbd91458df82fc79bcb3d65aef33c4add', offset=0, size=None, deleted=False) -> 182B in 0.1ms
LOCK-RELEASE: releasing lock: {'exclusive': False, 'hostid': 'rog_mr-HP-ProBook-445-14-inch-G10-Notebook-PC@110289787484537', 'processid': 17300, 'threadid': 0, 'time': '2026-07-06T05:09:44.578+00:00', 'key': 'ab22b0129f86b739844cb91c47c5144cbd91458df82fc79bcb3d65aef33c4add', 'dt': datetime.datetime(2026, 7, 6, 5, 9, 44, 578000, tzinfo=datetime.timezone.utc)}.
LOCK-DELETE: deleting lock from store. key: ab22b0129f86b739844cb91c47c5144cbd91458df82fc79bcb3d65aef33c4add.
borgstore: delete('locks/ab22b0129f86b739844cb91c47c5144cbd91458df82fc79bcb3d65aef33c4add', deleted=False) -> 0B in 0.1ms
8. borg create --progress a8 (exit 0)
stderr:
0 B O 0 B U 0 N op/src
Saving files cache
Saving chunks cache
Saving cache config
9. borg create --progress --list a9 (exit 2)
stderr:
usage: __main__.py [--config CONFIG] [--print_config �[=flags]] [-V]
[--cockpit] [-h] [--critical] [--error] [--warning]
[--info] [--debug] [--debug-topic TOPIC] [-p] [--iec]
[--log-json] [--lock-wait SECONDS] [--show-version]
[--show-rc] [--umask M] [--remote-path PATH]
[--upload-ratelimit RATE] [--upload-buffer UPLOAD_BUFFER]
[--debug-profile FILE] [--rsh RSH] [-r REPO]
<command> ...
tip: For details of accepted options run: __main__.py --help
error: Options --progress and --list do not play nicely together.
10. borg create --json a10 (exit 0)
stdout:
{
"archive": {
"command_line": "/home/rog_mr/Desktop/joy/borg/src/borg/__main__.py create --json a10 op/src",
"duration": 0.046696,
"end": "2026-07-06T10:39:46.734145+05:30",
"id": "380dcaa6bfc3a0ced468e88d38ca25ba92bafd2513a8e5175f5a93a8a549d3bc",
"name": "a10",
"start": "2026-07-06T10:39:46.687449+05:30",
"stats": {
"chunking_time": 0.0004808249941561371,
"files_stats": {
"A": 4,
"d": 3
},
"hashing_time": 3.708199994889583e-05,
"nfiles": 4,
"original_size": 7198
},
"time": "2026-07-06T10:39:46.687449+05:30"
},
"cache": {
"path": "/home/rog_mr/.cache/borg/393ce96b709bf446b0e2e5fb2ceb084deabae57c0145aa64ad179cea4832dce1"
},
"encryption": {
"encryption": "none",
"id_hash": "sha256"
},
"repository": {
"id": "393ce96b709bf446b0e2e5fb2ceb084deabae57c0145aa64ad179cea4832dce1",
"last_modified": "2026-07-06T10:39:46.734771+05:30",
"location": "/home/rog_mr/Desktop/joy/borg/op/repo"
}
}
11. borg --log-json create --list a11 (exit 0)
stderr:
{"type": "file_status", "status": "A", "path": "op/src/dir1/file_b.bin"}
{"type": "file_status", "status": "A", "path": "op/src/dir1/file_d.bin"}
{"type": "file_status", "status": "d", "path": "op/src/dir1"}
{"type": "file_status", "status": "A", "path": "op/src/dir2/file_c.txt"}
{"type": "file_status", "status": "d", "path": "op/src/dir2"}
{"type": "file_status", "status": "A", "path": "op/src/file_a.bin"}
{"type": "file_status", "status": "d", "path": "op/src"}
12. borg create --list --filter=AME a12 (exit 0)
stderr:
A op/src/dir1/file_b.bin
A op/src/dir1/file_d.bin
A op/src/dir2/file_c.txt
A op/src/file_a.bin
13. borg create --list clean1 (2nd run, real 1.2s gap, file_c modified) (exit 0)
stderr:
U op/src/dir1/file_b.bin
U op/src/dir1/file_d.bin
d op/src/dir1
A op/src/dir2/file_c.txt
d op/src/dir2
U op/src/file_a.bin
U op/src/file_e_new.bin
d op/src
14. borg --warning create --list q1 (exit 0)
stderr:
A op/src/dir1/file_b.bin
A op/src/dir1/file_d.bin
d op/src/dir1
A op/src/dir2/file_c.txt
d op/src/dir2
A op/src/file_a.bin
A op/src/file_e_new.bin
d op/src
15. borg --error create --stats q2 (exit 0)
stderr:
Repository: /home/rog_mr/Desktop/joy/borg/op/repo
Archive name: q2
Archive fingerprint: 96288df07ad5f8fe04edfdd0ce421080939029367ce4dde2ec764b5834149912
Time (nominal): Mon, 2026-07-06 11:09:21 +0530
Time (start): Mon, 2026-07-06 11:09:21 +0530
Time (end): Mon, 2026-07-06 11:09:21 +0530
Duration: 0.051 seconds
Number of files: 5
Original size: 8.26 kB
Deduplicated size: 490 B
Time spent in hashing: 0.000 seconds
Time spent in chunking: 0.001 seconds
Added files: 5
Unchanged files: 0
Modified files: 0
Error files: 0
Files changed while reading: 0
Bytes read from remote: 0
Bytes sent to remote: 0
16. borg --critical create --list --stats q3 (exit 0)
stderr:
A op/src/dir1/file_b.bin
A op/src/dir1/file_d.bin
d op/src/dir1
A op/src/dir2/file_c.txt
d op/src/dir2
A op/src/file_a.bin
A op/src/file_e_new.bin
d op/src
Repository: /home/rog_mr/Desktop/joy/borg/op/repo
Archive name: q3
Archive fingerprint: 552a9d6ceced086c0fc4cf09f0429c2d179198ded82bc8404e612944ce4c9aca
Time (nominal): Mon, 2026-07-06 11:09:21 +0530
Time (start): Mon, 2026-07-06 11:09:21 +0530
Time (end): Mon, 2026-07-06 11:09:21 +0530
Duration: 0.037 seconds
Number of files: 5
Original size: 8.27 kB
Deduplicated size: 500 B
Time spent in hashing: 0.000 seconds
Time spent in chunking: 0.001 seconds
Added files: 5
Unchanged files: 0
Modified files: 0
Error files: 0
Files changed while reading: 0
Bytes read from remote: 0
Bytes sent to remote: 0
17. borg create --list q4 (exit 0)
stderr:
A op/src/dir1/file_b.bin
A op/src/dir1/file_d.bin
d op/src/dir1
A op/src/dir2/file_c.txt
d op/src/dir2
A op/src/file_a.bin
A op/src/file_e_new.bin
d op/src
Context
I ran
borg createthrough the various logging/verbosity flag combinations to see how the outputactually feels: is it clean, does it nest properly, is everything logged at the right level, and is it
saying too much or too little? Findings are up top; every command with its full output is pasted
verbatim at the bottom.
Environment
2.0.0b21.dev770+g15d55d48e(master @87bd65c05)python -m borgnone--jsonwrites to stdoutAnalysis
Concrete bugs
None. (An earlier draft flagged a
0x08byte in the--print_confighelp metavar — that turned out to be an intentional jsonargparse detail, not a borg issue. See Known / expected below.)Needs attention / for discussion (not fixing unilaterally)
createsays nothing at all: no stdout, no stderr, exit 0. Nothing to tell you an archive was even made.Creating archive at "<REPO PATH>"prints the repository path, never the archive name (a5/a6).--progressleaves a cryptic final line0 B O 0 B U 0 N op/src(reads unfinished), two stray blank lines, andSaving files cache / chunks cache / cache configmessages present only in progress mode.--jsonstatsblock leaves outdeduplicated_size(and compression) that text--statsprints.--listunder--log-jsonemits{"type": "file_status", …}objects with nolevelname.file_status).Looks good (no change needed)
--list(±--stats)ddir), no interleave with stats.--stats--info--verbose(they alias), plus the stats.--debug--progress --list--log-json --list--list --filter=AMEddir entries.U/A/dstatuses correct; stats report Added 1 / Unchanged 4.--list/--statshonoured at every level; ladder is monotonic (see below).Log-level ladder (monotonicity check)
--listand--statsgo through their own loggers (borg.output.list/borg.output.stats), whicharen't gated by the global log level. So if you ask for a list you get it, no matter how quiet you set
things. Raising verbosity only ever adds lines; it never drops or contradicts what a lower level showed.
--list/--statsstill shown?--critical/--error/--warning/ default--info/--verboseCreating archive at "<repo>"--debugKnown / expected (documented, not bugs)
--progress+--listrejectedarchiver/__init__.py:378M/Uneed a reused seriesAA(notM); files-cache safety window.archive.py:1427--dry-run+--statscreate_cmd.py:816-8170x08in--print_confighelpmetavar="\b[=flags]"), not from borg. It's a deliberate trick to erase the space argparse inserts, so a real terminal renders--print_config[=flags]correctly. Only visible when the output is piped/captured (e.g.cat -v). Nothing for borg to fix._actions.py:170Verdict table
create(baseline)create --listcreate --statscreate --list --stats--verbose create --list--info create --stats--debug createcreate --progresscreate --progress --listcreate --json--log-json create --listcreate --list --filter=AMEcreate --list(incremental, reused series)--warning create --list--error create --stats--critical create --list --statscreate --list(default level)Commands run & full outputs (verbatim)
1.
borg create a1(exit 0)2.
borg create --list a2(exit 0)stderr:
3.
borg create --stats a3(exit 0)stderr:
4.
borg create --list --stats a4(exit 0)stderr:
5.
borg --verbose create --list a5(exit 0)stderr:
6.
borg --info create --stats a6(exit 0)stderr:
7.
borg --debug create a7(exit 0)stderr:
8.
borg create --progress a8(exit 0)stderr:
9.
borg create --progress --list a9(exit 2)stderr:
10.
borg create --json a10(exit 0)stdout:
11.
borg --log-json create --list a11(exit 0)stderr:
12.
borg create --list --filter=AME a12(exit 0)stderr:
13.
borg create --list clean1 (2nd run, real 1.2s gap, file_c modified)(exit 0)stderr:
14.
borg --warning create --list q1(exit 0)stderr:
15.
borg --error create --stats q2(exit 0)stderr:
16.
borg --critical create --list --stats q3(exit 0)stderr:
17.
borg create --list q4(exit 0)stderr: