1// Copyright 2017 The Gitea Authors. All rights reserved.
2// Use of this source code is governed by a MIT-style
3// license that can be found in the LICENSE file.
4
5package db
6
7import (
8	"fmt"
9
10	"code.gitea.io/gitea/modules/log"
11
12	xormlog "xorm.io/xorm/log"
13)
14
15// XORMLogBridge a logger bridge from Logger to xorm
16type XORMLogBridge struct {
17	showSQL bool
18	logger  log.Logger
19}
20
21// NewXORMLogger inits a log bridge for xorm
22func NewXORMLogger(showSQL bool) xormlog.Logger {
23	return &XORMLogBridge{
24		showSQL: showSQL,
25		logger:  log.GetLogger("xorm"),
26	}
27}
28
29const stackLevel = 8
30
31// Log a message with defined skip and at logging level
32func (l *XORMLogBridge) Log(skip int, level log.Level, format string, v ...interface{}) error {
33	return l.logger.Log(skip+1, level, format, v...)
34}
35
36// Debug show debug log
37func (l *XORMLogBridge) Debug(v ...interface{}) {
38	_ = l.Log(stackLevel, log.DEBUG, fmt.Sprint(v...))
39}
40
41// Debugf show debug log
42func (l *XORMLogBridge) Debugf(format string, v ...interface{}) {
43	_ = l.Log(stackLevel, log.DEBUG, format, v...)
44}
45
46// Error show error log
47func (l *XORMLogBridge) Error(v ...interface{}) {
48	_ = l.Log(stackLevel, log.ERROR, fmt.Sprint(v...))
49}
50
51// Errorf show error log
52func (l *XORMLogBridge) Errorf(format string, v ...interface{}) {
53	_ = l.Log(stackLevel, log.ERROR, format, v...)
54}
55
56// Info show information level log
57func (l *XORMLogBridge) Info(v ...interface{}) {
58	_ = l.Log(stackLevel, log.INFO, fmt.Sprint(v...))
59}
60
61// Infof show information level log
62func (l *XORMLogBridge) Infof(format string, v ...interface{}) {
63	_ = l.Log(stackLevel, log.INFO, format, v...)
64}
65
66// Warn show warning log
67func (l *XORMLogBridge) Warn(v ...interface{}) {
68	_ = l.Log(stackLevel, log.WARN, fmt.Sprint(v...))
69}
70
71// Warnf show warnning log
72func (l *XORMLogBridge) Warnf(format string, v ...interface{}) {
73	_ = l.Log(stackLevel, log.WARN, format, v...)
74}
75
76// Level get logger level
77func (l *XORMLogBridge) Level() xormlog.LogLevel {
78	switch l.logger.GetLevel() {
79	case log.TRACE, log.DEBUG:
80		return xormlog.LOG_DEBUG
81	case log.INFO:
82		return xormlog.LOG_INFO
83	case log.WARN:
84		return xormlog.LOG_WARNING
85	case log.ERROR, log.CRITICAL:
86		return xormlog.LOG_ERR
87	}
88	return xormlog.LOG_OFF
89}
90
91// SetLevel set the logger level
92func (l *XORMLogBridge) SetLevel(lvl xormlog.LogLevel) {
93}
94
95// ShowSQL set if record SQL
96func (l *XORMLogBridge) ShowSQL(show ...bool) {
97	if len(show) > 0 {
98		l.showSQL = show[0]
99	} else {
100		l.showSQL = true
101	}
102}
103
104// IsShowSQL if record SQL
105func (l *XORMLogBridge) IsShowSQL() bool {
106	return l.showSQL
107}
108