Skip to content

Commit

Permalink
Merge pull request #77 from performant-software/feature/iiif76_image_…
Browse files Browse the repository at this point in the history
…processors

IIIF #76 - Image Processors
dleadbetter authored Jan 15, 2025
2 parents 7ae3395 + a7fb7d0 commit 68f188f
Showing 1 changed file with 756 additions and 0 deletions.
756 changes: 756 additions & 0 deletions lib/iiif/cantaloupe.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,756 @@
###########################################################################
# Sample Cantaloupe configuration file
#
# Copy this file to `cantaloupe.properties` and edit as desired.
#
# Keys may change from version to version. See the "Upgrading" section of
# the website.
#
# Most changes will take effect without restarting. Those that won't are
# marked with "!!".
###########################################################################

# !! Leave blank to use the JVM default temporary directory.
temp_pathname =

# !! Configures the HTTP server. (Standalone mode only.)
http.enabled = true
http.host = 0.0.0.0
http.port = 8182

# !! Configures the HTTPS server. (Standalone mode only.)
https.enabled = false
https.host = 0.0.0.0
https.port = 8183

# !! Available values are `JKS` and `PKCS12`. (Standalone mode only.)
https.key_store_type = PKCS12
https.key_store_password = password
https.key_store_path = /root/cantaloupe.p12
https.key_password = password

# !! Constrains the size of the web server's thread pool. Leave blank to
# use the defaults.
http.min_threads =
http.max_threads =

# !! Maximum size of the request queue. Leave blank to use the default.
http.accept_queue_limit =

# Base URI to use for internal links, such as Link headers and JSON-LD
# @id values, in a reverse-proxy context. This should only be used when
# X-Forwarded-* headers cannot be used instead. (See the user manual.)
base_uri =

# Normally, slashes in a URI path component must be percent-encoded as
# "%2F". If your proxy is not able to pass these through without decoding,
# you can define an alternate character or character sequence to substitute
# for a slash. Supply the non-percent-encoded version here, and use the
# percent-encoded version in URLs.
slash_substitute =

# Maximum number of pixels to return in a response, to prevent overloading
# the server. Requests for more pixels than this will receive an error
# response. Set to 0 for no maximum.
max_pixels = 10000000

# Maximum scale to allow (1.0 = full scale; 0 = no maximum).
max_scale = 0

# A meta-identifier is a superset of an identifier that includes other
# information like a page number and/or scale constraint. A meta-identifier
# transformer transforms a meta-identifier to and from a string in a URI
# path component.
# Available transformers include `StandardMetaIdentifierTransformer` and
# `DelegateMetaIdentifierTransformer`. See the user manual for more
# information about meta-identifiers and these options.
meta_identifier.transformer = StandardMetaIdentifierTransformer

# Character sequence that separates the components of a meta-identifier in
# the identifier portion of a URI.
meta_identifier.transformer.StandardMetaIdentifierTransformer.delimiter = ;

# If true, HTTP >= 400-level responses are logged at WARN and ERROR level.
# This may result in multiple log statements for the same error, but it may
# also help diagnose errors that have evaded logging.
log_error_responses = false

print_stack_trace_on_error_pages = false

###########################################################################
# DELEGATE SCRIPT
###########################################################################

# Enables the delegate script: a Ruby script containing various delegate
# methods. (See the user manual.)
delegate_script.enabled = true

# !! This can be an absolute path, or a filename; if only a filename is
# specified, it will be searched for in the same folder as this file, and
# then the current working directory.
delegate_script.pathname = delegates.rb

###########################################################################
# ENDPOINTS
###########################################################################

# Enables the IIIF Image API 1.x endpoint, at /iiif/1.
endpoint.iiif.1.enabled = false

# Enables the IIIF Image API 2.x endpoint, at /iiif/2.
endpoint.iiif.2.enabled = true

# Enables the IIIF Image API 3.x endpoint, at /iiif/3.
endpoint.iiif.3.enabled = true

# Minimum size that will be used in info.json `sizes` keys.
endpoint.iiif.min_size = 64

# Minimum size that will be used in info.json `tiles` keys. The user manual
# explains how these are calculated.
endpoint.iiif.min_tile_size = 512

# If true, requests for sizes other than those contained in an information
# response will be denied.
endpoint.iiif.restrict_to_sizes = false

# Enables the Control Panel, at /admin.
endpoint.admin.enabled = true
endpoint.admin.username = admin
endpoint.admin.secret = password

