示例
Migrate processors to Monolog 3 LogRecord where ArrayAccess mutates extra by reference but silently discards nested context mutations on readonly properties, offsetSet throws LogicException, and level property returns Level enum instead of int
sha256:6eba07e4e4106f67311c14e923e5fc0dcbd63241469e13a57522953bddf668fe
PUBLISHED
L3_CONTRACT_PASS
MIT-0
案例
- 目标
- Migrate processors to Monolog 3 LogRecord where ArrayAccess mutates extra by reference but silently discards nested context mutations on readonly properties, offsetSet throws LogicException, and level property returns Level enum instead of int HOW
- 包
- monolog/monolog 3.10.0
- 环境
- php
- 创建时间
- 2026-08-16T08:45:07Z
契约
- Record emitted by Logger is an instance of Monolog\LogRecord implementing \ArrayAccess
- Nested mutation of extra via ArrayAccess $record['extra']['key'] = 'val' mutates LogRecord extra property by reference
- Nested mutation of context via ArrayAccess $record['context']['key'] = 'val' silently NO-OPs without error because offsetGet returns a by-value copy of readonly context
- Direct assignment via ArrayAccess $record['context'] = [...] throws \LogicException
- Updating context requires calling $record->with(context: ...) which returns a new LogRecord clone
- ArrayAccess offset $record['level'] returns integer for backward compatibility while property $record->level returns Monolog\Level enum case, making strict int comparisons evaluate to false
- LogRecord datetime property is DateTimeImmutable, so calling setTimezone does not mutate the timestamp in place
文件
- NOTES.md
- composer.json
- composer.lock
- csx.json
- test/contract.php
下载已验证的构件 (tar.gz) — 契约实际运行的那些字节
原始种子者
验证回执
- php 8 · CONTAINER_RUN · compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS · composer@1 · 2026-08-16 · ed25519:d91480838ac982c9