1

IBM Rational Application Developer (RAD) を使用して動的 Web プロジェクトを作成しました。ロギング フレームワークとして Logback を使用しました。logback.xml を WEB-INF/classes に配置しました。ただし、アプリケーションはこの構成ファイルを取得しません。ロギング インフラメーションはコンソールに記録されます。しかし、これがファイルに記録されることを期待しています。以下の logback.xml を参照してください。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <appender name="FILE"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>myApp.log</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>%d{yyyy-MM-dd_HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
        </encoder>

        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <FileNamePattern>myApp.%i.log.zip</FileNamePattern>
            <MinIndex>1</MinIndex>
            <MaxIndex>10</MaxIndex>
        </rollingPolicy>

        <triggeringPolicy
            class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>2MB</MaxFileSize>
        </triggeringPolicy>

    </appender>

    <logger name="com.nyl.ltc.logging.handler" level="ALL" />

    <root level="INFO">
        <appender-ref ref="FILE" />
    </root>

</configuration>

次のjarをWEB-INF/libに配置しました

  1. logback-classic-1.0.11.jar
  2. logback-core-1.0.11.jar
  3. slf4j-api-1.7.5.jar

WebSphere Application Server v7.0 を使用しています。

この問題を解決するのを手伝ってください。

注: RAD の内部ブラウ​​ザーでアプリケーションを実行します。

4

3 に答える 3

0

ServletContextListener を使用して、logback をコンテキストに設定できます。

web.xml

<context-param>
    <param-name>logbackLocation</param-name>
    <param-value>/WEB-INF/classes/logback.xml</param-value>
</context-param>

<listener>
    <listener-class>com.listener.LogbackListener</listener-class>
</listener>

LogbackListener

package com.listener;

import java.io.*;
import java.net.URL;
import javax.servlet.*;
import org.slf4j.*
import ch.qos.logback.*;

public class LogbackListener implements ServletContextListener {
    public static final String CONFIG_LOCATION = "logbackLocation";

    public void contextInitialized(ServletContextEvent sce) {
        ServletContext servletContext = sce.getServletContext();
        LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
        String location = servletContext.getInitParameter(CONFIG_LOCATION);
        // check location

        InputStream inputStream = openInputStream(servletContext, location);
        // check inputStream
        try {
            configureLogback(/*params*/);
        } finally {
            try {
                inputStream.close();
            } catch (IOException e) {
                 servletContext.log("Could not close logback config inputstream.", e);
            }
        }
    }

    private InputStream openInputStream(ServletContext servletContext, String location) {
        InputStream inputStream = null;
        if (location == null)
            return inputStream;
        if (location.startsWith("/"))
            inputStream = servletContext.getResourceAsStream(location);
        else
            try {
                inputStream = new URL(location).openStream();
            } catch (IOException e) {
            //ommited
            }
        if (inputStream == null)
            try {
                inputStream = new FileInputStream(location);
            } catch (FileNotFoundException e) {
            //ommited
            }
        return inputStream;
    }

    private void configureLogback(/*params*/) {
        //implementation ommited
    }

     public void contextDestroyed(ServletContextEvent sce) {
        LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
        loggerContext.stop();
    }
}
于 2013-04-09T14:19:51.237 に答える
0

共有ライブラリを Websphere 管理コンソールの logback.xml に追加します。

于 2019-08-16T10:57:29.030 に答える