tomcat 中的 Logback 配置
Logback config in tomcat
我 运行 两个 Web 应用程序 Tomcat 7.
Tomcat有一个logback-access.xml
,它定义了两个appender。
我可以看到它在启动时被拾取 tomcat,并且 appender 配置被正确解析。
我的问题是,如何让 webapp 使用其中定义的附加程序?
我尝试将 <logger>
和 <root>
元素放入 logback-access
文件中,但这会产生错误:
no applicable action for [logger], current ElementPath is [[configuration][logger]]
,root
和 appender-ref
.
类似
我尝试将 logback.xml
文件放入我的 war 文件中,包括 WEB-INF/classes
和 WEB-INF
,但它似乎没有被拾取。
那么,我该如何正确配置呢?
Tomcat中的logback-access.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<append>true</append>
<file>${catalina.base}/logs/my=app.log</file>
<encoder>
<pattern>combined</pattern>
</encoder>
</appender>
<appender name="STASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>localhost:5044</destination>
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<!-- cut specific config -->
</providers>
</encoder>
</appender>
</configuration>
WEB-INF/classes
中的logback.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<logger name="my.package" level="DEBUG"/>
<logger name="com.amazonaws" level="INFO"/>
<!-- and several more loggers like this -->
<root level="DEBUG">
<appender-ref ref="FILE"/>
</root>
<root level="TRACE">
<appender-ref ref="STASH"/>
</root>
</configuration>
Logback-access与应用中的Logback无关;
它必须在应用程序服务器级别进行管理,包括以下 jars (docs):
To use logback-access with Tomcat, after downloading the logback distribution, place the files logback-core-1.2.3.jar
and logback-access-1.2.3.jar
under $TOMCAT_HOME/lib/
directory, where $TOMCAT_HOME
is the folder where you have installed Tomcat.
并使用与不包含任何记录器的 Logback 不同的语法配置它:
<configuration>
<!-- always a good activate OnConsoleStatusListener -->
<statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>access.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>access.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>combined</pattern>
</encoder>
</appender>
<appender-ref ref="FILE" />
</configuration>
有用吗?如果有效,请尝试根据您对 FILE
部分的需要进行更改。
对于 STASH
部分,这是一个不同的问题,因为它是 LogStash - 而不是 LogBack - 并且其中可能涉及其他集成问题。
尝试一步一个脚印
如果有人有类似的问题,我就把它留在这里。
首先,您根本不需要 logback-access.xml
或 tomcat 的 server.xml
中的 Valve。在您的应用中使用过滤器记录传入请求。
然后,如果您需要在服务器上而不是在应用程序中配置 appender,请设计一个 logback.xml
并将其放入 tomcat 的 lib
文件夹(通常是 /usr/share/java/tomcat
)。您的应用中不需要 logback.xml
。 logback-common
jar 可以在您的 war 中,也可以在 tomcat lib 文件夹中,随您喜欢。
这样,应用程序将在 tomcat 共享类路径中找到通用的 logback.xml
,并像包含在 war.
中一样使用它
我 运行 两个 Web 应用程序 Tomcat 7.
Tomcat有一个logback-access.xml
,它定义了两个appender。
我可以看到它在启动时被拾取 tomcat,并且 appender 配置被正确解析。
我的问题是,如何让 webapp 使用其中定义的附加程序?
我尝试将 <logger>
和 <root>
元素放入 logback-access
文件中,但这会产生错误:
no applicable action for [logger], current ElementPath is [[configuration][logger]]
,root
和 appender-ref
.
我尝试将 logback.xml
文件放入我的 war 文件中,包括 WEB-INF/classes
和 WEB-INF
,但它似乎没有被拾取。
那么,我该如何正确配置呢?
Tomcat中的logback-access.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<append>true</append>
<file>${catalina.base}/logs/my=app.log</file>
<encoder>
<pattern>combined</pattern>
</encoder>
</appender>
<appender name="STASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>localhost:5044</destination>
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<!-- cut specific config -->
</providers>
</encoder>
</appender>
</configuration>
WEB-INF/classes
中的logback.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<logger name="my.package" level="DEBUG"/>
<logger name="com.amazonaws" level="INFO"/>
<!-- and several more loggers like this -->
<root level="DEBUG">
<appender-ref ref="FILE"/>
</root>
<root level="TRACE">
<appender-ref ref="STASH"/>
</root>
</configuration>
Logback-access与应用中的Logback无关;
它必须在应用程序服务器级别进行管理,包括以下 jars (docs):
To use logback-access with Tomcat, after downloading the logback distribution, place the files
logback-core-1.2.3.jar
andlogback-access-1.2.3.jar
under$TOMCAT_HOME/lib/
directory, where$TOMCAT_HOME
is the folder where you have installed Tomcat.
并使用与不包含任何记录器的 Logback 不同的语法配置它:
<configuration>
<!-- always a good activate OnConsoleStatusListener -->
<statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>access.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>access.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>combined</pattern>
</encoder>
</appender>
<appender-ref ref="FILE" />
</configuration>
有用吗?如果有效,请尝试根据您对 FILE
部分的需要进行更改。
对于 STASH
部分,这是一个不同的问题,因为它是 LogStash - 而不是 LogBack - 并且其中可能涉及其他集成问题。
尝试一步一个脚印
如果有人有类似的问题,我就把它留在这里。
首先,您根本不需要 logback-access.xml
或 tomcat 的 server.xml
中的 Valve。在您的应用中使用过滤器记录传入请求。
然后,如果您需要在服务器上而不是在应用程序中配置 appender,请设计一个 logback.xml
并将其放入 tomcat 的 lib
文件夹(通常是 /usr/share/java/tomcat
)。您的应用中不需要 logback.xml
。 logback-common
jar 可以在您的 war 中,也可以在 tomcat lib 文件夹中,随您喜欢。
这样,应用程序将在 tomcat 共享类路径中找到通用的 logback.xml
,并像包含在 war.