# Enables the administrative HTTP API. (See the user manual.)
endpoint.api.enabled = true

# HTTP Basic credentials to access the HTTP API.
endpoint.api.username = admin
endpoint.api.secret = password

# If true, sources and caches will be checked, resulting in a more robust
# but slower health check. Set this to false if these services already have
# their own health checks.
endpoint.health.dependency_check = false

###########################################################################
# SOURCES
###########################################################################

# Uses one source for all requests. Available values are `FilesystemSource`,
# `HttpSource`, `JdbcSource`, `S3Source`, and `AzureStorageSource`.
source.static = S3Source

# If true, `source.static` will be overridden, and the `source()` delegate
# method will be used to select a source per-request.
source.delegate = false

#----------------------------------------
# FilesystemSource
#----------------------------------------

# How to look up files. Allowed values are `BasicLookupStrategy` and
# `ScriptLookupStrategy`. ScriptLookupStrategy uses the delegate script for
# dynamic lookups; see the user manual.
FilesystemSource.lookup_strategy = BasicLookupStrategy

# Server-side path that will be prefixed to the identifier in the URL.
# Trailing slash is important!
FilesystemSource.BasicLookupStrategy.path_prefix = /root/images/

# Server-side path or extension that will be suffixed to the identifier in
# the URL.
FilesystemSource.BasicLookupStrategy.path_suffix =

#----------------------------------------
# HttpSource
#----------------------------------------

# Trusts insecure certificates and cipher suites.
HttpSource.allow_insecure = false

# Request timeout in seconds.
HttpSource.request_timeout =

# Tells HttpSource how to look up resources. Allowed values are
# `BasicLookupStrategy` and `ScriptLookupStrategy`. ScriptLookupStrategy
# uses a delegate method for dynamic lookups; see the user manual.
HttpSource.lookup_strategy = BasicLookupStrategy

# URL that will be prefixed to the identifier in the request URL.
# Trailing slash is important!
HttpSource.BasicLookupStrategy.url_prefix = http://localhost/images

# Path, extension, query string, etc. that will be suffixed to the
# identifier in the request URL.
HttpSource.BasicLookupStrategy.url_suffix =

# Enables access to resources that require HTTP Basic authentication.
HttpSource.BasicLookupStrategy.auth.basic.username =
HttpSource.BasicLookupStrategy.auth.basic.secret =

# Read data in chunks when it may be more efficient. (This also may end up
# being less efficient, depending on many variables; see the user manual.)
HttpSource.chunking.enabled = true

# Chunk size.
HttpSource.chunking.chunk_size = 512K

# The per-request chunk cache caches downloaded chunks in memory during
# a request, and clears them when the request is complete.
HttpSource.chunking.cache.enabled = true

# Max per-request chunk cache size.
HttpSource.chunking.cache.max_size = 5M

#----------------------------------------
# S3Source
#----------------------------------------

# !! Endpoint URI. Only needed for non-AWS endpoints.
S3Source.endpoint =

# !! AWS region. Only needed for AWS endpoints.
S3Source.region = us-east-1

# !! Credentials for your AWS account.
# See: http://aws.amazon.com/security-credentials
# Note that this info can be obtained from elsewhere rather than setting
# it here; see the user manual.
S3Source.access_key_id = <access-key>
S3Source.secret_key = <secret-key>

# How to look up objects. Allowed values are `BasicLookupStrategy` and
# `ScriptLookupStrategy`. ScriptLookupStrategy uses a delegate method for
# dynamic lookups; see the user manual.
S3Source.lookup_strategy = BasicLookupStrategy

# !! Name of the bucket containing images to be served.
S3Source.BasicLookupStrategy.bucket.name = <bucket-name>

# Path within the bucket that will be prefixed to the identifier in the URL.
# Trailing slash is important!
S3Source.BasicLookupStrategy.path_prefix =

# Path or extension that will be suffixed to the identifier in the URL.
S3Source.BasicLookupStrategy.path_suffix =

# Read data in chunks when it may be more efficient. (This also may end up
# being less efficient, depending on many variables; see the user manual.)
S3Source.chunking.enabled = true

# Chunk size.
S3Source.chunking.chunk_size = 512K

# The per-request chunk cache caches downloaded chunks in memory during
# a request, and clears them when the request is complete.
S3Source.chunking.cache.enabled = true

# Max per-request chunk cache size.
S3Source.chunking.cache.max_size = 5M

