高级日志配置¶
Geoserver使用Log4J框架进行日志记录,该框架通过选择日志记录配置文件(在 global settings )。
Geoserver日志记录配置文件为特定的服务器操作分配日志记录级别:
Geoserver记录器记录服务器功能和各个服务的活动。
GeoWebCache记录器记录Geoserver使用的磁贴协议库的活动。
GeoTools记录器记录Geoserver使用的数据访问和渲染库的活动。
附加者
stdout
被设置为将信息发送到标准输出的控制台附加器, Log to Stdout global settings 。附加者
geoserverlogfile
是否设置为FileAppender或RollingFile附加器将信息发送到 Log location global settings 。日志记录级别范围为:
失败 (
FATAL
,ERROR
,WARN
)级别可操作的 (
INFO
,CONFIG
)级别罗嗦 (
DEBUG
,TRACE
,FINEST
)级别
除了内置的配置文件之外,您还可以设置一个定制的日志记录配置文件,或者完全覆盖日志记录配置(甚至完全使用另一个记录库)。
内置记录配置文件¶
Geoserver包括几个内置的记录配置文件:
应用程序第一次运行时,内置的日志配置文件将安装到您的数据目录中。如果您已自定义(请参阅下一节)这些文件并希望恢复原始内容:
使用启动参数
-DUPDATE_BUILT_IN_LOGGING_PROFILES=true
,如有需要,将检查并更新内置的记录配置文件;或删除文件并重新启动Geoserver,丢失的文件将恢复;或
从上面的下载链接复制内容
有关这些日志记录配置文件的说明,请参见 日志配置文件 。其他内置日志记录配置文件由已安装的扩展模块提供(例如 IMPORTER_LOGGING
配置文件内置于导入器扩展中)。
自定义日志配置文件¶
任何人都可以通过向已有的文件列表中添加Log4J配置文件来编写新的日志记录配置文件 $GEOSERVER_DATA_DIR/logs
文件夹。
此文件夹中匹配的配置文件 *_LOGGING.*
将在全局设置页面上列为可供使用。文件的名称(不包括扩展名)将显示为配置文件名称。
下面是一个示例,摘自 DEFAULT_LOGGING.xml
配置,允许在日志中包括其他Geoserver日志消息:
<?xml version="1.0" encoding="UTF-8"?>
<!-- This log4j configuration file needs to stay here, and is used as the default logging setup -->
<!-- during data_dir upgrades and in case the chosen logging config isn't available. -->
<Configuration name="DEFAULT_LOGGING" status="fatal" dest="out">
<Appenders>
<Console name="stdout" target="SYSTEM_OUT">
<PatternLayout pattern="%date{dd MMM HH:mm:ss} %-6level [%logger{2}] - %msg%n%throwable{filters(org.junit,org.apache.maven,sun.reflect,java.lang.reflect)}"/>
</Console>
<RollingFile name="geoserverlogfile">
<filename>logs/geoserver.log</filename>
<filePattern>logs/geoserver-%i.log</filePattern>
<PatternLayout pattern="%date{dd MMM HH:mm:ss} %-6level [%logger{2}] - %msg%n%throwable{filters(org.junit,org.apache.maven,sun.reflect,java.lang.reflect)}"/>
<Policies>
<SizeBasedTriggeringPolicy size="20 MB" />
</Policies>
<DefaultRolloverStrategy max="3" fileIndex="min"/>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="org.geotools" level="warn" additivity="false">
<AppenderRef ref="stdout"/>
<AppenderRef ref="geoserverlogfile"/>
</Logger>
<Logger name="org.geotools.factory" level="warn" additivity="false">
<AppenderRef ref="stdout"/>
<AppenderRef ref="geoserverlogfile"/>
</Logger>
<Logger name="org.geoserver" level="CONFIG" additivity="false">
<AppenderRef ref="stdout"/>
<AppenderRef ref="geoserverlogfile"/>
</Logger>
<Logger name="org.vfny.geoserver" level="CONFIG" additivity="false">
<AppenderRef ref="stdout"/>
<AppenderRef ref="geoserverlogfile"/>
</Logger>
<Logger name="org.springframework" level="warn" additivity="false">
<AppenderRef ref="stdout"/>
<AppenderRef ref="geoserverlogfile"/>
</Logger>
<Logger name="org.geowebcache" level="CONFIG" additivity="false">
<AppenderRef ref="stdout"/>
<AppenderRef ref="geoserverlogfile"/>
</Logger>
<Logger name="org.geowebcache.seed" level="warn" additivity="false">
<AppenderRef ref="stdout"/>
<AppenderRef ref="geoserverlogfile"/>
</Logger>
<Root level="warn">
<AppenderRef ref="stdout"/>
<AppenderRef ref="geoserverlogfile"/>
</Root>
</Loggers>
</Configuration>
可以设置任何自定义配置,以使特定包能够以所需的日志记录级别发出日志。
然而,有几条规则需要遵循:
自定义级别可用于
CONFIG
和FINEST
级别。Appder用于输出日志记录信息,Geoserver为名为的Appder提供外部配置
geoserverlogfile
和stdout
。始终包括一个
geoserverlogfile
FileAppender
或RollingFile
Geoserver将配置为针对在中配置的位置工作的附加器 global settings 。更新时请注意保留您的文件扩展名
<filename>
位置,因此如果您希望登录到access_logs.txt
您可以这样做,并且txt
延期将被保留。在设置时
geoserverlogfile
附加器ASRollingFile
附加者,请注意保存您的<filePattern>
扩展,必须与配置的翻转策略保持一致。作为一个例子
-%i
与DefaultRolloverStrategy一起使用,可生成最多3
备份文件。<RollingFile name="geoserverlogfile"> <filename>logs/geoserver.log</filename> <filePattern>logs/geoserver-%i.log</filePattern> <PatternLayout pattern="%date{dd MMM HH:mm:ss} %-6level [%logger{2}] - %msg%n%throwable{filters(org.junit,org.apache.maven,sun.reflect,java.lang.reflect)}"/> <Policies> <SizeBasedTriggeringPolicy size="20 MB" /> </Policies> <DefaultRolloverStrategy max="3" fileIndex="min"/> </RollingFile>
一个
Console
写入标准输出的附加器应调用stdout
此外,Geoserver将根据中设置的配置启用/禁用它 global settings<Console name="stdout" target="SYSTEM_OUT"> <PatternLayout pattern="%date{dd MMM HH:mm:ss} %-6level [%logger{2}] - %msg%n%throwable{filters(org.junit,org.apache.maven,sun.reflect,java.lang.reflect)}"/> </Console>
记录器用于从Geoserver组件和使用的各个库收集消息。
Geoserver Logger名称与项目javadoc概述(可供下载)中的包名称相匹配。
作为一个包的示例
org.geoserver.wms
已列出,允许控制WMS服务日志记录的级别:<Logger name="org.geoserver.wms" level="debug" additivity="false"> <AppenderRef ref="stdout"/> <AppenderRef ref="geoserverlogfile"/> </Logger>
GeoTools Logger名称与中的包名称匹配 project javadocs overview 。
作为一个包的示例
org.geotools.data.shapefile
列出,允许控制shapefile日志记录的级别:<Logger name="org.geotools.data.shapefile" level="debug" additivity="false"> <AppenderRef ref="stdout"/> <AppenderRef ref="geoserverlogfile"/> </Logger>
为每个记录器分配一个级别,以指示您要记录的详细程度:
水平
描述
OFF
关闭所有日志记录
FATAL
出现严重问题,应用程序可能崩溃或需要重新启动
ERROR
出现问题,应用程序无法执行请求的操作
WARN
潜在问题,应用程序将尝试并继续
INFO
指示应用程序正在执行的操作的正常功能。
CONFIG
应用程序启动和配置过程中的正常应用程序功能
DEBUG
用于调试的内部消息
TRACE
按方法跟踪执行情况
FINEST
对算法进行真正详细的故障排除
ALL
打开所有日志记录
更详细的日志记录级别可能包括一个Strack跟踪,显示消息发生的位置。
使用
additivity="false"
以防止从一个记录器收集的消息传递给下一个记录器。如果最终出现双重日志消息,则有机会检查这种常见的错误配置。
这个
Root
Logger在列表中排在最后,应该收集所有内容。
仅控制台日志记录示例¶
复制内置日志记录配置文件并进行自定义:
复制一个示例,如
QUIET_LOGGING.xml
至CONSOLE_LOGGING.xml
:更新的初始部分
CONSOLE_LOGGING.xml
使用新名称:<?xml version="1.0" encoding="UTF-8"?> <Configuration name="CONSOLE_LOGGING" status="fatal" dest="out">
仔细检查控制台附加器配置:
<Appenders> <Console name="stdout" target="SYSTEM_OUT"> <PatternLayout pattern="%date{dd mmm HH:mm:ss} %-6level [%logger{2}] - %msg%n%"/> </Console> </Appenders>
为Geoserver(以及您希望跟踪的任何其他服务器)添加附加器:
<Logger name="org.geoserver" level="ERROR" additivity="false"> <AppenderRef ref="stdout"/> </Logger> <Logger name="org.vfny.geoserver" level="ERROR" additivity="false"> <AppenderRef ref="stdout"/> </Logger>
仔细检查根记录器:
<Root level="FATAL"> <AppenderRef ref="stdout"/> </Root>
此结果向控制台提供的反馈最少,仅在Geoserver遇到错误时报告。
覆盖geoserver配置中的日志位置设置¶
在设置Geoserver计算机集群时,在所有集群节点之间共享单个数据目录是很常见的。
然而,有一个问题,所有节点最终都会将日志写入同一文件中,这将导致各种问题,具体取决于操作系统文件锁定规则(单个服务器可能能够写入,或者以不受控制的方式一起写入,导致日志文件不可读)。
一个常见的选择是使用机器名作为区别,设置如下值 logs/geoserver_node1.log
, logs/geoserver_node2.log
等等:在这种情况下,所有的日志文件仍然包含在数据目录中并正确地旋转,但是每个服务器都有自己的单独的日志文件来写。
在这种情况下,可以方便地为每个Geoserver节点设置单独的日志位置:
这个
GEOSERVER_LOG_LOCATION
参数可以设置为系统属性、环境变量或Servlet上下文参数:GEOSERVER_LOG_LOCATION=<the location of the file>
此设置覆盖全局设置,并应用于
geoserverlogfile
附加器作为文件名和文件模式的模板。使用Log4J可以获得相同的效果 property substitution ,在那里有各种各样的 property lookups 都是可用的。
<RollingFile name="geoserverlogfile"> <filename>logs/geoserver-${hostName}.log</filename> <filePattern>logs/geoserver-${hostName}-%d{yyyy-MM-dd-HH}-%i.zip</filePattern> <PatternLayout pattern="%date{dd mmm HH:mm:ss} %-6level [%logger{2}] - %msg%n"/> <Policies> <OnStartupTriggeringPolicy /> <SizeBasedTriggeringPolicy size="20 MB" /> <TimeBasedTriggeringPolicy /> </Policies> <DefaultRolloverStrategy max="9" fileIndex="min"/> </RollingFile>
哪里
${hostName}
是当前系统主机名或IP地址。
强制geoserver放弃log4j控制¶
Geoserver使用当前日志记录配置作为模板,并应用管理员配置的日志位置和标准输出设置,从而在内部覆盖Log4J配置。
如果希望Geoserver不要覆盖正常的Log4J行为,可以在JVM系统变量、环境变量或Servlet上下文参数中设置以下参数:
RELINQUISH_LOG4J_CONTROL=true
这可以与 log4j2.configurationFile
system property to configure Log4J externally **
-DRELINQUISH_LOG4J_CONTROL=true -Dlog4j2.configurationFile=logging_configuration.xml
强制geoserver使用备用日志重定向¶
GeoServer使用GooToeCurror框架,框架又基于Java日志记录,但允许将所有消息重定向到用户选择的备用框架。
默认情况下,Geoserver设置Log4J重定向,但可以将Geoserver配置为使用纯Java日志记录或Commons日志记录(通过使用一些额外的编程也可以支持其他日志记录程序)。
如果要强制Geoserver使用不同的日志记录机制,请在JVM系统变量、环境变量或Servlet上下文参数中设置以下参数:
GT2_LOGGING_REDIRECTION=[CommonsLogging,JavaLogging,Log4J,Log4J2,LogBack]
RELINQUISH_LOG4J_CONTROL=true
如示例中所述,您还必须要求Geoserver不对Log4J配置施加控制。
强制Java日志记录示例¶
以配置Java日志记录为例:
-DRELINQUISH_LOG4J_CONTROL=true -DGT2_LOGGING_REDIRECTION=JavaLogging -Djava.util.logging.config.file=logging.properties
使用由提供的Java util日志记录配置 logging.properties
:
handlers=java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.level = ALL
java.util.logging.ConsoleHandler.formatter = org.geotools.util.logging.MonolineFormatter
org.geotools.util.logging.MonolineFormatter.source = class:short
.level= ALL
org.geoserver.level = CONFIG
org.vfny.geoserver.level = WARN
org.geotools.level = WARN
org.geotools.factory.level = WARN