配置日志记录
默认的 internal-logback.xml 文件是 ThingWorx .war 文件的一部分,用于配置 logback 子系统。要查找文件,请解压缩 Thingworx.war 文件,然后解压缩 WEB_INF/lib/thingworx-platform-common- [version_number] .jar
您可以将 internal-logback.xml 复制到 /ThingworxPlatform/logback.xml 并进行更改。这些 logback.xml 文件不会堆栈或互相继承。然后,可以将更新后的文件放置在每个 ThingWorx 实例的 ThingWorx 配置目录 default/ThingworxPlatform 中。
将日志级别更改为 DEBUG
您可以更改条目以将特定类的日志级别强制设置为 DEBUG。例如,可以将以下内容:
<logger name="org.springframework.security" level="INFO" additivity="false">
<appender-ref ref="ASYNC_APPENDER_SECURITY"/>
</logger>
更改为如下所示,使得 level="DEBUG":
<logger name="org.springframework.security" level="DEBUG" additivity="false">
<appender-ref ref="ASYNC_APPENDER_SECURITY"/>
</logger>
或者,您可以添加具有特定日志级别的新条目。例如:
<logger name="com.thingworx.security.authentication.sso" level="DEBUG" additivity="false">
<appender-ref ref="ASYNC_APPENDER_SECURITY"/>
</logger>
与此类似的包级别条目将打开该包及其子包的日志记录。
如需指定需要将信息显示在哪个日志中,可在 <appender-ref ref=" [附加器名称] "/> 中指定适当的附加器。可能的附加器有:
ASYNC_APPENDER_CONSOLE - 控制台输出
ASYNC_APPENDER_APPLICATION - 应用程序日志
ASYNC_APPENDER_ERROR - 错误日志
ASYNC_APPENDER_SECURITY - 安全日志
ASYNC_APPENDER_SCRIPT - 脚本日志
ASYNC_APPENDER_SCRIPT_ERROR - 脚本错误日志
ASYNC_APPENDER_CONFIGURATION - 配置日志
ASYNC_APPENDER_DATABASE - 数据库日志
ASYNC_APPENDER_COMMUNICATION - 通信日志
异步附件器
ThingWorx 将 logback 日志记录库与控制台和滚动文件附件器配合使用。这两个附件器均采用异步附件器进行封装,此附件器可用于断开日志请求者与实际日志写入的连接。日志请求者调用 AsyncAppender 上的 append(logEvent) 方法。此方法会将 logEvent 添加到 AsyncAppender 中的内部队列。因此,日志请求者可以继续其工作,而不必等待 logEvent 写入目标控制台或文件。在 AsyncAppender 中,内部线程从内部队列中拾取最早的 logEvent 并调用包含日志附件器控制台或文件上的 append(LogEvent) 。内部队列也可用作缓冲区,用于在每秒钟日志记录请求数超出内部附件器写入速度时防止活动内短脉冲期间丢失数据。有关详细信息,请参阅 https://logback.qos.ch/manual/appenders.html
您可以在 logback.xml 文件中配置 AsyncAppender 的下列参数:
您可以通过设置关联的环境变量来更改默认值。如果在 Eclipse 中运行服务器,则需要在 Run configuration/server/environment 中设置环境变量。
通过环境变量指定的值仅在服务器启动时才会被选取。因此,如果要在启动服务器后更改任何值,则必须重新启动该服务器。
用于滚动文件和存档的默认 logback 配置设置如下。您可以在 Composer 中的 “子系统” > LoggingSubsystem > “配置” > “日志保留设置” 下配置这些设置。
群集模式与单一服务器模式
在群集模式下,将会有多个实例将其日志写入单个文件中。要实现此目的,必须在 RollingFileAppender 配置中启用 prudent 标志;但存在以下限制:
prudent 模式下,不允许压缩文件。一个实例进行压缩时,另一个实例无法写入。
FileAppender 的文件属性必须为空白。大多数操作系统不允许文件在另一进程中打开的情况下对其进行重命名。
以下是通过 SizeAndTimeBasedRollingPolicy 在群集模式下配置 RollingFileAppender 的示例:
<!-- configuration appender -->
<appender name="CONFIGURATION" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- Support multiple-JVM writing to the same log file -->
<prudent>true</prudent>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>{LOG_PATH}/ConfigurationLog.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>{MAX_HISTORY_SIZE}</maxHistory>
<totalSizeCap>{TOTAL_SIZE_CAP}</totalSizeCap>
<maxFileSize>{MAX_FILE_SIZE}</maxFileSize>
</rollingPolicy>
<encoder class="com.thingworx.logging.ThingWorxPatternLayoutEncoder">
<pattern>{CONFIGURATION_LAYOUT_PATTERN}</pattern>
</encoder>
</appender>
在单一服务器模式下,启用的日志文件将放置在 {ThingworxStorage}/logs 下,且已移动的文件将放置在 {ThingworxStorage}/logs/archive 下。
以下是通过 SizeAndTimeBasedRollingPolicy 在单一服务器模式下配置 RollingFileAppender 的示例:
<!-- application appender -->
<appender name="APPLICATION" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>{LOG_PATH}/ApplicationLog.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>{LOG_PATH}/archives/ApplicationLog.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>{MAX_HISTORY_SIZE}</maxHistory>
<totalSizeCap>{TOTAL_SIZE_CAP}</totalSizeCap>
<maxFileSize>{MAX_FILE_SIZE}</maxFileSize>
</rollingPolicy>
<encoder class="com.thingworx.logging.ThingWorxPatternLayoutEncoder">
<pattern>{LAYOUT_PATTERN}</pattern>
</encoder>
</appender>