Gado back-end projeto de rede do cliente de combate (VII): técnicas de projeto de depuração

técnicas de depuração do projeto

  • Significado código de status de resposta
  • habilidades de depuração ponto de interrupção do servidor
  • As habilidades de depuração ponto de interrupção cliente
  • Defina o nível de log e log saída para um terminal diferente

O código de status de resposta

Ou os documentos mencionados anteriormente, o código de status de resposta HTTP indica uma específica HTTP solicitação é concluída com êxito. Response é dividido em cinco categorias: resposta da informação ( 100- 199), uma resposta bem sucedida ( 200- 299), redirecionamento ( 300- 399), erro do cliente ( 400- 499) e erros de servidor ( 500- 599).

arquivo

Alguns comum:

  • 200 OK
    • Pedido foi bem sucedida. O significado depende do sucesso dos métodos HTTP:
    • GET: recursos foram extraídos e transmitidos no corpo da mensagem.
    • CABEÇA: o cabeçalho entidade situada no corpo da mensagem.
    • POST: Descrição do recurso de transmissão resultado da operação no corpo da mensagem.
    • TRACE: corpo da mensagem contém uma mensagem de solicitação de servidor recebido
  • 302 Found
    • Agora solicitação de recurso temporária resposta a um pedido de um URI diferente. Devido a esse redirecionamento é depois temporária, o cliente deve continuar a ser enviado para o endereço da solicitação original. Quando apenas é especificado no cache-Control ou expira nesta resposta é cacheável.
  • 404 não encontrado
    • Solicitação falhar, o pedido teria gostado recurso não for encontrado no servidor. A informação não pode dizer no usuário final desta situação é temporária ou permanente. Se o servidor conhece o caso, o código de status 410 deve ser utilizado para informar o mecanismo de alocação de recursos de idade por causa de alguns problemas internos, ele tem permanentemente indisponíveis, e nenhum endereço pode saltar. Esse código de status 404 é amplamente utilizado no caso em que o servidor não quer revelar por que o pedido foi negado no final ou qualquer outra resposta adequada disponível.
  • Erro 500 Internal Server
    • O servidor encontrou não sabe como lidar com a situação.

servidor breakpoint

Durante o desenvolvimento, às vezes você precisa para solucionar um problema, podemos usar pontos de interrupção. Breakpoint depuração é colocar em uma linha de pontos de interrupção de código, a execução do programa vai fazer uma pausa para pontos de interrupção do jogo, e exibir dados relevantes. Para IDEA, por exemplo, é um ponto de ruptura na linha ao lado de um clique, você pode definir um ponto de interrupção.

Mais do que um exemplo HomeController escrito, eu definir um ponto de interrupção na posição, como mostrado, em seguida, o programa será executado no modo de depuração, as teclas de atalho Shift + F9 ou pequenos insetos como botão clique no canto superior direito.

Em seguida, abra o navegador e ir para casa para deixar a execução do programa que defina o ponto de interrupção, o programa pode ser visto preso no intervalo desta linha, e os shows de fundo o número atual de objetos, como objetos da página, podemos apontar a visão aberta do valor objeto da página . Ver esta linha não encontrou nenhum problema, você pode usar as teclas de atalho ou clicando em um botão ou inserir uma linha saindo da linha interior de código. Estes botões são utilizados por conta própria como praticar. Incluindo funcional canto inferior esquerdo, você pode gerenciar pontos de interrupção.

Pontos de interrupção de cliente

A quebra de cliente e servidor quase, abra um navegador para entrar na casa inspecção, encontrou arquivo js na fonte, clique no número da linha para definir um ponto de interrupção após a atualização ponto de interrupção será preso no mesmo run-down e digite o código.

revista

Antes de depuração ponto de interrupção, o melhor é ver o registo, um livro de registo não consegue entender Baidu. springboot suporta várias ferramentas de registro, o padrão é logback

Logback site oficial

Há cinco níveis de log pode ver, podemos usar diferentes níveis no desenvolvimento e on-line, você pode fácil de desenvolver,

  • trace trace
  • a depuração
  • informações normais
  • advirta aviso
  • error error

A nossa primeira experiência em uma classe de teste, e em seguida, configurá-lo no log application.properties nível e log caminho de armazenamento

package com.neu.langsam.community;


import org.junit.Test;
import org.slf4j.Logger;

import org.junit.runner.RunWith;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration(classes = CommunityApplication.class)
public class LoggerTests {
	
    //新建一个logger类
    private static final Logger logger= LoggerFactory.getLogger(LoggerTests.class);

    @Test
    public void testLogger(){
        System.out.println(logger.getName());

        logger.debug("debug log");
        logger.info("info log");
        logger.warn("warn log");
        logger.error("error log");


    }
}

# logger
logging.level.com.neu.langsam.community=debug
logging.file.name=d:/workspace/community.log

No desenvolvimento real, a necessidade de separar os vários níveis de logs que usam essa abordagem não é suficiente, você precisa escrever o arquivo de configuração, complexo, diretamente copiar ready-made, alterá-lo. logback-spring.xml no recurso, a principal mudança é o início do caminho e o nome do projeto local, e nome do pacote no final.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <contextName>community</contextName>
    <property name="LOG_PATH" value="D:/workspace"/>
    <property name="APPDIR" value="community"/>

    <!-- error file -->
    <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/${APPDIR}/log_error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/${APPDIR}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>5MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <append>true</append>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>error</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- warn file -->
    <appender name="FILE_WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/${APPDIR}/log_warn.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/${APPDIR}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>5MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <append>true</append>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>warn</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- info file -->
    <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/${APPDIR}/log_info.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/${APPDIR}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>5MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <append>true</append>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>info</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- console -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>debug</level>
        </filter>
    </appender>

    <logger name="com.neu.langsam.community" level="debug"/>

    <root level="info">
        <appender-ref ref="FILE_ERROR"/>
        <appender-ref ref="FILE_WARN"/>
        <appender-ref ref="FILE_INFO"/>
        <appender-ref ref="STDOUT"/>
    </root>

</configuration>

Eu, então, a saída para o diretório do projeto.

Publicado 12 artigos originais · ganhou elogios 0 · Visualizações 102

Acho que você gosta

Origin blog.csdn.net/weixin_42700635/article/details/104805400
Recomendado
Clasificación