Indice

File log4j2.properties

Il file log4j2.properties, è utilizzato per configurare le modalità di logging in geoweb.

Questa è la versione 2 di log4j, che è introdotta a partire dalla versione 4.6.X del framework.

L'introduzione è stata forzata in seguito alla scoperta di un rilevante bug di sicurezza. info qui. Non sono affette dal bug le versioni 1.x di log4j, precedentemente utilizzate da Geoweb, ma la richiesta di aggiornamento da parte di certi clienti è stata pressante, ed è statao deciso di passare comunque all'ultima versione rilasciata.

Si possono specificare, tra l'altro, i logging level selettivamente e su quali file verranno salvati i log.

Per una guida completa fare riferimento a quella ufficiale qui.

Logging Level

Impostando un logging level, si avrà come effetto quello di visualizzare loggati solo i messaggi di pari livello o superiore. Ecco la lista dei logging level, in ordine crescente dal meno al più restrittivo:

Per quanto riguarda in Geoweb, è buona prassi impostare il logging level a debug in fase di sviluppo/dispiegamento in ambiente di test/collaudo, ed ad warn od error in produzione.

Log generati da librerie di terze parti, come Activti e MongoDB vengono in genere tenuti sempre con logging level più restrittivi, come error, a meno di specifiche necessità di debugging.

I log relativi al GwMailService sono in genere configurati per essere loggati su un file separato.

Note sulla configurazione log4j2

######################################################################

# geoweb logger

######################################################################

logger.geoweb.name = com.geowebframework

logger.geoweb.level = ${geowebLogLevel}

logger.geoweb.additivity = false

logger.geoweb.appenderRefs = stdout,rolling

logger.geoweb.appenderRef.stdout.ref = STDOUT

logger.geoweb.appenderRef.rolling.ref = RollingFile

######################################################################

# appenders

######################################################################

#appenders definition can be optional, but it's useful to undestand properties syntax correlation

appenders = console,rolling

######################################################################

# STDOUT (Console) appender

######################################################################

appender.console.type = Console

appender.console.name = STDOUT

appender.console.layout.type = PatternLayout

appender.console.layout.pattern = %d [%t] %-5p %c - %m%n

appender.console.filter.threshold.type = ThresholdFilter

appender.console.filter.threshold.level = ${globalLogLevel}

######################################################################

# RollingFile (RollingFile) appender

######################################################################

appender.rolling.type = RollingFile

appender.rolling.name = RollingFile

appender.rolling.fileName = ${sys:catalina.home}/logs/geoweb_client.log

#appender.rolling.filePattern = ${sys:catalina.home}/logs/geoweb_client-%d{yyyy-MM-dd}-%i.log

appender.rolling.filePattern = ${sys:catalina.home}/logs/geoweb_client-%i.log

appender.rolling.layout.type = PatternLayout

appender.rolling.layout.pattern = %d [%t] %-5p %c - %m%n

appender.rolling.policies.type = Policies

#appender.rolling.policies.time.type = TimeBasedTriggeringPolicy

#appender.rolling.policies.time.interval = 1

#appender.rolling.policies.time.modulate = true

appender.rolling.policies.size.type = SizeBasedTriggeringPolicy

appender.rolling.policies.size.size = 20MB

appender.rolling.strategy.type = DefaultRolloverStrategy

appender.rolling.strategy.max = 10

appender.rolling.strategy.fileIndex = min

Template log4j2.properties (Webclient)