#----------------------------------------
# AzureStorageSource
#----------------------------------------

# !! Name of your Azure account.
# Leave blank if using URI with a SAS token in your object key.
AzureStorageSource.account_name =

# !! Key of your Azure account.
# Leave blank if using URI with a SAS token in your object key.
AzureStorageSource.account_key =

# !! Name of the container containing images to be served.
# Leave blank if using URI with the container in your object key.
AzureStorageSource.container_name =

# Tells AzureStorageSource how to look up objects. Allowed values are
# `BasicLookupStrategy` and `ScriptLookupStrategy`. ScriptLookupStrategy
# uses a delegate method for dynamic lookups; see the user manual.
AzureStorageSource.lookup_strategy = BasicLookupStrategy

# Read data in chunks when it may be more efficient. (This also may end up
# being less efficient, depending on many variables; see the user manual.)
AzureStorageSource.chunking.enabled = true

# Chunk size.
AzureStorageSource.chunking.chunk_size = 512K

# The per-request chunk cache caches downloaded chunks in memory during
# a request, and clears them when the request is complete.
AzureStorageSource.chunking.cache.enabled = true

# Max per-request chunk cache size.
AzureStorageSource.chunking.cache.max_size = 5M

#----------------------------------------
# JdbcSource
#----------------------------------------

# Note: JdbcSource requires some delegate methods to be implemented in
# addition to the configuration here, and a JDBC driver to be installed on
# the classpath; see the user manual.

# !!
JdbcSource.url = jdbc:postgresql://localhost:5432/my_database
# !!
JdbcSource.user = postgres
# !!
JdbcSource.password = postgres

# !! Connection timeout in seconds.
JdbcSource.connection_timeout = 10

###########################################################################
# PROCESSORS
###########################################################################

#----------------------------------------
# Processor Selection
#----------------------------------------

# * If set to `AutomaticSelectionStrategy`, a "best" available processor
# will be selected per-request based on formats and installed
# dependencies.
# * If set to `ManualSelectionStrategy`, a processor will be chosen based
# on the rest of the keys in this section.
processor.selection_strategy = ManualSelectionStrategy

# Built-in processors are `Java2dProcessor`, TurboJpegProcessor`,
# `KakaduNativeProcessor`, `OpenJpegProcessor`, `GrokProcessor`,`JaiProcessor`,
# `PdfBoxProcessor`, and `FfmpegProcessor`.
# Some of these have third-party dependencies and won't work out-of-the-box.

# These format-specific definitions are optional.
processor.ManualSelectionStrategy.avi = FfmpegProcessor
processor.ManualSelectionStrategy.bmp =
processor.ManualSelectionStrategy.flv = FfmpegProcessor
processor.ManualSelectionStrategy.gif =
processor.ManualSelectionStrategy.jp2 = GrokProcessor
processor.ManualSelectionStrategy.jpg =
processor.ManualSelectionStrategy.mov = FfmpegProcessor
processor.ManualSelectionStrategy.mp4 = FfmpegProcessor
processor.ManualSelectionStrategy.mpg = FfmpegProcessor
processor.ManualSelectionStrategy.pdf = PdfBoxProcessor
processor.ManualSelectionStrategy.png =
processor.ManualSelectionStrategy.tif =
processor.ManualSelectionStrategy.webm = FfmpegProcessor
processor.ManualSelectionStrategy.xpm =

# Fall back to this processor for any formats not assigned above.
processor.ManualSelectionStrategy.fallback = Java2dProcessor

#----------------------------------------
# Global Processor Configuration
#----------------------------------------

# Controls how content is fed to processors from stream-based sources.
# * `StreamStrategy` will try to stream a source image from a source when
# possible, and use `processor.fallback_retrieval_strategy` otherwise.
# * `DownloadStrategy` will download it to a temporary file, and delete
# it after the request is complete.
# * `CacheStrategy` will download it into the source cache using
# FilesystemCache, which must also be configured. (This will perform a
# lot better than DownloadStrategy if you can spare the disk space.)
processor.stream_retrieval_strategy = StreamStrategy

# Controls how an incompatible StreamSource + FileProcessor combination is
# dealt with.
# * `DownloadStrategy` and `CacheStrategy` work the same as above.
# * `AbortStrategy` causes the request to fail.
processor.fallback_retrieval_strategy = DownloadStrategy

# Resolution of vector rasterization (of e.g. PDFs) at a scale of 1.
processor.dpi = 150

