如何在访问日志中打印每个请求

时间:2019-05-03 11:10:02

标签: rest spring-boot

我有一个服务AccessLogsApplication,其中有一个控制器HelloWorld。我想在春季启动时将每个传入请求打印在名为access_log.log的单独日志文件中。

@RestController
public class HelloWorld {

private static final Logger log = LoggerFactory.getLogger(HelloWorld.class);

@RequestMapping(value = "/hello/1", method = RequestMethod.GET)
public String getHello() {
    log.info("In method 1");
    return "helloWorld";
}

@RequestMapping(value = "/hello/2", method = RequestMethod.GET)
public String getHelloFromUser() {
    log.info("In method 2");
    return "helloWorld From Sudhanshu Saini";
 }
}

这是我的application.properties

spring.application.name=HelloWorld
server.port=8080

server.tomcat.accesslog.buffered=true
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.directory=logs
server.tomcat.accesslog.prefix=access_log
server.tomcat.accesslog.suffix=.log
server.tomcat.accesslog.pattern="%h %l %u %t %r %s %b %D"


logging.level.root=warn
logging.level.com.saini.access_logs=debug

logging.path=logs
logging.file=${logging.path}/hello_service.log

我想记录此服务的每个即将来临的请求。 像这样(这是我手动编写的,无法访问日志)-

  [03/May/2019:16:37:52 +0530] "GET /hello/1 HTTP/1.0" 200 2
  [03/May/2019:16:37:52 +0530] "GET /hello/2 HTTP/1.0" 200 2

访问日志在Spring Boot中不起作用。它没有创建文件access_log.log

4 个答案:

答案 0 :(得分:1)

还有SLF4J库,而不是使用java.util中的标准日志记录。这里有三种带有日志记录事件的材料:

也许会有所帮助:)

答案 1 :(得分:0)

请配置 server.tomcat.basedir =目录路径

例如:server.tomcat.basedir = tomcat

答案 2 :(得分:0)

将这些添加到application.properties以启用tomcat访问日志

<template>
    <v-flex xs12 sm6>
        <v-select v-model="selected" :items="data"
                  :label="label"
                  :multiple="multiple"
                  :chips="chips"
                  :hint="hint"
                  :persistent-hint="persistentHint"
                  :counter="counter"
                  :dark="dark"
        ></v-select>
    </v-flex>
</template>
<script>
    export default {
        props: {
            label: {
                default: false,
                type: String|Boolean
            },
            multiple: {
                default: true,
                type: Boolean
            },
            chips: {
                default: true,
                type: Boolean
            },
            hint: {
                default: '',
                type: String|Boolean
            },
            persistentHint: {
                default: this.hint !== '' || this.hint !== false,
                type: String|Boolean
            },
            counter: {
                default: false,
                type: Number|Boolean
            },
            dark: {
                default: false,
                type: Boolean
            },
        },
        data: function() {
            return {
                selected: [ ],
                data: [
                    'test', 'test2', 'test3'
                ]
            }
        }
    }
</script>

答案 3 :(得分:-1)

您将需要将适当的字符串传递给环境。当您通常不希望在一行中获得所有标题时,将使用其标题提供标题。如果您需要更多功能,则很可能也可以使用您的应用程序将其记录下来。 check here