高级日志配置

Geoserver使用Log4J框架进行日志记录,该框架通过选择日志记录配置文件(在 global settings )。

Geoserver日志记录配置文件为特定的服务器操作分配日志记录级别:

  • Geoserver记录器记录服务器功能和各个服务的活动。

  • GeoWebCache记录器记录Geoserver使用的磁贴协议库的活动。

  • GeoTools记录器记录Geoserver使用的数据访问和渲染库的活动。

  • 附加者 stdout 被设置为将信息发送到标准输出的控制台附加器, Log to Stdout global settings

  • 附加者 geoserverlogfile 是否设置为FileAppender或RollingFile附加器将信息发送到 Log location global settings

  • 日志记录级别范围为:

    • 失败 (FATALERRORWARN )级别

    • 可操作的 (INFOCONFIG )级别

    • 罗嗦 (DEBUGTRACEFINEST )级别

除了内置的配置文件之外,您还可以设置一个定制的日志记录配置文件,或者完全覆盖日志记录配置(甚至完全使用另一个记录库)。

内置记录配置文件

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>

可以设置任何自定义配置,以使特定包能够以所需的日志记录级别发出日志。

然而,有几条规则需要遵循:

  • 自定义级别可用于 CONFIGFINEST 级别。

  • Appder用于输出日志记录信息,Geoserver为名为的Appder提供外部配置 geoserverlogfilestdout

    • 始终包括一个 geoserverlogfile FileAppenderRollingFile Geoserver将配置为针对在中配置的位置工作的附加器 global settings

      更新时请注意保留您的文件扩展名 <filename> 位置,因此如果您希望登录到 access_logs.txt 您可以这样做,并且 txt 延期将被保留。

    • 在设置时 geoserverlogfile 附加器AS RollingFile 附加者,请注意保存您的 <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在列表中排在最后,应该收集所有内容。

仅控制台日志记录示例

复制内置日志记录配置文件并进行自定义:

  1. 复制一个示例,如 QUIET_LOGGING.xmlCONSOLE_LOGGING.xml

  2. 更新的初始部分 CONSOLE_LOGGING.xml 使用新名称:

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration name="CONSOLE_LOGGING" status="fatal" dest="out">
    
  3. 仔细检查控制台附加器配置:

    <Appenders>
        <Console name="stdout" target="SYSTEM_OUT">
            <PatternLayout pattern="%date{dd mmm HH:mm:ss} %-6level [%logger{2}] - %msg%n%"/>
        </Console>
    </Appenders>
    
  1. 为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>
    
  2. 仔细检查根记录器:

    <Root level="FATAL">
        <AppenderRef ref="stdout"/>
    </Root>
    
  3. 此结果向控制台提供的反馈最少,仅在Geoserver遇到错误时报告。

覆盖geoserver配置中的日志位置设置

在设置Geoserver计算机集群时,在所有集群节点之间共享单个数据目录是很常见的。

然而,有一个问题,所有节点最终都会将日志写入同一文件中,这将导致各种问题,具体取决于操作系统文件锁定规则(单个服务器可能能够写入,或者以不受控制的方式一起写入,导致日志文件不可读)。

一个常见的选择是使用机器名作为区别,设置如下值 logs/geoserver_node1.loglogs/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