Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Playframework 将api调用日志写入文件_Playframework_Sbt - Fatal编程技术网

Playframework 将api调用日志写入文件

Playframework 将api调用日志写入文件,playframework,sbt,Playframework,Sbt,这就是我试过的 ApiLogWriter.java package utils; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; public class ApiLogWriter { FileWriter fw; BufferedWriter bw; PrintWriter out;

这就是我试过的

ApiLogWriter.java

package utils;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class ApiLogWriter {
    FileWriter fw;
    BufferedWriter bw;
    PrintWriter out;

    public ApiLogWriter() {

        try {
            fw = new FileWriter("apiCallLog.txt", true);
            bw = new BufferedWriter(fw);
            out = new PrintWriter(bw);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    public void writeToFile(String apiString) {
        out.println(apiString);
        out.flush();
    }

    @Override
    protected void finalize() throws Throwable {
        if (out != null)
            out.close();
        if (bw != null)
            bw.close();
        if (fw != null)
            fw.close();
        super.finalize();
    }
}
ExampleFilter.java

package filters;

import akka.stream.Materializer;
import java.util.concurrent.CompletionStage;
import java.util.concurrent.Executor;
import java.util.function.Function;
import javax.inject.*;
import play.mvc.*;
import play.mvc.Http.RequestHeader;
import utils.ApiLogWriter;


/**
 * This is a simple filter that adds a header to all requests. It's
 * added to the application's list of filters by the
 * {@link ExampleFilters} class.
 */
@Singleton
public class ExampleFilter extends Filter {

    private final Executor exec;

    /**
     * @param mat This object is needed to handle streaming of requests
     * and responses.
     * @param exec This class is needed to execute code asynchronously.
     * It is used below by the <code>thenAsyncApply</code> method.
     */
    @Inject
    public ExampleFilter(Materializer mat, Executor exec) {
        super(mat);
        this.exec = exec;
    }

    @Inject
    private ApiLogWriter apiLogWriter;

    @Override
    public CompletionStage<Result> apply(
        Function<RequestHeader, CompletionStage<Result>> next,
        RequestHeader requestHeader) {
        apiLogWriter.writeToFile(requestHeader.path());
        return next.apply(requestHeader).thenApplyAsync(
            result -> result.withHeader("X-ExampleFilter", "foo"),
            exec
        );
    }

}
当我使用sbt Run运行该代码时,该代码工作正常,但在项目根/target/universal/stage/bin目录中的
sbt stage
之后启动时,该文件为空


请注意,我在dev模式下运行它时,for
fork in run:=false
,但在stage build中它是true

您确定查看了正确的文件吗?在服务器的当前工作目录中创建文件。。。因此,它可能在
Project\u Root/target/universal/stage/
文件夹中。是的,正在创建文件,但实际上它在Project\u Root/target/universal/stage/bin目录中是空的。您是否在配置中启用了过滤器?例如
play.filters.enabled+=filters.ExampleFilter
。不,这是在
application.conf
中使用的HOCON语法。看见