#
# Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License v. 2.0, which is available at
# http://www.eclipse.org/legal/epl-2.0.
#
# This Source Code may also be made available under the following Secondary
# Licenses when the conditions for such availability set forth in the
# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
# version 2 with the GNU Classpath Exception, which is available at
# https://www.gnu.org/software/classpath/license.html.
#
# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
#

#GlassFish logging.properties list
#Update Thurs Oct 18 2012
#All attributes details
handlers=java.util.logging.ConsoleHandler
handlerServices=com.sun.enterprise.server.logging.GFFileHandler
java.util.logging.ConsoleHandler.formatter=com.sun.enterprise.server.logging.UniformLogFormatter
com.sun.enterprise.server.logging.GFFileHandler.formatter=com.sun.enterprise.server.logging.ODLLogFormatter
com.sun.enterprise.server.logging.GFFileHandler.file=${com.sun.aas.instanceRoot}/logs/server.log
com.sun.enterprise.server.logging.GFFileHandler.rotationTimelimitInMinutes=0
com.sun.enterprise.server.logging.GFFileHandler.flushFrequency=1
java.util.logging.FileHandler.limit=50000
com.sun.enterprise.server.logging.GFFileHandler.logtoConsole=false
com.sun.enterprise.server.logging.GFFileHandler.rotationLimitInBytes=2000000
com.sun.enterprise.server.logging.GFFileHandler.excludeFields=
com.sun.enterprise.server.logging.GFFileHandler.multiLineMode=true
com.sun.enterprise.server.logging.SyslogHandler.useSystemLogging=false
java.util.logging.FileHandler.count=1
com.sun.enterprise.server.logging.GFFileHandler.retainErrorsStasticsForHours=0
log4j.logger.org.hibernate.validator.util.Version=warn
com.sun.enterprise.server.logging.GFFileHandler.maxHistoryFiles=0
com.sun.enterprise.server.logging.GFFileHandler.rotationOnDateChange=false
java.util.logging.FileHandler.pattern=%h/java%u.log
java.util.logging.FileHandler.formatter=java.util.logging.XMLFormatter

#All log level details
com.sun.enterprise.server.logging.GFFileHandler.level=ALL
jakarta.enterprise.system.tools.admin.level=INFO
org.glassfish.wasp.level=INFO
jakarta.enterprise.system.core.level=INFO
jakarta.enterprise.system.core.classloading.level=INFO
java.util.logging.ConsoleHandler.level=FINEST
jakarta.enterprise.system.tools.deployment.level=INFO
jakarta.enterprise.system.core.transaction.level=INFO
org.apache.catalina.level=INFO
org.apache.coyote.level=INFO
javax.level=INFO
jakarta.enterprise.system.util.level=INFO
jakarta.enterprise.resource.resourceadapter.level=INFO
jakarta.enterprise.system.core.config.level=INFO
jakarta.enterprise.system.level=INFO
jakarta.enterprise.system.core.security.level=INFO
jakarta.enterprise.system.container.cmp.level=INFO
jakarta.enterprise.system.core.selfmanagement.level=INFO
.level=INFO
jakarta.enterprise.resource.jdo.level=INFO
jakarta.enterprise.resource.sqltrace.level=FINE
org.jvnet.hk2.osgiadapter.level=INFO
jakarta.enterprise.system.ssl.security.level=INFO
ShoalLogger.level=CONFIG
