Files
wehub-resource-sync 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
chore: import upstream snapshot with attribution
2026-07-13 13:39:33 +08:00

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:

  1. Size-based rotation: When a log file reaches the size specified by --log-max-size, a new file is automatically created
  2. File naming: Rotated files are named in the format controller.log.2026-02-12T10-30-45.123
  3. Automatic compression: If --log-compress is enabled, old log files are compressed to .gz format
  4. 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

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

  1. 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
    
  2. Development environment:

    --zap-devel=true
    --enable-file-log=true
    --log-file-path=/tmp/controller-dev.log
    --log-compress=false
    
  3. Debugging issues:

    --zap-log-level=debug
    --enable-file-log=true
    --log-max-size=500
    --log-compress=false
    
  4. 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

  1. Check if the directory exists: ls -la /var/log/sandbox-controller/
  2. Check permissions: ls -ld /var/log/sandbox-controller/
  3. Verify the process has write permissions
  4. Check controller startup logs for errors

Log File Not Rotating

  1. Confirm --enable-file-log=true is set
  2. Check if the file size has reached the --log-max-size limit
  3. Verify the lumberjack library is correctly installed: go list -m gopkg.in/natefinch/lumberjack.v2

Excessive Disk Space Usage

  1. Reduce the value of --log-max-size
  2. Reduce the number of --log-max-backups
  3. Reduce the number of days in --log-max-age
  4. Ensure --log-compress=true is enabled