自定义日志格式的方法取决于你使用的编程语言或日志框架。下面我以常见的几种场景为例,说明如何自定义日志格式。如果你能告诉我具体语言或框架,我可以给更精确的示例。
自定义日志格式通常可以设置以下内容:
import logging
logging.basicConfig(
format='%(asctime)s [%(levelname)s] %(name)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
level=logging.INFO
)
logging.info("这是一条自定义格式的日志")
输出示例:
2026-01-21 10:30:00 [INFO] root - 这是一条自定义格式的日志
format='%(asctime)s [%(levelname)s] %(filename)s:%(lineno)d - %(message)s'
<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>
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger - %msg%n"/>
const winston = require('winston');
const logger = winston.createLogger({
format: winston.format.combine(
winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
winston.format.printf(info => {
return `${info.timestamp} [${info.level.toUpperCase()}] ${info.message}`;
})
),
transports: [new winston.transports.Console()]
});
logger.info('自定义日志格式');
logger := slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
ReplaceAttr: func(groups []string, a slog.Attr) slog.Attr {
if a.Key == slog.TimeKey {
return slog.Attr{}
}
return a
},
}))
logger.Info("自定义日志")
| 占位符 | 含义 |
|---|---|
| %(asctime)s | 时间 |
| %(levelname)s | 日志级别 |
| %(message)s | 日志内容 |
| %(filename)s | 文件名 |
| %(lineno)d | 行号 |
| %(threadName)s | 线程名 |
✅ 生产环境推荐 JSON 格式日志(便于 ELK / Loki)
✅ 包含 traceId / requestId
✅ 时间统一使用 ISO8601
✅ 避免打印敏感信息(密码、token)
如果你能告诉我:
我可以帮你直接写一份可直接使用的配置模板。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。