Nel caso si voglia usare anche la TimeBasedTriggeringPolicy, per far creare un nuovo file ogni giorno, oltre che superati i limiti di size:

  1. Elenco numeratodecommentare (togliendo #) le parti appender.rolling.policies.time.
  2. nel filePattern degli appender assicurarsi che ci sia un costrutto %d{} (Es: %d{yyyy-MM-dd})
log4j2.properties
# documentation here:
#	https://logging.apache.org/log4j/2.x/manual/configuration.html
 
######################################################################
#	log threshold levels
######################################################################
property.globalLogLevel = debug
property.geowebLogLevel = debug
property.securityLogLevel = info
property.emailLogLevel = debug
property.activitiLogLevel = error
property.mongodbLogLevel = error
property.httpclientLogLevel = info
 
######################################################################
#	global settings
######################################################################
name = GwPropertiesConfig
# status
#	The level of internal Log4j events that should be logged to the console. 
#	Valid values for this attribute are "off", "trace", "debug", "info", "warn", "error", "fatal", and "all". 
#	Log4j will log details about initialization, rollover and other internal actions to the status logger. 
#	Setting status="trace" is one of the first tools available to you if you need to troubleshoot log4j.
#	(Alternatively, setting system property log4j2.debug will also print internal Log4j2 logging to the console, 
#	including internal logging that took place before the configuration file was found.)
status = info
# dest
#	Either "err" for stderr, "out" for stdout, a file path, or a URL.
dest = out
# monitorInterval
#	The minimum amount of time, in seconds, that must elapse before the file configuration is checked for changes.
monitorInterval=60
 
filter.threshold.type = ThresholdFilter
filter.threshold.level = ${globalLogLevel}
 
######################################################################
#	root logger
######################################################################
rootLogger.level = ${globalLogLevel}
rootLogger.appenderRefs = stdout,rolling
rootLogger.appenderRef.stdout.ref = STDOUT
rootLogger.appenderRef.rolling.ref = RollingFile
 
######################################################################
#	geoweb logger
######################################################################
logger.geoweb.name = com.geowebframework
logger.geoweb.level = ${geowebLogLevel}
logger.geoweb.additivity = false
logger.geoweb.appenderRefs = stdout,rolling
logger.geoweb.appenderRef.stdout.ref = STDOUT
logger.geoweb.appenderRef.rolling.ref = RollingFile
 
######################################################################
#	security logger
######################################################################
logger.security.name = com.geowebframework.webclient.security
logger.security.level = ${securityLogLevel}
logger.security.additivity = false
logger.security.appenderRefs = stdout,rolling
logger.security.appenderRef.stdout.ref = STDOUT
logger.security.appenderRef.rolling.ref = RollingFileAccess
 
######################################################################
#	email logger
######################################################################
logger.email.name = com.geowebframework.calendar.service.GwMailService
logger.email.level = ${emailLogLevel}
logger.email.additivity = false
logger.email.appenderRefs = stdout,rolling 
logger.email.appenderRef.stdout.ref = STDOUT
logger.email.appenderRef.rolling.ref = RollingFileEmail
 
######################################################################
#	activiti logger
######################################################################
logger.activiti.name = org.activiti
logger.activiti.level = ${activitiLogLevel}
logger.activiti.additivity = false
logger.activiti.appenderRefs = stdout,rolling 
logger.activiti.appenderRef.stdout.ref = STDOUT
logger.activiti.appenderRef.rolling.ref = RollingFile
 
######################################################################
#	mongodb logger
######################################################################
logger.mongodb.name = org.mongodb.driver.cluster
logger.mongodb.level = ${mongodbLogLevel}
logger.mongodb.additivity = false
logger.mongodb.appenderRefs = stdout,rolling 
logger.mongodb.appenderRef.stdout.ref = STDOUT
logger.mongodb.appenderRef.rolling.ref = RollingFile
 
######################################################################
#	httpclient logger
######################################################################
logger.httpclient.name=org.apache.http
logger.httpclient.level = ${httpclientLogLevel}
logger.httpclient.additivity = false
logger.httpclient.appenderRefs = stdout,rolling 
logger.httpclient.appenderRef.stdout.ref = STDOUT
logger.httpclient.appenderRef.rolling.ref = RollingFile
 
######################################################################
#	appenders
######################################################################
#appenders definition can be optional, but it's useful to understand properties syntax correlation 
appenders = console,rolling,rollingEmail,rollingAccess
 
######################################################################
#	STDOUT (Console) appender
######################################################################
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d [%t] %-5p %c - %m%n
appender.console.filter.threshold.type = ThresholdFilter
appender.console.filter.threshold.level = ${globalLogLevel}
 
######################################################################
#	RollingFile (RollingFile) appender
######################################################################
appender.rolling.type = RollingFile
appender.rolling.name = RollingFile
appender.rolling.fileName = ${sys:catalina.home}/logs/geoweb_client.log
#appender.rolling.filePattern = ${sys:catalina.home}/logs/geoweb_client-%d{yyyy-MM-dd}-%i.log
appender.rolling.filePattern = ${sys:catalina.home}/logs/geoweb_client-%i.log
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %d [%t] %-5p %c - %m%n
appender.rolling.policies.type = Policies
#appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
#appender.rolling.policies.time.interval = 1
#appender.rolling.policies.time.modulate = true
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size = 20MB
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.max = 10
appender.rolling.strategy.fileIndex = min
 
######################################################################
#	RollingFileEmail (RollingFile) appender
######################################################################
appender.rollingEmail.type = RollingFile
appender.rollingEmail.name = RollingFileEmail
appender.rollingEmail.fileName = ${sys:catalina.home}/logs/gwMail.log
#appender.rollingEmail.filePattern = ${sys:catalina.home}/logs/gwMail-%d{yyyy-MM-dd}-%i.log
appender.rollingEmail.filePattern = ${sys:catalina.home}/logs/gwMail-%i.log
appender.rollingEmail.layout.type = PatternLayout
appender.rollingEmail.layout.pattern = %d [%t] %-5p %c - %m%n
appender.rollingEmail.policies.type = Policies
#appender.rollingEmail.policies.time.type = TimeBasedTriggeringPolicy
#appender.rollingEmail.policies.time.interval = 1
#appender.rollingEmail.policies.time.modulate = true
appender.rollingEmail.policies.size.type = SizeBasedTriggeringPolicy
appender.rollingEmail.policies.size.size = 20MB
appender.rollingEmail.strategy.type = DefaultRolloverStrategy
appender.rollingEmail.strategy.max = 10
appender.rollingEmail.strategy.fileIndex = min
 
######################################################################
#	RollingFileAccess (RollingFile) appender
######################################################################
appender.rollingAccess.type = RollingFile
appender.rollingAccess.name = RollingFileAccess
appender.rollingAccess.fileName = ${sys:catalina.home}/logs/gwAccess.log
#appender.rollingAccess.filePattern = ${sys:catalina.home}/logs/gwAccess-%d{yyyy-MM-dd}-%i.log
appender.rollingAccess.filePattern = ${sys:catalina.home}/logs/gwAccess-%i.log
appender.rollingAccess.layout.type = PatternLayout
appender.rollingAccess.layout.pattern = %d [%t] %-5p %c - %m%n
appender.rollingAccess.policies.type = Policies
#appender.rollingAccess.policies.time.type = TimeBasedTriggeringPolicy
#appender.rollingAccess.policies.time.interval = 1
#appender.rollingAccess.policies.time.modulate = true
appender.rollingAccess.policies.size.type = SizeBasedTriggeringPolicy
appender.rollingAccess.policies.size.size = 20MB
appender.rollingAccess.strategy.type = DefaultRolloverStrategy
appender.rollingAccess.strategy.max = 10
appender.rollingAccess.strategy.fileIndex = min

Template log4j2.properties (Webadmin)

Nel caso si voglia usare anche la TimeBasedTriggeringPolicy, per far creare un nuovo file ogni giorno, oltre che superati i limiti di size:

  1. Elenco numeratodecommentare (togliendo #) le parti appender.rolling.policies.time.
  2. nel filePattern degli appender assicurarsi che ci sia un costrutto %d{} (Es: %d{yyyy-MM-dd})
log4j2.properties
# documentation here:
#	https://logging.apache.org/log4j/2.x/manual/configuration.html
 
######################################################################
#	log threshold levels
######################################################################
property.globalLogLevel = debug
property.geowebLogLevel = debug
property.activitiLogLevel = error
 
######################################################################
#	global settings
######################################################################
name = GwPropertiesConfig
# status
#	The level of internal Log4j events that should be logged to the console. 
#	Valid values for this attribute are "off", "trace", "debug", "info", "warn", "error", "fatal", and "all". 
#	Log4j will log details about initialization, rollover and other internal actions to the status logger. 
#	Setting status="trace" is one of the first tools available to you if you need to troubleshoot log4j.
#	(Alternatively, setting system property log4j2.debug will also print internal Log4j2 logging to the console, 
#	including internal logging that took place before the configuration file was found.)
status = info
# dest
#	Either "err" for stderr, "out" for stdout, a file path, or a URL.
dest = out
# monitorInterval
#	The minimum amount of time, in seconds, that must elapse before the file configuration is checked for changes.
monitorInterval=60
 
filter.threshold.type = ThresholdFilter
filter.threshold.level = ${globalLogLevel}
 
######################################################################
#	root logger
######################################################################
rootLogger.level = ${globalLogLevel}
rootLogger.appenderRefs = stdout,rolling
rootLogger.appenderRef.stdout.ref = STDOUT
rootLogger.appenderRef.rolling.ref = RollingFile
 
######################################################################
#	geoweb logger
######################################################################
logger.geoweb.name = com.geowebframework
logger.geoweb.level = ${geowebLogLevel}
logger.geoweb.additivity = false
logger.geoweb.appenderRefs = stdout,rolling
logger.geoweb.appenderRef.stdout.ref = STDOUT
logger.geoweb.appenderRef.rolling.ref = RollingFile
 
######################################################################
#	activiti logger
######################################################################
logger.activiti.name = org.activiti
logger.activiti.level = ${activitiLogLevel}
logger.activiti.additivity = false
logger.activiti.appenderRefs = stdout,rolling 
logger.activiti.appenderRef.stdout.ref = STDOUT
logger.activiti.appenderRef.rolling.ref = RollingFile
 
 
 
######################################################################
#	appenders
######################################################################
#appenders definition can be optional, but it's useful to understand properties syntax correlation 
appenders = console,rolling
 
######################################################################
#	STDOUT (Console) appender
######################################################################
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d [%t] %-5p %c - %m%n
appender.console.filter.threshold.type = ThresholdFilter
appender.console.filter.threshold.level = ${globalLogLevel}
 
######################################################################
#	RollingFile (RollingFile) appender
######################################################################
appender.rolling.type = RollingFile
appender.rolling.name = RollingFile
appender.rolling.fileName = ${sys:catalina.home}/logs/geoweb_admin.log
#appender.rolling.filePattern = ${sys:catalina.home}/logs/geoweb_admin-%d{yyyy-MM-dd}-%i.log
appender.rolling.filePattern = ${sys:catalina.home}/logs/geoweb_admin-%i.log
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %d [%t] %-5p %c - %m%n
appender.rolling.policies.type = Policies
#appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
#appender.rolling.policies.time.interval = 1
#appender.rolling.policies.time.modulate = true
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size = 20MB
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.max = 10
appender.rolling.strategy.fileIndex = min