Environment Variables
Environment Variables
Configure ByteHide Logs entirely through environment variables for seamless deployment across Docker, Kubernetes, and cloud platforms.
Core Variables
PROJECT_TOKEN
Your ByteHide project token - first checked by the SDK:
export PROJECT_TOKEN="bh_your_token_here"export PROJECT_TOKEN="bh_your_token_here"Usage in Python:
import os
from bytehide_logs import Log
# Automatically loaded if set
token = os.getenv("PROJECT_TOKEN")
if token:
Log.set_project_token(token)import os
from bytehide_logs import Log
# Automatically loaded if set
token = os.getenv("PROJECT_TOKEN")
if token:
Log.set_project_token(token)BYTEHIDE_PROJECT_TOKEN
Alternative environment variable for project token:
export BYTEHIDE_PROJECT_TOKEN="bh_your_token_here"export BYTEHIDE_PROJECT_TOKEN="bh_your_token_here"The SDK checks variables in order:
PROJECT_TOKENBYTEHIDE_PROJECT_TOKEN
Logging Configuration
BYTEHIDE_CONSOLE_ENABLED
Enable console output:
export BYTEHIDE_CONSOLE_ENABLED=true
export BYTEHIDE_CONSOLE_ENABLED=falseexport BYTEHIDE_CONSOLE_ENABLED=true
export BYTEHIDE_CONSOLE_ENABLED=falseBYTEHIDE_LOG_LEVEL
Set minimum log level (TRACE, DEBUG, INFO, WARN, ERROR, CRITICAL):
export BYTEHIDE_LOG_LEVEL=INFO
export BYTEHIDE_LOG_LEVEL=DEBUG
export BYTEHIDE_LOG_LEVEL=WARNexport BYTEHIDE_LOG_LEVEL=INFO
export BYTEHIDE_LOG_LEVEL=DEBUG
export BYTEHIDE_LOG_LEVEL=WARNBYTEHIDE_FILE_PATH
Path to log file:
export BYTEHIDE_FILE_PATH=/var/log/myapp/app.log
export BYTEHIDE_FILE_PATH=./logs/app.logexport BYTEHIDE_FILE_PATH=/var/log/myapp/app.log
export BYTEHIDE_FILE_PATH=./logs/app.logBYTEHIDE_PERSIST
Enable file persistence:
export BYTEHIDE_PERSIST=true
export BYTEHIDE_PERSIST=falseexport BYTEHIDE_PERSIST=true
export BYTEHIDE_PERSIST=falseBYTEHIDE_ROLLING_INTERVAL
Log file rotation interval (MINUTE, HOUR, DAY, WEEK, MONTH, YEAR):
export BYTEHIDE_ROLLING_INTERVAL=DAY
export BYTEHIDE_ROLLING_INTERVAL=HOURexport BYTEHIDE_ROLLING_INTERVAL=DAY
export BYTEHIDE_ROLLING_INTERVAL=HOURBYTEHIDE_FILE_SIZE_LIMIT
Maximum file size in bytes before rotation:
# 10MB
export BYTEHIDE_FILE_SIZE_LIMIT=10485760
# 50MB
export BYTEHIDE_FILE_SIZE_LIMIT=52428800
# 100MB
export BYTEHIDE_FILE_SIZE_LIMIT=104857600# 10MB
export BYTEHIDE_FILE_SIZE_LIMIT=10485760
# 50MB
export BYTEHIDE_FILE_SIZE_LIMIT=52428800
# 100MB
export BYTEHIDE_FILE_SIZE_LIMIT=104857600BYTEHIDE_ROLL_ON_SIZE
Enable size-based rotation:
export BYTEHIDE_ROLL_ON_SIZE=true
export BYTEHIDE_ROLL_ON_SIZE=falseexport BYTEHIDE_ROLL_ON_SIZE=true
export BYTEHIDE_ROLL_ON_SIZE=falseBYTEHIDE_INCLUDE_CALLER_INFO
Include filename and line number in logs:
export BYTEHIDE_INCLUDE_CALLER_INFO=trueexport BYTEHIDE_INCLUDE_CALLER_INFO=trueBYTEHIDE_SENSITIVE_DATA
Comma-separated list of keywords to mask:
export BYTEHIDE_SENSITIVE_DATA="password,token,api_key,secret"export BYTEHIDE_SENSITIVE_DATA="password,token,api_key,secret"Docker Configuration
Basic Docker Usage
FROM python:3.9
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
ENV PROJECT_TOKEN=bh_your_token
CMD ["python", "app.py"]FROM python:3.9
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
ENV PROJECT_TOKEN=bh_your_token
CMD ["python", "app.py"]Build and run:
docker build -t myapp .
docker run -e PROJECT_TOKEN="bh_token" myappdocker build -t myapp .
docker run -e PROJECT_TOKEN="bh_token" myappDocker Compose
version: '3.8'
services:
app:
build: .
environment:
- PROJECT_TOKEN=${PROJECT_TOKEN}
- BYTEHIDE_CONSOLE_ENABLED=true
- BYTEHIDE_LOG_LEVEL=INFO
- BYTEHIDE_PERSIST=true
- BYTEHIDE_FILE_PATH=/var/log/myapp/app.log
volumes:
- ./logs:/var/log/myappversion: '3.8'
services:
app:
build: .
environment:
- PROJECT_TOKEN=${PROJECT_TOKEN}
- BYTEHIDE_CONSOLE_ENABLED=true
- BYTEHIDE_LOG_LEVEL=INFO
- BYTEHIDE_PERSIST=true
- BYTEHIDE_FILE_PATH=/var/log/myapp/app.log
volumes:
- ./logs:/var/log/myappRun with:
PROJECT_TOKEN="bh_token" docker-compose upPROJECT_TOKEN="bh_token" docker-compose upDocker with .env File
Create .env file:
PROJECT_TOKEN=bh_your_token
BYTEHIDE_CONSOLE_ENABLED=true
BYTEHIDE_LOG_LEVEL=DEBUG
BYTEHIDE_PERSIST=true
BYTEHIDE_FILE_PATH=/var/log/myapp/app.logPROJECT_TOKEN=bh_your_token
BYTEHIDE_CONSOLE_ENABLED=true
BYTEHIDE_LOG_LEVEL=DEBUG
BYTEHIDE_PERSIST=true
BYTEHIDE_FILE_PATH=/var/log/myapp/app.logDocker Compose will automatically load it:
docker-compose updocker-compose upKubernetes Configuration
Basic Deployment with Env Vars
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:latest
env:
- name: PROJECT_TOKEN
value: "bh_your_token"
- name: BYTEHIDE_CONSOLE_ENABLED
value: "true"
- name: BYTEHIDE_LOG_LEVEL
value: "INFO"
- name: BYTEHIDE_PERSIST
value: "true"
- name: BYTEHIDE_FILE_PATH
value: "/var/log/myapp/app.log"apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:latest
env:
- name: PROJECT_TOKEN
value: "bh_your_token"
- name: BYTEHIDE_CONSOLE_ENABLED
value: "true"
- name: BYTEHIDE_LOG_LEVEL
value: "INFO"
- name: BYTEHIDE_PERSIST
value: "true"
- name: BYTEHIDE_FILE_PATH
value: "/var/log/myapp/app.log"Using Kubernetes Secrets
Create secret:
kubectl create secret generic bytehide-secret --from-literal=project-token=bh_your_tokenkubectl create secret generic bytehide-secret --from-literal=project-token=bh_your_tokenReference in deployment:
env:
- name: PROJECT_TOKEN
valueFrom:
secretKeyRef:
name: bytehide-secret
key: project-tokenenv:
- name: PROJECT_TOKEN
valueFrom:
secretKeyRef:
name: bytehide-secret
key: project-tokenConfigMap for Settings
Create ConfigMap:
apiVersion: v1
kind: ConfigMap
metadata:
name: bytehide-config
data:
BYTEHIDE_CONSOLE_ENABLED: "true"
BYTEHIDE_LOG_LEVEL: "INFO"
BYTEHIDE_PERSIST: "true"
BYTEHIDE_ROLLING_INTERVAL: "DAY"apiVersion: v1
kind: ConfigMap
metadata:
name: bytehide-config
data:
BYTEHIDE_CONSOLE_ENABLED: "true"
BYTEHIDE_LOG_LEVEL: "INFO"
BYTEHIDE_PERSIST: "true"
BYTEHIDE_ROLLING_INTERVAL: "DAY"Use in Deployment:
envFrom:
- configMapRef:
name: bytehide-config
env:
- name: PROJECT_TOKEN
valueFrom:
secretKeyRef:
name: bytehide-secret
key: project-tokenenvFrom:
- configMapRef:
name: bytehide-config
env:
- name: PROJECT_TOKEN
valueFrom:
secretKeyRef:
name: bytehide-secret
key: project-tokenCloud Platform Configuration
AWS Lambda
import os
from bytehide_logs import Log, LogSettings, LogLevel
def lambda_handler(event, context):
# Load configuration from environment
token = os.getenv("PROJECT_TOKEN")
console = os.getenv("BYTEHIDE_CONSOLE_ENABLED", "true") == "true"
level = os.getenv("BYTEHIDE_LOG_LEVEL", "INFO")
Log.set_project_token(token)
Log.initialize(LogSettings(
console_enabled=console,
minimum_level=LogLevel[level]
))
Log.info("Lambda function invoked")
return {"statusCode": 200}import os
from bytehide_logs import Log, LogSettings, LogLevel
def lambda_handler(event, context):
# Load configuration from environment
token = os.getenv("PROJECT_TOKEN")
console = os.getenv("BYTEHIDE_CONSOLE_ENABLED", "true") == "true"
level = os.getenv("BYTEHIDE_LOG_LEVEL", "INFO")
Log.set_project_token(token)
Log.initialize(LogSettings(
console_enabled=console,
minimum_level=LogLevel[level]
))
Log.info("Lambda function invoked")
return {"statusCode": 200}Google Cloud Run
gcloud run deploy myapp \
--set-env-vars PROJECT_TOKEN=bh_your_token \
--set-env-vars BYTEHIDE_CONSOLE_ENABLED=true \
--set-env-vars BYTEHIDE_LOG_LEVEL=INFOgcloud run deploy myapp \
--set-env-vars PROJECT_TOKEN=bh_your_token \
--set-env-vars BYTEHIDE_CONSOLE_ENABLED=true \
--set-env-vars BYTEHIDE_LOG_LEVEL=INFOAzure Container Instances
az container create \
--resource-group mygroup \
--name myapp \
--image myapp:latest \
--environment-variables PROJECT_TOKEN=bh_token BYTEHIDE_CONSOLE_ENABLED=trueaz container create \
--resource-group mygroup \
--name myapp \
--image myapp:latest \
--environment-variables PROJECT_TOKEN=bh_token BYTEHIDE_CONSOLE_ENABLED=trueLocal Development Setup
Using .env File
Create .env:
PROJECT_TOKEN=bh_dev_token
BYTEHIDE_CONSOLE_ENABLED=true
BYTEHIDE_LOG_LEVEL=DEBUG
BYTEHIDE_PERSIST=true
BYTEHIDE_FILE_PATH=./logs/app.log
BYTEHIDE_INCLUDE_CALLER_INFO=truePROJECT_TOKEN=bh_dev_token
BYTEHIDE_CONSOLE_ENABLED=true
BYTEHIDE_LOG_LEVEL=DEBUG
BYTEHIDE_PERSIST=true
BYTEHIDE_FILE_PATH=./logs/app.log
BYTEHIDE_INCLUDE_CALLER_INFO=trueLoad in your application:
import os
from dotenv import load_dotenv
load_dotenv() # Load from .env
from bytehide_logs import Log, LogSettings, LogLevel
# Configuration automatically loaded
Log.set_project_token(os.getenv("PROJECT_TOKEN"))
console = os.getenv("BYTEHIDE_CONSOLE_ENABLED", "true") == "true"
level = os.getenv("BYTEHIDE_LOG_LEVEL", "INFO")
Log.initialize(LogSettings(
console_enabled=console,
minimum_level=LogLevel[level]
))import os
from dotenv import load_dotenv
load_dotenv() # Load from .env
from bytehide_logs import Log, LogSettings, LogLevel
# Configuration automatically loaded
Log.set_project_token(os.getenv("PROJECT_TOKEN"))
console = os.getenv("BYTEHIDE_CONSOLE_ENABLED", "true") == "true"
level = os.getenv("BYTEHIDE_LOG_LEVEL", "INFO")
Log.initialize(LogSettings(
console_enabled=console,
minimum_level=LogLevel[level]
))Environment-Based Configuration
Development
export ENV=development
export PROJECT_TOKEN=bh_dev_token
export BYTEHIDE_CONSOLE_ENABLED=true
export BYTEHIDE_LOG_LEVEL=DEBUG
export BYTEHIDE_PERSIST=true
export BYTEHIDE_INCLUDE_CALLER_INFO=trueexport ENV=development
export PROJECT_TOKEN=bh_dev_token
export BYTEHIDE_CONSOLE_ENABLED=true
export BYTEHIDE_LOG_LEVEL=DEBUG
export BYTEHIDE_PERSIST=true
export BYTEHIDE_INCLUDE_CALLER_INFO=trueStaging
export ENV=staging
export PROJECT_TOKEN=bh_staging_token
export BYTEHIDE_CONSOLE_ENABLED=true
export BYTEHIDE_LOG_LEVEL=INFO
export BYTEHIDE_PERSIST=true
export BYTEHIDE_FILE_PATH=/var/log/myapp/app.logexport ENV=staging
export PROJECT_TOKEN=bh_staging_token
export BYTEHIDE_CONSOLE_ENABLED=true
export BYTEHIDE_LOG_LEVEL=INFO
export BYTEHIDE_PERSIST=true
export BYTEHIDE_FILE_PATH=/var/log/myapp/app.logProduction
export ENV=production
export PROJECT_TOKEN=bh_prod_token
export BYTEHIDE_CONSOLE_ENABLED=false
export BYTEHIDE_LOG_LEVEL=WARN
export BYTEHIDE_PERSIST=true
export BYTEHIDE_FILE_PATH=/var/log/myapp/app.log
export BYTEHIDE_ROLLING_INTERVAL=DAY
export BYTEHIDE_ROLL_ON_SIZE=true
export BYTEHIDE_FILE_SIZE_LIMIT=52428800
export BYTEHIDE_SENSITIVE_DATA="password,token,api_key,secret"export ENV=production
export PROJECT_TOKEN=bh_prod_token
export BYTEHIDE_CONSOLE_ENABLED=false
export BYTEHIDE_LOG_LEVEL=WARN
export BYTEHIDE_PERSIST=true
export BYTEHIDE_FILE_PATH=/var/log/myapp/app.log
export BYTEHIDE_ROLLING_INTERVAL=DAY
export BYTEHIDE_ROLL_ON_SIZE=true
export BYTEHIDE_FILE_SIZE_LIMIT=52428800
export BYTEHIDE_SENSITIVE_DATA="password,token,api_key,secret"Python Helper for Env Config
import os
from bytehide_logs import Log, LogSettings, LogLevel, RollingInterval
def setup_from_env():
"""Initialize ByteHide Logs from environment variables"""
# Token
token = os.getenv("PROJECT_TOKEN") or os.getenv("BYTEHIDE_PROJECT_TOKEN")
if not token:
raise ValueError("PROJECT_TOKEN not set")
Log.set_project_token(token)
# Convert string env vars to appropriate types
console = os.getenv("BYTEHIDE_CONSOLE_ENABLED", "true").lower() == "true"
persist = os.getenv("BYTEHIDE_PERSIST", "false").lower() == "true"
caller_info = os.getenv("BYTEHIDE_INCLUDE_CALLER_INFO", "false").lower() == "true"
roll_on_size = os.getenv("BYTEHIDE_ROLL_ON_SIZE", "false").lower() == "true"
level_str = os.getenv("BYTEHIDE_LOG_LEVEL", "INFO")
minimum_level = LogLevel[level_str]
interval_str = os.getenv("BYTEHIDE_ROLLING_INTERVAL", "DAY")
rolling_interval = RollingInterval[interval_str]
file_size = int(os.getenv("BYTEHIDE_FILE_SIZE_LIMIT", "104857600"))
mask_str = os.getenv("BYTEHIDE_SENSITIVE_DATA", "")
mask_list = [m.strip() for m in mask_str.split(",") if m.strip()]
settings = LogSettings(
console_enabled=console,
minimum_level=minimum_level,
include_caller_info=caller_info,
persist=persist,
file_path=os.getenv("BYTEHIDE_FILE_PATH"),
rolling_interval=rolling_interval,
roll_on_file_size_limit=roll_on_size,
file_size_limit_bytes=file_size,
mask_sensitive_data=mask_list
)
Log.initialize(settings)
if __name__ == "__main__":
setup_from_env()
Log.info("Logging configured from environment")import os
from bytehide_logs import Log, LogSettings, LogLevel, RollingInterval
def setup_from_env():
"""Initialize ByteHide Logs from environment variables"""
# Token
token = os.getenv("PROJECT_TOKEN") or os.getenv("BYTEHIDE_PROJECT_TOKEN")
if not token:
raise ValueError("PROJECT_TOKEN not set")
Log.set_project_token(token)
# Convert string env vars to appropriate types
console = os.getenv("BYTEHIDE_CONSOLE_ENABLED", "true").lower() == "true"
persist = os.getenv("BYTEHIDE_PERSIST", "false").lower() == "true"
caller_info = os.getenv("BYTEHIDE_INCLUDE_CALLER_INFO", "false").lower() == "true"
roll_on_size = os.getenv("BYTEHIDE_ROLL_ON_SIZE", "false").lower() == "true"
level_str = os.getenv("BYTEHIDE_LOG_LEVEL", "INFO")
minimum_level = LogLevel[level_str]
interval_str = os.getenv("BYTEHIDE_ROLLING_INTERVAL", "DAY")
rolling_interval = RollingInterval[interval_str]
file_size = int(os.getenv("BYTEHIDE_FILE_SIZE_LIMIT", "104857600"))
mask_str = os.getenv("BYTEHIDE_SENSITIVE_DATA", "")
mask_list = [m.strip() for m in mask_str.split(",") if m.strip()]
settings = LogSettings(
console_enabled=console,
minimum_level=minimum_level,
include_caller_info=caller_info,
persist=persist,
file_path=os.getenv("BYTEHIDE_FILE_PATH"),
rolling_interval=rolling_interval,
roll_on_file_size_limit=roll_on_size,
file_size_limit_bytes=file_size,
mask_sensitive_data=mask_list
)
Log.initialize(settings)
if __name__ == "__main__":
setup_from_env()
Log.info("Logging configured from environment")Verifying Environment Variables
# Check if variables are set
echo $PROJECT_TOKEN
echo $BYTEHIDE_CONSOLE_ENABLED
echo $BYTEHIDE_LOG_LEVEL
# In Python
import os
print(f"PROJECT_TOKEN: {os.getenv('PROJECT_TOKEN')}")
print(f"BYTEHIDE_CONSOLE_ENABLED: {os.getenv('BYTEHIDE_CONSOLE_ENABLED')}")# Check if variables are set
echo $PROJECT_TOKEN
echo $BYTEHIDE_CONSOLE_ENABLED
echo $BYTEHIDE_LOG_LEVEL
# In Python
import os
print(f"PROJECT_TOKEN: {os.getenv('PROJECT_TOKEN')}")
print(f"BYTEHIDE_CONSOLE_ENABLED: {os.getenv('BYTEHIDE_CONSOLE_ENABLED')}")Troubleshooting
Variables Not Being Read
Ensure variables are exported:
# Not set
BYTEHIDE_CONSOLE_ENABLED=true python app.py
# Properly exported
export BYTEHIDE_CONSOLE_ENABLED=true
python app.py# Not set
BYTEHIDE_CONSOLE_ENABLED=true python app.py
# Properly exported
export BYTEHIDE_CONSOLE_ENABLED=true
python app.pyCase Sensitivity
Environment variable names are case-sensitive. Use uppercase:
# Correct
export BYTEHIDE_LOG_LEVEL=INFO
# Incorrect - won't work
export bytehide_log_level=INFO# Correct
export BYTEHIDE_LOG_LEVEL=INFO
# Incorrect - won't work
export bytehide_log_level=INFONext Steps
- Quick Start - Initialize logging
- Project Token - Token management
- Configuration - All configuration options