if not "%LOGGING_CONFIG%" == "" goto noJuliConfig set LOGGING_CONFIG=-Dnop if not exist "%CATALINA_BASE%\conf\logging.properties" goto noJuliConfig set LOGGING_CONFIG=-Djava.util.logging.config.file="%CATALINA_BASE%\conf\logging.properties" :noJuliConfig set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG%
一个简单的自定义配置文件如下
############################################################ # Default Logging Configuration File # # You can use a different file by specifying a filename # with the java.util.logging.config.file system property. # For example java -Djava.util.logging.config.file=myfile ############################################################ ############################################################ # Global properties ############################################################ # "handlers" specifies a comma separated list of log Handler # classes. These handlers will be installed during VM startup. # Note that these classes must be on the system classpath. # By default we only configure a ConsoleHandler, which will only # show messages at the INFO and above levels. handlers= java.util.logging.ConsoleHandler,java.util.logging.FileHandler # To also add the FileHandler, use the following line instead. #handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler # Default global logging level. # This specifies which kinds of events are logged across # all loggers. For any given facility this global level # can be overriden by a facility specific level # Note that the ConsoleHandler also has a separate level # setting to limit messages printed to the console. .level= INFO ############################################################ # Handler specific properties. # Describes specific configuration info for Handlers. ############################################################ # default file output is in user's home directory. #java.util.logging.FileHandler.pattern = %h/java%u.log #java.util.logging.FileHandler.pattern = ..\\logs\\logger.log java.util.logging.FileHandler.pattern = C:\\zzj\\logger.log java.util.logging.FileHandler.limit = 50000 java.util.logging.FileHandler.count = 1 #java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter # Limit the message that are printed on the console to INFO and above. java.util.logging.ConsoleHandler.level = INFO #java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter java.util.logging.ConsoleHandler.formatter = java.util.logging.XMLFormatter ############################################################ # Facility specific properties. # Provides extra control for each logger. ############################################################ # For example, set the com.xyz.foo logger to only log SEVERE # messages: com.xyz.foo.level = SEVERE
在默认配置文件的基础上添加了FileHandler,并且指定日志文件路径为C:\\zzj\\logger.log,使用SimpleFormatter格式化输出。
注意:日志文件路径不能直接在盘符下,例如不能指定日志文件路径为C:\\logger.log。
附
当然,这里还引发另一个问题
我试图在我的应用程序启动时加载自定义log.properties文件。
我的属性文件和我的主类在同一个包中,所以我认为如下命令行参数应该加载属性文件。
-Djava.util.logging.config.file=log.properties
但是,只有当我指定属性文件的完整绝对路径时才加载属性。任何建议如何使用相对路径?
Java日志记录不会搜索整个硬盘中的文件;有很简单的规则如何查找文件。你希望Java能够看到这两个文件是属于彼此的,但是你没有在任何地方说过。由于Java认为属性文件和类之间没有连接,除非它们位于磁盘上的相同文件夹中,所以它找不到该文件。
-Djava.util.logging.config.file=log.properties
仅适用于文件log.properties位于Java进程的当前目录中(可能非常随机)。所以你应该在这里使用绝对路径。
另一种解决方案是将文件logging.properties移动到$JAVA_HOME/lib/(或编辑应该在那里的文件)。在这种情况下,您不需要设置系统属性。
util logging不从类路径加载,它需要一个绝对路径,这就是为什么其他日志包如log4j更容易配置,并且更适合web应用程序,这对于获取abs路径是一件痛苦的事情。
这在java.util.logging.LogManager doco中根本没有解释。