温馨提示×

如何配置日志格式

小樊
52
2026-08-17 21:27:33
栏目: 编程语言

“如何配置日志格式”取决于你使用的具体技术栈。下面我按最常见的几种场景给你说明,你可以直接跳到对应部分;如果不在其中,告诉我你用的是哪种语言/框架,我可以给你更精准的配置。


一、Python(logging 模块)

1️⃣ 基础配置(dict / basicConfig)

import logging

logging.basicConfig(
    format='%(asctime)s [%(levelname)s] %(name)s - %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S',
    level=logging.INFO
)

logger = logging.getLogger(__name__)
logger.info("这是一条日志")

2️⃣ 常用日志格式字段

字段 含义
%(asctime)s 时间
%(levelname)s 日志级别
%(name)s logger 名称
%(message)s 日志内容
%(filename)s 文件名
%(lineno)d 行号

3️⃣ 推荐生产格式(JSON)

import logging
import json

class JsonFormatter(logging.Formatter):
    def format(self, record):
        log = {
            "time": self.formatTime(record),
            "level": record.levelname,
            "message": record.getMessage()
        }
        return json.dumps(log, ensure_ascii=False)

handler = logging.StreamHandler()
handler.setFormatter(JsonFormatter())

logger = logging.getLogger()
logger.addHandler(handler)
logger.setLevel(logging.INFO)

✅ 适合接入 ELK / Loki


二、Java(Logback / Log4j2)

✅ Logback(最常见)

logback.xml

<configuration>
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>
                %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
            </pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

✅ JSON 格式(Logstash)

<encoder class="net.logstash.logback.encoder.LogstashEncoder"/>

三、Spring Boot

application.yml

logging:
  pattern:
    console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger - %msg%n"
  level:
    root: INFO

四、Node.js(Winston)

const winston = require('winston');

const logger = winston.createLogger({
  format: winston.format.combine(
    winston.format.timestamp(),
    winston.format.printf(info => 
      `${info.timestamp} [${info.level}] ${info.message}`
    )
  ),
  transports: [new winston.transports.Console()]
});

✅ JSON:

format: winston.format.json()

五、Nginx

http {
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer"';
    access_log /var/log/nginx/access.log main;
}

六、通用推荐格式(生产环境)

人类可读

2026-01-21 10:30:00 [INFO] com.xxx.Service - 用户登录成功

机器可读(推荐)

{
  "time": "2026-01-21T10:30:00",
  "level": "INFO",
  "service": "user-service",
  "message": "用户登录成功"
}

七、我可以进一步帮你

你可以直接告诉我:

  1. ✅ 使用的语言 / 框架(如 Python + FastAPI)
  2. ✅ 输出方式(控制台 / 文件 / ELK / Loki)
  3. ✅ 是否需要 JSON 格式

我可以给你可直接复制使用的完整配置

0