# Color of the background when an image is rotated or alpha-flattened, for
# output formats that don't support transparency.
# This may not be respected for indexed color derivative images.
processor.background_color = white

# Available values are `bell`, `bspline`, `bicubic`, `box`, `hermite`,
# `lanczos3`, `mitchell`, `triangle`. (JaiProcessor & KakaduNativeProcessor
# ignore these.)
processor.downscale_filter = bicubic
processor.upscale_filter = bicubic

# If true, images are downscaled in a linear color space, which is more
# accurate. This only works with mono-resolution (non-pyramidal) images. It
# also may impair performance.
processor.downscale_linear = false

# Intensity of an unsharp mask from 0 to 1.
processor.sharpen = 0

# Progressive JPEGs are usually more compact.
processor.jpg.progressive = true

# JPEG output quality (1-100).
processor.jpg.quality = 80

# TIFF output compression type. Available values are `Deflate`, `JPEG`,
# `LZW`, and `RLE`. Leave blank for no compression.
processor.tif.compression = LZW

#----------------------------------------
# ImageIO Plugin Preferences
#----------------------------------------

# These override the default plugins used by the application and should not
# normally be changed.
processor.imageio.bmp.reader =
processor.imageio.gif.reader =
processor.imageio.gif.writer =
processor.imageio.jpg.reader =
processor.imageio.jpg.writer =
processor.imageio.png.reader =
processor.imageio.png.writer =
processor.imageio.tif.reader =
processor.imageio.tif.writer =
processor.imageio.xpm.reader =

#----------------------------------------
# FfmpegProcessor
#----------------------------------------

# Optional absolute path of the directory containing the FFmpeg binaries.
# Overrides the PATH.
FfmpegProcessor.path_to_binaries =

#----------------------------------------
# OpenJpegProcessor
#----------------------------------------

# Optional absolute path of the directory containing opj_decompress.
# Overrides the PATH.
OpenJpegProcessor.path_to_binaries =

#----------------------------------------
# GrokProcessor
#----------------------------------------

# Optional absolute path of the directory containing grk_decompress.
# Overrides the PATH.
GrokProcessor.path_to_binaries =

#----------------------------------------
# PdfBoxProcessor
#----------------------------------------

# The following will enable disk to be used as well as memory during
# PDF loading in PdfBoxProcessor. If `max_memory_bytes` is -1 it
# will use unlimited memory.
processor.pdf.scratch_file_enabled = false
processor.pdf.max_memory_bytes = -1

###########################################################################
# CLIENT-SIDE CACHING
###########################################################################

# Whether to enable the response Cache-Control header.
cache.client.enabled = true

cache.client.max_age = 2592000
cache.client.shared_max_age =
cache.client.public = true
cache.client.private = false
cache.client.no_cache = false
cache.client.no_store = false
cache.client.must_revalidate = false
cache.client.proxy_revalidate = false
cache.client.no_transform = true

###########################################################################
# SERVER-SIDE CACHING
###########################################################################

# N.B.: The source cache may be used if the
# `processor.stream_retrieval_strategy` and/or
# `processor.fallback_retrieval_strategy` keys are set to `CacheStrategy`.

# FilesystemCache is the only available source cache.
cache.server.source = FilesystemCache

# Amount of time source cache content remains valid. Set to blank or 0
# for forever.
cache.server.source.ttl_seconds = 2592000

# Enables the derivative (processed image) cache.
cache.server.derivative.enabled = true

# Available values are `FilesystemCache`, `JdbcCache`, `RedisCache`,
# `HeapCache`, `S3Cache`, and `AzureStorageCache`.
cache.server.derivative = FilesystemCache

# Amount of time derivative cache content remains valid. Set to blank or 0
# for forever.
cache.server.derivative.ttl_seconds = 2592000

# Whether to use the Java heap as a "level 1" cache for image infos, either
# independently or in front of a "level 2" derivative cache (if enabled).
cache.server.info.enabled = true

# If true, when a source reports that the requested source image has gone
# missing, all cached information relating to it (if any) will be deleted.
# (This is effectively always false when cache.server.resolve_first is also
# false.)
cache.server.purge_missing = true

# If true, the source image will be confirmed to exist before a cached copy
# is returned. If false, the cached copy will be returned without checking.
# Resolving first is safer but slower.
cache.server.resolve_first = false

# !! Enables the cache worker, which periodically purges invalid cache
# items in the background.
cache.server.worker.enabled = true

