mirror of
https://github.com/SunBK201/UA3F.git
synced 2025-12-16 16:57:08 +00:00
feat: new log system
This commit is contained in:
parent
942bef9744
commit
a1af98f6c2
@ -19,6 +19,9 @@ export url='https://blog.sunbk201.site/cdn' && sh -c "$(curl -kfsSl $url/install
|
|||||||
- `-p <port>`: 端口号,默认 1080
|
- `-p <port>`: 端口号,默认 1080
|
||||||
- `-f <UA>`: 自定义 UA,默认 FFF
|
- `-f <UA>`: 自定义 UA,默认 FFF
|
||||||
- `-b <bind addr>`: 自定义绑定监听地址,默认 127.0.0.1
|
- `-b <bind addr>`: 自定义绑定监听地址,默认 127.0.0.1
|
||||||
|
- `-l <log level>`: 日志等级,默认 info,可选:debug
|
||||||
|
|
||||||
|
默认日志位置:`/var/log/ua3f.log`
|
||||||
|
|
||||||
### 手动启动
|
### 手动启动
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
11
build.sh
11
build.sh
@ -1,9 +1,10 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
project_name="ua3f"
|
project_name="ua3f"
|
||||||
release_version="0.0.4"
|
release_version="0.1.0"
|
||||||
|
target=cmd/ua3f.go
|
||||||
|
|
||||||
release_dir=./release
|
release_dir=./bin
|
||||||
rm -rf $release_dir/*
|
rm -rf $release_dir/*
|
||||||
mkdir -p $release_dir
|
mkdir -p $release_dir
|
||||||
|
|
||||||
@ -14,15 +15,15 @@ gofmt -w ./
|
|||||||
for goarch in "amd64" "arm" "arm64" "mipsle" "mips64" "riscv64" "386"; do
|
for goarch in "amd64" "arm" "arm64" "mipsle" "mips64" "riscv64" "386"; do
|
||||||
obj_name=$project_name
|
obj_name=$project_name
|
||||||
|
|
||||||
GOOS=linux GOARCH=$goarch go build -ldflags="-s -w"
|
GOOS=linux GOARCH=$goarch go build -ldflags="-s -w" $target
|
||||||
tar -zcf $release_dir/$project_name-$release_version-$goarch.tar.gz $obj_name
|
tar -zcf $release_dir/$project_name-$release_version-$goarch.tar.gz $obj_name
|
||||||
rm -f $obj_name
|
rm -f $obj_name
|
||||||
done
|
done
|
||||||
|
|
||||||
GOOS=linux GOARCH="mipsle" GOMIPS=softfloat go build -ldflags="-s -w"
|
GOOS=linux GOARCH="mipsle" GOMIPS=softfloat go build -ldflags="-s -w" $target
|
||||||
tar -zcf $release_dir/$project_name-$release_version-mipsle-softfloat.tar.gz $obj_name
|
tar -zcf $release_dir/$project_name-$release_version-mipsle-softfloat.tar.gz $obj_name
|
||||||
rm -f $obj_name
|
rm -f $obj_name
|
||||||
GOOS=linux GOARCH="mipsle" GOMIPS=hardfloat go build -ldflags="-s -w"
|
GOOS=linux GOARCH="mipsle" GOMIPS=hardfloat go build -ldflags="-s -w" $target
|
||||||
tar -zcf $release_dir/$project_name-$release_version-mipsle-hardfloat.tar.gz $obj_name
|
tar -zcf $release_dir/$project_name-$release_version-mipsle-hardfloat.tar.gz $obj_name
|
||||||
rm -f $obj_name
|
rm -f $obj_name
|
||||||
|
|
||||||
|
|||||||
@ -6,37 +6,39 @@ import (
|
|||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"log/syslog"
|
|
||||||
"net"
|
"net"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
"ua3f/http"
|
||||||
|
"ua3f/log"
|
||||||
|
|
||||||
"github.com/hashicorp/golang-lru/v2/expirable"
|
"github.com/hashicorp/golang-lru/v2/expirable"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
var version = "0.0.4"
|
var version = "0.1.0"
|
||||||
var payloadByte []byte
|
var payloadByte []byte
|
||||||
var cache *expirable.LRU[string, string]
|
var cache *expirable.LRU[string, string]
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
var payload string
|
var payload string
|
||||||
var addr string
|
var addr string
|
||||||
var port int
|
var port int
|
||||||
|
var loglevel string
|
||||||
|
|
||||||
flag.StringVar(&addr, "b", "127.0.0.1", "bind address (default: 127.0.0.1)")
|
flag.StringVar(&addr, "b", "127.0.0.1", "bind address (default: 127.0.0.1)")
|
||||||
flag.IntVar(&port, "p", 1080, "port")
|
flag.IntVar(&port, "p", 1080, "port")
|
||||||
flag.StringVar(&payload, "f", "FFF", "User-Agent")
|
flag.StringVar(&payload, "f", "FFF", "User-Agent")
|
||||||
|
flag.StringVar(&loglevel, "l", "info", "Log level (default: info)")
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
logger, err := syslog.Dial("", "", syslog.LOG_INFO, "UA3F")
|
log.SetLogConf(loglevel)
|
||||||
if err != nil {
|
|
||||||
fmt.Println("syslog error:", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
printAndLog("UA3F v"+version, logger, syslog.LOG_INFO)
|
logrus.Info("UA3F v" + version)
|
||||||
printAndLog(fmt.Sprintf("Port: %d", port), logger, syslog.LOG_INFO)
|
logrus.Info(fmt.Sprintf("Port: %d", port))
|
||||||
printAndLog(fmt.Sprintf("User-Agent: %s", payload), logger, syslog.LOG_INFO)
|
logrus.Info(fmt.Sprintf("User-Agent: %s", payload))
|
||||||
|
logrus.Info(fmt.Sprintf("Log level: %s", loglevel))
|
||||||
|
|
||||||
cache = expirable.NewLRU[string, string](100, nil, time.Second*600)
|
cache = expirable.NewLRU[string, string](100, nil, time.Second*600)
|
||||||
|
|
||||||
@ -44,32 +46,30 @@ func main() {
|
|||||||
|
|
||||||
server, err := net.Listen("tcp", fmt.Sprintf("%s:%d", addr, port))
|
server, err := net.Listen("tcp", fmt.Sprintf("%s:%d", addr, port))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
printAndLog(fmt.Sprintf("Listen failed: %v", err), logger, syslog.LOG_ERR)
|
logrus.Fatal("Listen failed: ", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
printAndLog(fmt.Sprintf("Listen on %s:%d", addr, port), logger, syslog.LOG_INFO)
|
logrus.Info(fmt.Sprintf("Listen on %s:%d", addr, port))
|
||||||
for {
|
for {
|
||||||
client, err := server.Accept()
|
client, err := server.Accept()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
printAndLog(fmt.Sprintf("Accept failed: %v", err), logger, syslog.LOG_ERR)
|
logrus.Error("Accept failed: ", err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
// printAndLog(fmt.Sprintf("Accept %s", client.RemoteAddr().String()), logger, syslog.LOG_DEBUG)
|
logrus.Debug(fmt.Sprintf("Accept %s", client.RemoteAddr().String()))
|
||||||
go process(client)
|
go process(client)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func process(client net.Conn) {
|
func process(client net.Conn) {
|
||||||
logger, _ := syslog.Dial("", "", syslog.LOG_INFO, "UA3F")
|
|
||||||
|
|
||||||
if err := Socks5Auth(client); err != nil {
|
if err := Socks5Auth(client); err != nil {
|
||||||
printAndLog(fmt.Sprintf("auth error: %v", err), logger, syslog.LOG_ERR)
|
logrus.Error("Auth failed: ", err)
|
||||||
client.Close()
|
client.Close()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
target, err := Socks5Connect(client)
|
target, err := Socks5Connect(client)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
printAndLog(fmt.Sprintf("connect error: %v", err), logger, syslog.LOG_ERR)
|
logrus.Error("Connect failed: ", err)
|
||||||
client.Close()
|
client.Close()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -171,11 +171,10 @@ func Socks5Forward(client, target net.Conn) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func CopyPileline(dst io.Writer, src io.Reader) {
|
func CopyPileline(dst io.Writer, src io.Reader) {
|
||||||
logger, _ := syslog.Dial("", "", syslog.LOG_INFO, "UA3F")
|
|
||||||
buf := make([]byte, 1024*8)
|
buf := make([]byte, 1024*8)
|
||||||
nr, err := src.Read(buf)
|
nr, err := src.Read(buf)
|
||||||
if err != nil && err != io.EOF {
|
if err != nil && err != io.EOF {
|
||||||
printAndLog(fmt.Sprintf("read error: %v", err), logger, syslog.LOG_ERR)
|
logrus.Error("read error: ", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
hint := string(buf[0:7])
|
hint := string(buf[0:7])
|
||||||
@ -194,13 +193,13 @@ func CopyPileline(dst io.Writer, src io.Reader) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
for {
|
for {
|
||||||
parser := NewHTTPParser()
|
parser := http.NewHTTPParser()
|
||||||
httpBodyOffset, err := parser.Parse(buf[0:nr])
|
httpBodyOffset, err := parser.Parse(buf[0:nr])
|
||||||
for err == ErrMissingData {
|
for err == http.ErrMissingData {
|
||||||
var m int
|
var m int
|
||||||
m, err = src.Read(buf[nr:])
|
m, err = src.Read(buf[nr:])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
printAndLog(fmt.Sprintf("read error: %v", err), logger, syslog.LOG_ERR)
|
logrus.Error("read error: ", err)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
nr += m
|
nr += m
|
||||||
@ -208,7 +207,7 @@ func CopyPileline(dst io.Writer, src io.Reader) {
|
|||||||
}
|
}
|
||||||
value, start, end := parser.FindHeader([]byte("User-Agent"))
|
value, start, end := parser.FindHeader([]byte("User-Agent"))
|
||||||
if value != nil && end > start {
|
if value != nil && end > start {
|
||||||
printAndLog(fmt.Sprintf("[%s] Hit User-Agent: %s", string(parser.Host()), string(value)), logger, syslog.LOG_INFO)
|
logrus.Debug(fmt.Sprintf("[%s] Hit User-Agent: %s", string(parser.Host()), string(value)))
|
||||||
for i := start; i < end; i++ {
|
for i := start; i < end; i++ {
|
||||||
buf[i] = 32
|
buf[i] = 32
|
||||||
}
|
}
|
||||||
@ -219,7 +218,7 @@ func CopyPileline(dst io.Writer, src io.Reader) {
|
|||||||
buf[start+i] = payloadByte[i]
|
buf[start+i] = payloadByte[i]
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
printAndLog(fmt.Sprintf("[%s] Not found User-Agent", string(parser.Host())), logger, syslog.LOG_INFO)
|
logrus.Debug(fmt.Sprintf("[%s] Not found User-Agent", string(parser.Host())))
|
||||||
dst.Write(buf[0:nr])
|
dst.Write(buf[0:nr])
|
||||||
io.Copy(dst, src)
|
io.Copy(dst, src)
|
||||||
cache.Add(string(dst.(*net.TCPConn).RemoteAddr().String()), string(dst.(*net.TCPConn).RemoteAddr().String()))
|
cache.Add(string(dst.(*net.TCPConn).RemoteAddr().String()), string(dst.(*net.TCPConn).RemoteAddr().String()))
|
||||||
@ -232,7 +231,7 @@ func CopyPileline(dst io.Writer, src io.Reader) {
|
|||||||
|
|
||||||
_, ew := dst.Write(buf[0:min(httpBodyOffset+bodyLen, nr)])
|
_, ew := dst.Write(buf[0:min(httpBodyOffset+bodyLen, nr)])
|
||||||
if ew != nil {
|
if ew != nil {
|
||||||
printAndLog(fmt.Sprintf("write error: %v", ew), logger, syslog.LOG_ERR)
|
logrus.Error("write error: ", ew)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
if httpBodyOffset+bodyLen > nr {
|
if httpBodyOffset+bodyLen > nr {
|
||||||
@ -240,12 +239,12 @@ func CopyPileline(dst io.Writer, src io.Reader) {
|
|||||||
for left > 0 {
|
for left > 0 {
|
||||||
m, err := src.Read(buf[0:left])
|
m, err := src.Read(buf[0:left])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
printAndLog(fmt.Sprintf("read error: %v", err), logger, syslog.LOG_ERR)
|
logrus.Error("read error: ", err)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
_, ew := dst.Write(buf[0:m])
|
_, ew := dst.Write(buf[0:m])
|
||||||
if ew != nil {
|
if ew != nil {
|
||||||
printAndLog(fmt.Sprintf("write error: %v", ew), logger, syslog.LOG_ERR)
|
logrus.Error("write error: ", ew)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
left -= m
|
left -= m
|
||||||
@ -261,7 +260,7 @@ func CopyPileline(dst io.Writer, src io.Reader) {
|
|||||||
m, err := src.Read(buf[nr:])
|
m, err := src.Read(buf[nr:])
|
||||||
nr += m
|
nr += m
|
||||||
if err != nil && err != io.EOF {
|
if err != nil && err != io.EOF {
|
||||||
printAndLog(fmt.Sprintf("read error: %v", err), logger, syslog.LOG_ERR)
|
logrus.Error("read error: ", err)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
if err == io.EOF {
|
if err == io.EOF {
|
||||||
@ -269,29 +268,3 @@ func CopyPileline(dst io.Writer, src io.Reader) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func printAndLog(mes string, logger *syslog.Writer, level syslog.Priority) {
|
|
||||||
fmt.Println(mes)
|
|
||||||
var err error
|
|
||||||
switch level {
|
|
||||||
case syslog.LOG_INFO:
|
|
||||||
err = logger.Info(mes)
|
|
||||||
case syslog.LOG_ERR:
|
|
||||||
err = logger.Err(mes)
|
|
||||||
case syslog.LOG_DEBUG:
|
|
||||||
err = logger.Debug(mes)
|
|
||||||
case syslog.LOG_WARNING:
|
|
||||||
err = logger.Warning(mes)
|
|
||||||
case syslog.LOG_CRIT:
|
|
||||||
err = logger.Crit(mes)
|
|
||||||
case syslog.LOG_ALERT:
|
|
||||||
err = logger.Alert(mes)
|
|
||||||
case syslog.LOG_EMERG:
|
|
||||||
err = logger.Emerg(mes)
|
|
||||||
case syslog.LOG_NOTICE:
|
|
||||||
err = logger.Notice(mes)
|
|
||||||
}
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println("syslog error:", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
7
go.mod
7
go.mod
@ -2,4 +2,9 @@ module ua3f
|
|||||||
|
|
||||||
go 1.21.3
|
go 1.21.3
|
||||||
|
|
||||||
require github.com/hashicorp/golang-lru/v2 v2.0.7
|
require (
|
||||||
|
github.com/hashicorp/golang-lru/v2 v2.0.7
|
||||||
|
github.com/sirupsen/logrus v1.9.3
|
||||||
|
)
|
||||||
|
|
||||||
|
require golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect
|
||||||
|
|||||||
15
go.sum
15
go.sum
@ -1,2 +1,17 @@
|
|||||||
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
|
github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
|
||||||
github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
|
github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
|
||||||
|
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||||
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
|
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
||||||
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
|
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ=
|
||||||
|
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
|
||||||
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
package main
|
package http
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
@ -16,13 +16,14 @@ getcpucore() {
|
|||||||
cd /root
|
cd /root
|
||||||
getcpucore
|
getcpucore
|
||||||
|
|
||||||
version=0.0.4
|
version=0.1.0
|
||||||
ua3f_tar=ua3f-$version-$cpucore.tar.gz
|
ua3f_tar=ua3f-$version-$cpucore.tar.gz
|
||||||
|
|
||||||
if [ -f "ua3f" ]; then
|
if [ -f "ua3f" ]; then
|
||||||
rm "ua3f"
|
rm "ua3f"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
chmod ugo+w /var/log
|
||||||
if [ -f "/var/log/ua3f.log" ]; then
|
if [ -f "/var/log/ua3f.log" ]; then
|
||||||
rm "/var/log/ua3f.log"
|
rm "/var/log/ua3f.log"
|
||||||
fi
|
fi
|
||||||
@ -31,7 +32,7 @@ if [ -f "$ua3f_tar" ]; then
|
|||||||
rm "$ua3f_tar"
|
rm "$ua3f_tar"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
wget https://fastly.jsdelivr.net/gh/SunBK201/UA3F@master/release/$ua3f_tar
|
wget https://blog.sunbk201.site/cdn/bin/$ua3f_tar
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo "Download UA3F Failed, Please Retry."
|
echo "Download UA3F Failed, Please Retry."
|
||||||
exit 1
|
exit 1
|
||||||
@ -42,7 +43,7 @@ chmod +x ua3f
|
|||||||
if [ -f "ua3f.service" ]; then
|
if [ -f "ua3f.service" ]; then
|
||||||
rm "ua3f.service"
|
rm "ua3f.service"
|
||||||
fi
|
fi
|
||||||
wget https://fastly.jsdelivr.net/gh/SunBK201/UA3F@master/ua3f.service
|
wget https://blog.sunbk201.site/cdn/ua3f.service
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo "Download ua3f.service Failed, Please Retry."
|
echo "Download ua3f.service Failed, Please Retry."
|
||||||
exit 1
|
exit 1
|
||||||
|
|||||||
57
log/log.go
Normal file
57
log/log.go
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
package log
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
|
)
|
||||||
|
|
||||||
|
type uctFormatter struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (formatter *uctFormatter) Format(entry *logrus.Entry) ([]byte, error) {
|
||||||
|
var b *bytes.Buffer
|
||||||
|
if entry.Buffer != nil {
|
||||||
|
b = entry.Buffer
|
||||||
|
} else {
|
||||||
|
b = &bytes.Buffer{}
|
||||||
|
}
|
||||||
|
formatTime := entry.Time.Format("2006-01-02 15:04:05")
|
||||||
|
b.WriteString(fmt.Sprintf("[%s][%s]: %s\n", formatTime, strings.ToUpper(entry.Level.String()), entry.Message))
|
||||||
|
return b.Bytes(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetLogConf(level string) {
|
||||||
|
writer1 := &bytes.Buffer{}
|
||||||
|
writer2 := os.Stdout
|
||||||
|
writer3, err := os.OpenFile("/var/log/ua3f.log", os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0755)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("create file ua3f.log failed: %v", err)
|
||||||
|
}
|
||||||
|
logrus.SetOutput(io.MultiWriter(writer1, writer2, writer3))
|
||||||
|
formatter := &uctFormatter{}
|
||||||
|
logrus.SetFormatter(formatter)
|
||||||
|
switch level {
|
||||||
|
case "trace":
|
||||||
|
logrus.SetLevel(logrus.TraceLevel)
|
||||||
|
case "debug":
|
||||||
|
logrus.SetLevel(logrus.DebugLevel)
|
||||||
|
case "info":
|
||||||
|
logrus.SetLevel(logrus.InfoLevel)
|
||||||
|
case "warn":
|
||||||
|
logrus.SetLevel(logrus.WarnLevel)
|
||||||
|
case "error":
|
||||||
|
logrus.SetLevel(logrus.ErrorLevel)
|
||||||
|
case "fatal":
|
||||||
|
logrus.SetLevel(logrus.FatalLevel)
|
||||||
|
case "panic":
|
||||||
|
logrus.SetLevel(logrus.PanicLevel)
|
||||||
|
default:
|
||||||
|
logrus.SetLevel(logrus.InfoLevel)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -5,11 +5,11 @@ START=99
|
|||||||
start() {
|
start() {
|
||||||
echo "ua3f is starting"
|
echo "ua3f is starting"
|
||||||
if id -u shellclash >/dev/null 2>&1; then
|
if id -u shellclash >/dev/null 2>&1; then
|
||||||
sudo -u shellclash /root/ua3f >/var/log/ua3f.log 2>&1 &
|
sudo -u shellclash /root/ua3f >/dev/null 2>&1 &
|
||||||
elif id -u nobody >/dev/null 2>&1; then
|
elif id -u nobody >/dev/null 2>&1; then
|
||||||
sudo -u nobody /root/ua3f >/var/log/ua3f.log 2>&1 &
|
sudo -u nobody /root/ua3f >/dev/null 2>&1 &
|
||||||
else
|
else
|
||||||
/root/ua3f >/var/log/ua3f.log 2>&1 &
|
/root/ua3f >/dev/null 2>&1 &
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user