# Logging Configuration
# ---------------------
# By setting properties in this file, you can change the behavior
# of the java.util.logging framework. Some examples are listed below.
#
#
# To change the logging threshold of all loggers to the value
# java.util.logging.Level.CONFIG, un-comment the following line:
#
# .level=CONFIG
#
#
# To change the logging threshold of all loggers in the "foo.bar"
# namespace to java.util.logging.Level.FINEST, un-comment the follwing
# line. This will also affect any children, such as "foo.bar.baz".
#
# foo.bar.level=FINEST
#
#
# To register a FileHandler for the "foo.bar" namespace and its
# children, un-comment the following line. By default, the FileHandler
# will write XML-formatted messages into a file "java0.log" in the
# user's home directory.
#
# foo.bar.handlers=java.util.logging.FileHandler
#
#
# To make a FileHandler use plain text instead of XML, and to place
# the log file into a different location (such as /tmp/myfile.log
# or /var/tmp/myfile.log), un-comment the following:
#
# java.util.logging.FileHandler.pattern=%t/myfile.log
# java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
#
#
# Logging can be configured in many ways. For more information, please
# look at the documentation of the java.util.logging package.


# Send log records to System.err, default to INFO per documentation.
handlers = java.util.logging.ConsoleHandler
.level = INFO