# !! The cache worker will wait this many seconds before starting its
# next shift.
cache.server.worker.interval = 86400

#----------------------------------------
# FilesystemCache
#----------------------------------------

# If this directory does not exist, it will be created automatically.
FilesystemCache.pathname = /root/cantaloupe-cache

# Levels of folder hierarchy in which to store cached images. Deeper depth
# results in fewer files per directory. Set to 0 to disable subdirectories.
# Purge the cache after changing this.
FilesystemCache.dir.depth = 3

# Number of characters in tree directory names. Should be set to
# 16^n < (max number of directory entries your filesystem can deal with).
# Purge the cache after changing this.
FilesystemCache.dir.name_length = 2

#----------------------------------------
# HeapCache
#----------------------------------------

# Target cache size, in bytes or a number ending in M, MB, G, GB, etc.
# This is not a hard limit, and may be transiently exceeded.
# Ensure your heap can accommodate this size.
HeapCache.target_size = 2G

# If true, the cache contents will be written to a file on exit and during
# cache worker shifts, and read back in at startup.
HeapCache.persist = false

# When the contents are persisted, this specifies the location of the cache
# file. If the parent directory does not exist, it will be created
# automatically.
HeapCache.persist.filesystem.pathname = /var/cache/cantaloupe/heap.cache

#----------------------------------------
# JdbcCache
#----------------------------------------

# !!
JdbcCache.url = jdbc:postgresql://localhost:5432/cantaloupe
# !!
JdbcCache.user = postgres
# !!
JdbcCache.password =

# !! Connection timeout in seconds.
JdbcCache.connection_timeout = 10

# These must be created manually; see the user manual.
JdbcCache.derivative_image_table = derivative_cache
JdbcCache.info_table = info_cache

#----------------------------------------
# S3Cache
#----------------------------------------

# !! Endpoint URI. Only needed for non-AWS endpoints.
S3Cache.endpoint =

# !! AWS region. Only needed for AWS endpoints.
S3Cache.region =

# !! Credentials for your AWS account.
# See: http://aws.amazon.com/security-credentials
# Note that this info can be obtained from elsewhere rather than setting it
# here; see the user manual.
S3Cache.access_key_id =
S3Cache.secret_key =

# !! Name of a bucket to use to hold cached data.
S3Cache.bucket.name =

# !! String that will be prefixed to object keys.
S3Cache.object_key_prefix =

#----------------------------------------
# AzureStorageCache
#----------------------------------------

# !! Credentials for your Azure account.
AzureStorageCache.account_name =
AzureStorageCache.account_key =

# !! Name of the container containing cached images.
AzureStorageCache.container_name =

# !! String that will be prefixed to object keys.
AzureStorageCache.object_key_prefix =

#----------------------------------------
# RedisCache
#----------------------------------------

# !! Redis connection info.
RedisCache.host = localhost
RedisCache.port = 6379
RedisCache.ssl = false
RedisCache.password =
RedisCache.database = 0

###########################################################################
# OVERLAYS
###########################################################################

# Controls how overlays are configured. `BasicStrategy` will use the
# `overlays.BasicStrategy.*` keys in this section. `ScriptStrategy` will
# use a delegate method. (See the user manual.)
overlays.strategy = BasicStrategy

# Whether to enable overlays using the BasicStrategy.
overlays.BasicStrategy.enabled = false

# `image` or `string`.
overlays.BasicStrategy.type = image

# Absolute path or URL of the overlay image. Must be a PNG file.
overlays.BasicStrategy.image = /path/to/overlay.png

# Overlay text.
overlays.BasicStrategy.string = Copyright © My Great Organization\nAll rights reserved.

# For a list of possible values, launch with the -list-fonts argument.
overlays.BasicStrategy.string.font = Helvetica

# Font size in points.
overlays.BasicStrategy.string.font.size = 24

# If the string doesn't fit in the image at the above size, the largest size
# at which it does fit will be used, down to this.
overlays.BasicStrategy.string.font.min_size = 18

# Font weight. 1 = regular, 2 = bold. Unfortunately, many fonts don't
# support fractional weights.
overlays.BasicStrategy.string.font.weight = 1.0

# Point spacing between glyphs, typically between -0.1 and 0.1.
overlays.BasicStrategy.string.glyph_spacing = 0.02

# CSS color syntax is supported.
overlays.BasicStrategy.string.color = white

# CSS color syntax is supported.
overlays.BasicStrategy.string.stroke.color = black

