e0e362d700
SDK Tests / changes (push) Successful in 2m29s
Real E2E Tests / changes (push) Successful in 2m29s
Deploy Docs Pages / build (push) Has been cancelled
Deploy Docs Pages / deploy (push) Has been cancelled
Real E2E Tests / JavaScript E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Python E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Java E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / C# E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Go E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Real E2E CI (push) Has been cancelled
SDK Tests / SDK CI (push) Has been cancelled
SDK Tests / CLI Tests (push) Has been cancelled
SDK Tests / Python SDK Quality (code-interpreter) (push) Has been cancelled
SDK Tests / Python SDK Quality (sandbox) (push) Has been cancelled
SDK Tests / Python SDK Tests (code-interpreter) (push) Has been cancelled
SDK Tests / JavaScript SDK Quality And Tests (code-interpreter) (push) Has been cancelled
SDK Tests / JavaScript SDK Quality And Tests (sandbox) (push) Has been cancelled
SDK Tests / Python SDK Tests (sandbox) (push) Has been cancelled
SDK Tests / CLI Quality (push) Has been cancelled
SDK Tests / Kotlin SDK Quality And Tests (sandbox) (push) Has been cancelled
SDK Tests / Kotlin SDK Quality And Tests (code-interpreter) (push) Has been cancelled
SDK Tests / C# SDK Quality And Tests (code-interpreter) (push) Has been cancelled
SDK Tests / C# SDK Quality And Tests (sandbox) (push) Has been cancelled
SDK Tests / Go SDK Quality And Tests (push) Has been cancelled
7.1 KiB
7.1 KiB
Logging Configuration
Features
The OpenSandbox Kubernetes Controller supports flexible logging configuration, including:
- Console log output (enabled by default)
- File log output (optional)
- Automatic log rotation (by file size)
- Automatic compression of old logs (gzip)
- Automatic cleanup of expired logs (by age or count)
- All standard zap options (log level, format, etc.)
Command-Line Flags
Log File Flags
| Flag | Type | Default | Description |
|---|---|---|---|
--enable-file-log |
bool | false | Enable log output to file |
--log-file-path |
string | /var/log/sandbox-controller/controller.log |
Log file path |
--log-max-size |
int | 100 | Maximum size of a single log file in MB; rotates when exceeded |
--log-max-backups |
int | 10 | Maximum number of old log files to retain |
--log-max-age |
int | 30 | Maximum number of days to retain old log files |
--log-compress |
bool | true | Compress rotated log files (gzip) |
Standard zap Flags (inherited from controller-runtime)
| Flag | Description |
|---|---|
--zap-devel |
Enable development mode (colorized output, more verbose stack traces) |
--zap-encoder |
Log encoding format: json or console |
--zap-log-level |
Log level: debug, info, error, etc. |
--zap-stacktrace-level |
Minimum log level at which stack traces are printed |
--zap-time-encoding |
Time encoding format: iso8601, millis, nano, etc. |
Usage Examples
1. Console Output Only (Default)
./controller
2. Output to Both Console and File
./controller \
--enable-file-log=true \
--log-file-path=/var/log/sandbox-controller/controller.log
3. Custom Log Rotation Configuration
./controller \
--enable-file-log=true \
--log-file-path=/var/log/sandbox-controller/controller.log \
--log-max-size=50 \
--log-max-backups=5 \
--log-max-age=7 \
--log-compress=true
This configuration:
- Each log file can be up to 50MB
- Retain at most 5 old log files
- Retain log files for at most 7 days
- Compress old log files
4. Development Mode + File Output
./controller \
--zap-devel=true \
--enable-file-log=true \
--log-file-path=/tmp/controller-dev.log
5. JSON Format + File Output
./controller \
--zap-encoder=json \
--enable-file-log=true \
--log-file-path=/var/log/sandbox-controller/controller.log
6. Debug Level + File Output
./controller \
--zap-log-level=debug \
--enable-file-log=true \
--log-file-path=/var/log/sandbox-controller/debug.log
Kubernetes Deployment Configuration
When deploying in Kubernetes, configure logging options via the Deployment's args:
apiVersion: apps/v1
kind: Deployment
metadata:
name: sandbox-controller
spec:
template:
spec:
containers:
- name: controller
image: sandbox-controller:latest
args:
- --enable-file-log=true
- --log-file-path=/var/log/controller/controller.log
- --log-max-size=100
- --log-max-backups=10
- --log-max-age=30
- --log-compress=true
- --zap-encoder=json
volumeMounts:
- name: log-volume
mountPath: /var/log/controller
volumes:
- name: log-volume
emptyDir: {}
# Or use a PersistentVolumeClaim
# persistentVolumeClaim:
# claimName: controller-logs
Log File Format
Development Mode (--zap-devel=true)
2026-02-12T10:30:45.123+0800 INFO setup starting manager
2026-02-12T10:30:45.456+0800 INFO controller Reconciling {"namespace": "default", "name": "example"}
Production Mode (JSON)
{"level":"info","ts":"2026-02-12T10:30:45.123+0800","logger":"setup","msg":"starting manager"}
{"level":"info","ts":"2026-02-12T10:30:45.456+0800","logger":"controller","msg":"Reconciling","namespace":"default","name":"example"}
Log Rotation Mechanism
Log rotation is implemented by lumberjack and supports:
- Size-based rotation: When a log file reaches the size specified by
--log-max-size, a new file is automatically created - File naming: Rotated files are named in the format
controller.log.2026-02-12T10-30-45.123 - Automatic compression: If
--log-compressis enabled, old log files are compressed to.gzformat - Automatic cleanup:
- Retain the most recent N files based on
--log-max-backups - Delete files older than the specified number of days based on
--log-max-age
- Retain the most recent N files based on
Directory Permissions
Ensure the log directory exists and has write permissions:
# Create the log directory
mkdir -p /var/log/sandbox-controller
# Set permissions (adjust based on the actual runtime user)
chown controller:controller /var/log/sandbox-controller
chmod 755 /var/log/sandbox-controller
In Kubernetes, you can use an initContainer or securityContext to ensure correct permissions:
spec:
initContainers:
- name: setup-log-dir
image: busybox
command: ['sh', '-c', 'mkdir -p /var/log/controller && chmod 755 /var/log/controller']
volumeMounts:
- name: log-volume
mountPath: /var/log/controller
containers:
- name: controller
securityContext:
runAsUser: 1000
runAsGroup: 1000
Monitoring and Viewing Logs
View Current Logs
tail -f /var/log/sandbox-controller/controller.log
View Compressed Logs
zcat /var/log/sandbox-controller/controller.log.2026-02-12T10-30-45.123.gz | less
Search Logs
# Search for error logs
grep -i error /var/log/sandbox-controller/controller.log
# Search across all log files (including compressed)
zgrep -i error /var/log/sandbox-controller/*.log*
Best Practices
-
Production environment:
--enable-file-log=true --log-file-path=/var/log/sandbox-controller/controller.log --log-max-size=100 --log-max-backups=10 --log-max-age=30 --log-compress=true --zap-encoder=json -
Development environment:
--zap-devel=true --enable-file-log=true --log-file-path=/tmp/controller-dev.log --log-compress=false -
Debugging issues:
--zap-log-level=debug --enable-file-log=true --log-max-size=500 --log-compress=false -
Limited disk space:
--enable-file-log=true --log-max-size=50 --log-max-backups=3 --log-max-age=7 --log-compress=true
Troubleshooting
Log File Not Created
- Check if the directory exists:
ls -la /var/log/sandbox-controller/ - Check permissions:
ls -ld /var/log/sandbox-controller/ - Verify the process has write permissions
- Check controller startup logs for errors
Log File Not Rotating
- Confirm
--enable-file-log=trueis set - Check if the file size has reached the
--log-max-sizelimit - Verify the lumberjack library is correctly installed:
go list -m gopkg.in/natefinch/lumberjack.v2
Excessive Disk Space Usage
- Reduce the value of
--log-max-size - Reduce the number of
--log-max-backups - Reduce the number of days in
--log-max-age - Ensure
--log-compress=trueis enabled