# Stroke width in pixels.
overlays.BasicStrategy.string.stroke.width = 1

# Color of a rectangular background to draw under the string.
# CSS color syntax and alpha are supported.
overlays.BasicStrategy.string.background.color = rgba(0, 0, 0, 100)

# Allowed values: `top left`, `top center`, `top right`, `left center`,
# `center`, `right center`, `bottom left`, `bottom center`, `bottom right`,
# `repeat` (images only), `scaled` (images only).
overlays.BasicStrategy.position = bottom right

# Pixel margin between the overlay and the image edge. Does not apply to
# `repeat` position.
overlays.BasicStrategy.inset = 10

# Output images less than this many pixels wide will not receive an overlay.
# Set to 0 to add the overlay regardless.
overlays.BasicStrategy.output_width_threshold = 400

# Output images less than this many pixels tall will not receive an overlay.
# Set to 0 to add the overlay regardless.
overlays.BasicStrategy.output_height_threshold = 300

###########################################################################
# LOGGING
###########################################################################

#----------------------------------------
# Application Log
#----------------------------------------

# `trace`, `debug`, `info`, `warn`, `error`, `all`, or `off`
log.application.level = debug

log.application.ConsoleAppender.enabled = true
log.application.ConsoleAppender.logstash.enabled = false

# N.B.: Don't enable FileAppender and RollingFileAppender simultaneously!
log.application.FileAppender.enabled = true
log.application.FileAppender.logstash.enabled = false
log.application.FileAppender.pathname = /root/cantaloupe-application.log

log.application.RollingFileAppender.enabled = false
log.application.RollingFileAppender.logstash.enabled = false
log.application.RollingFileAppender.pathname = /path/to/logs/application.log
log.application.RollingFileAppender.policy = TimeBasedRollingPolicy
log.application.RollingFileAppender.TimeBasedRollingPolicy.filename_pattern = /path/to/logs/application-%d{yyyy-MM-dd}.log
log.application.RollingFileAppender.TimeBasedRollingPolicy.max_history = 30

# See the "SyslogAppender" section for a list of facilities:
# http://logback.qos.ch/manual/appenders.html
log.application.SyslogAppender.enabled = false
log.application.SyslogAppender.host =
log.application.SyslogAppender.port = 514
log.application.SyslogAppender.facility = LOCAL0

#----------------------------------------
# Error Log
#----------------------------------------

# Application log messages with a severity of WARN or greater can be copied
# into a dedicated error log, which may make them easier to spot.

# N.B.: Don't enable FileAppender and RollingFileAppender simultaneously!
log.error.FileAppender.enabled = true
log.error.FileAppender.logstash.enabled = false
log.error.FileAppender.pathname = /root/cantaloupe-error.log

log.error.RollingFileAppender.enabled = false
log.error.RollingFileAppender.logstash.enabled = false
log.error.RollingFileAppender.pathname = /path/to/logs/error.log
log.error.RollingFileAppender.policy = TimeBasedRollingPolicy
log.error.RollingFileAppender.TimeBasedRollingPolicy.filename_pattern = /path/to/logs/error-%d{yyyy-MM-dd}.log
log.error.RollingFileAppender.TimeBasedRollingPolicy.max_history = 30

#----------------------------------------
# Access Log
#----------------------------------------

log.access.ConsoleAppender.enabled = false

# N.B.: Don't enable FileAppender and RollingFileAppender simultaneously!
log.access.FileAppender.enabled = false
log.access.FileAppender.pathname = /path/to/logs/access.log

# RollingFileAppender is an alternative to using something like
# FileAppender + logrotate.
log.access.RollingFileAppender.enabled = false
log.access.RollingFileAppender.pathname = /path/to/logs/access.log
log.access.RollingFileAppender.policy = TimeBasedRollingPolicy
log.access.RollingFileAppender.TimeBasedRollingPolicy.filename_pattern = /path/to/logs/access-%d{yyyy-MM-dd}.log
log.access.RollingFileAppender.TimeBasedRollingPolicy.max_history = 30

# See the "SyslogAppender" section for a list of facilities:
# http://logback.qos.ch/manual/appenders.html
log.access.SyslogAppender.enabled = false
log.access.SyslogAppender.host =
log.access.SyslogAppender.port = 514
log.access.SyslogAppender.facility = LOCAL0
processor.ManualSelectionStrategy.webp=

0 comments on commit 68f188f

Please sign in to comment.