Browse Source

添加额外的日志库

Signed-off-by: allan716 <[email protected]>
allan716 4 years ago
parent
commit
b5d0acc109

+ 48 - 0
common/loghelper.go

@@ -0,0 +1,48 @@
+package common
+
+import (
+	rotatelogs "github.com/lestrrat-go/file-rotatelogs"
+	"github.com/sirupsen/logrus"
+	easy "github.com/t-tomalak/logrus-easy-formatter"
+	"io"
+	"os"
+	"path"
+	"time"
+)
+
+func NewLogHelper(appName string, level logrus.Level, maxAge time.Duration, rotationTime time.Duration) *logrus.Logger {
+
+	Logger := &logrus.Logger{
+		// Out:   os.Stderr,
+		// Level: logrus.DebugLevel,
+		Formatter: &easy.Formatter{
+			TimestampFormat: "2006-01-02 15:04:05",
+			LogFormat:       "[%lvl%]: %time% - %msg%\n",
+		},
+	}
+	nowpath, err := os.Getwd()
+	if err != nil {
+		panic(err)
+	}
+	pathRoot := path.Join(nowpath, "Logs")
+	fileAbsPath := path.Join(pathRoot, appName+".log")
+	// 下面配置日志每隔 X 分钟轮转一个新文件,保留最近 X 分钟的日志文件,多余的自动清理掉。
+	writer, _ := rotatelogs.New(
+		path.Join(pathRoot, appName+"--%Y%m%d%H%M--.log"),
+		rotatelogs.WithLinkName(fileAbsPath),
+		rotatelogs.WithMaxAge(maxAge),
+		rotatelogs.WithRotationTime(rotationTime),
+	)
+
+	Logger.SetLevel(level)
+	Logger.SetOutput(io.MultiWriter(os.Stderr, writer))
+
+	return Logger
+}
+func GetLogger() *logrus.Logger {
+	if logger == nil {
+		logger = NewLogHelper("ChineseSubFinder", logrus.DebugLevel, time.Duration(7*24)*time.Hour, time.Duration(24)*time.Hour)
+	}
+	return logger
+}
+var logger *logrus.Logger

+ 8 - 5
downloader.go

@@ -8,6 +8,7 @@ import (
 	"github.com/allanpk716/ChineseSubFinder/sub_supplier/xunlei"
 	"github.com/allanpk716/ChineseSubFinder/sub_supplier/zimuku"
 	"github.com/go-rod/rod/lib/utils"
+	"github.com/sirupsen/logrus"
 	"io/ioutil"
 	"os"
 	"path"
@@ -19,6 +20,7 @@ import (
 
 type Downloader struct {
 	reqParam common.ReqParam
+	log *logrus.Logger
 	topic int					// 最多能够下载 Top 几的字幕,每一个网站
 	wantedExtList []string		// 人工确认的需要监控的视频后缀名
 	defExtList []string			// 内置支持的视频后缀名列表
@@ -27,6 +29,7 @@ type Downloader struct {
 func NewDownloader(_reqParam ... common.ReqParam) *Downloader {
 
 	var downloader Downloader
+	downloader.log = common.GetLogger()
 	downloader.topic = common.DownloadSubsPerSite
 	if len(_reqParam) > 0 {
 		downloader.reqParam = _reqParam[0]
@@ -89,25 +92,25 @@ func (d Downloader) downloadSub4OneVideo(oneVideoFullPath string, suppliers []su
 	// 同时进行查询
 	wg := sync.WaitGroup{}
 	wg.Add(len(suppliers))
-	println("DlSub Start", oneVideoFullPath)
+	d.log.Infoln("DlSub Start", oneVideoFullPath)
 	for _, supplier := range suppliers {
 		supplier := supplier
 		go func() {
 			err := d.downloadSub4OneSite(oneVideoFullPath, i, supplier, &wg, ontVideoRootPath)
 			if err != nil {
-				println(err.Error())
+				d.log.Error(err)
 				return
 			}
 		}()
 	}
 	wg.Wait()
-	println(i, "DlSub End", oneVideoFullPath)
+	d.log.Infoln(i, "DlSub End", oneVideoFullPath)
 }
 
 // downloadSub4OneSite 在一个站点下载这个视频的字幕
 func (d Downloader) downloadSub4OneSite(oneVideoFullPath string, i int, supplier sub_supplier.ISupplier, wg *sync.WaitGroup, ontVideoRootPath string) error {
 	defer wg.Done()
-	println(i, supplier.GetSupplierName(), "Start...")
+	d.log.Infoln(i, supplier.GetSupplierName(), "Start...")
 	subInfos, err := supplier.GetSubListFromFile(oneVideoFullPath)
 	if err != nil {
 		return err
@@ -133,7 +136,7 @@ func (d Downloader) downloadSub4OneSite(oneVideoFullPath string, i int, supplier
 			}
 		}
 	}
-	println(i, supplier.GetSupplierName(), "End...")
+	d.log.Infoln(i, supplier.GetSupplierName(), "End...")
 	return nil
 }
 

+ 5 - 0
go.mod

@@ -7,6 +7,11 @@ require (
 	github.com/beevik/etree v1.1.0
 	github.com/go-resty/resty/v2 v2.6.0
 	github.com/go-rod/rod v0.97.2
+	github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible // indirect
+	github.com/lestrrat-go/strftime v1.0.4 // indirect
 	github.com/middelink/go-parse-torrent-name v0.0.0-20190301154245-3ff4efacd4c4
 	github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646
+	github.com/pkg/errors v0.9.1 // indirect
+	github.com/sirupsen/logrus v1.8.1 // indirect
+	github.com/t-tomalak/logrus-easy-formatter v0.0.0-20190827215021-c074f06c5816 // indirect
 )

+ 24 - 0
go.sum

@@ -4,14 +4,35 @@ github.com/andybalholm/cascadia v1.1.0 h1:BuuO6sSfQNFRu1LppgbD25Hr2vLYW25JvxHs5z
 github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y=
 github.com/beevik/etree v1.1.0 h1:T0xke/WvNtMoCqgzPhkX2r4rjY3GDZFi+FjpRZY2Jbs=
 github.com/beevik/etree v1.1.0/go.mod h1:r8Aw8JqVegEf0w2fDnATrX9VpkMcyFeM0FhwO62wh+A=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/go-resty/resty/v2 v2.6.0 h1:joIR5PNLM2EFqqESUjCMGXrWmXNHEU9CEiK813oKYS4=
 github.com/go-resty/resty/v2 v2.6.0/go.mod h1:PwvJS6hvaPkjtjNg9ph+VrSD92bi5Zq73w/BIH7cC3Q=
 github.com/go-rod/rod v0.97.2 h1:4AWtucf0fXKbdaEjNNhjIcdYXQyc4+yx8YYI73jyP5A=
 github.com/go-rod/rod v0.97.2/go.mod h1:DgPYd1ql/oCzGxrM5aiCcVM+kA4MFCJ+Mht7ZVBSiG0=
+github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
+github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
+github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
+github.com/lestrrat-go/strftime v1.0.4 h1:T1Rb9EPkAhgxKqbcMIPguPq8glqXTA1koF8n9BHElA8=
+github.com/lestrrat-go/strftime v1.0.4/go.mod h1:E1nN3pCbtMSu1yjSVeyuRFVm/U0xoR76fd03sz+Qz4g=
 github.com/middelink/go-parse-torrent-name v0.0.0-20190301154245-3ff4efacd4c4 h1:C/VViMMbR/4Ti2aXrWpKy34S05cRaVd6EvV9BFR3qJ8=
 github.com/middelink/go-parse-torrent-name v0.0.0-20190301154245-3ff4efacd4c4/go.mod h1:H66QhXPJpUSdWschhL6u//v3ge96/qMnQ9mWp3efbxA=
 github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
 github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
+github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
+github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
+github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/t-tomalak/logrus-easy-formatter v0.0.0-20190827215021-c074f06c5816 h1:J6v8awz+me+xeb/cUTotKgceAYouhIB3pjzgRd6IlGk=
+github.com/t-tomalak/logrus-easy-formatter v0.0.0-20190827215021-c074f06c5816/go.mod h1:tzym/CEb5jnFI+Q0k4Qq3+LvRF4gO3E2pxS8fHP8jcA=
 github.com/ysmood/goob v0.3.0 h1:XZ51cZJ4W3WCoCiUktixzMIQF86W7G5VFL4QQ/Q2uS0=
 github.com/ysmood/goob v0.3.0/go.mod h1:S3lq113Y91y1UBf1wj1pFOxeahvfKkCk6mTWTWbDdWs=
 github.com/ysmood/got v0.9.3 h1:qx51X49jL/WAiqZzPTkPZ0zp5pTmrWJa4zYFTYo0gHI=
@@ -28,7 +49,10 @@ golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLL
 golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 h1:4nGaVu0QrbjT/AK2PRLuQfQuh6DJve+pELhqTdAj3x0=
 golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44 h1:Bli41pIlzTzf3KEY06n+xnzK/BESIg2ze4Pgfh/aI8c=
 golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=

+ 4 - 1
sub_supplier/shooter/shooter.go

@@ -5,6 +5,7 @@ import (
 	"fmt"
 	"github.com/allanpk716/ChineseSubFinder/common"
 	"github.com/allanpk716/ChineseSubFinder/sub_supplier"
+	"github.com/sirupsen/logrus"
 	"math"
 	"os"
 	"path/filepath"
@@ -13,12 +14,14 @@ import (
 
 type Supplier struct {
 	reqParam common.ReqParam
+	log *logrus.Logger
 	topic int
 }
 
 func NewSupplier(_reqParam ... common.ReqParam) *Supplier {
 
 	sup := Supplier{}
+	sup.log = common.GetLogger()
 	sup.topic = common.DownloadSubsPerSite
 	if len(_reqParam) > 0 {
 		sup.reqParam = _reqParam[0]
@@ -73,7 +76,7 @@ func (s Supplier) GetSubListFromFile(filePath string) ([]sub_supplier.SubInfo, e
 
 			data, _, err := common.DownFile(file.Link)
 			if err != nil {
-				println(err.Error())
+				s.log.Error(err.Error())
 				continue
 			}
 			outSubInfoList = append(outSubInfoList, *sub_supplier.NewSubInfo(fileName, common.ChineseSimple, file.Link, 0, shooter.Delay, subExt, data))

+ 8 - 5
sub_supplier/subhd/subhd.go

@@ -9,6 +9,7 @@ import (
 	"github.com/go-rod/rod"
 	"github.com/go-rod/rod/lib/launcher"
 	"github.com/nfnt/resize"
+	"github.com/sirupsen/logrus"
 	"image/jpeg"
 	"io/ioutil"
 	"math"
@@ -23,6 +24,7 @@ import (
 
 type Supplier struct {
 	reqParam common.ReqParam
+	log *logrus.Logger
 	topic int
 	rodlauncher *launcher.Launcher
 }
@@ -30,6 +32,7 @@ type Supplier struct {
 func NewSupplier(_reqParam ... common.ReqParam) *Supplier {
 
 	sup := Supplier{}
+	sup.log = common.GetLogger()
 	sup.topic = common.DownloadSubsPerSite
 	if len(_reqParam) > 0 {
 		sup.reqParam = _reqParam[0]
@@ -62,7 +65,7 @@ func (s Supplier) GetSubListFromFile(filePath string) ([]sub_supplier.SubInfo, e
 	if err != nil {
 		// 允许的错误,跳过,继续进行文件名的搜索
 		if err == common.CanNotFindIMDBID {
-			println(err.Error())
+			s.log.Error(err.Error())
 		} else {
 			return nil, err
 		}
@@ -224,7 +227,7 @@ func (s Supplier) Step2(subDownloadPageUrl string) (*HdContent, error) {
 	// 是否有腾讯的防水墙
 	matchList := doc.Find("#TencentCaptcha")
 	if len(matchList.Nodes) < 1 {
-		println("qiang")
+		s.log.Debug("find fang shui qiang")
 	}
 	//matchList = doc.Find("#down")
 	//if len(matchList.Nodes) < 1 {
@@ -420,7 +423,7 @@ search:
 				abs(int(color_a_G)-int(color_b_G)) > threshold ||
 				abs(int(color_a_B)-int(color_b_B)) > threshold {
 				distance += float64(i)
-				//fmt.Printf("info: 對比完畢, 偏移量: %v\n", distance)
+				s.log.Debug("對比完畢, 偏移量: %v", distance)
 				break search
 			}
 		}
@@ -444,7 +447,7 @@ search:
 		if err == nil {
 			page.MustScreenshot(path.Join(nowProcessRoot, "result.png"))
 		} else {
-			println(err.Error())
+			s.log.Error(err)
 		}
 	}
 }
@@ -458,7 +461,7 @@ func (s Supplier) httpGet(url string) (string, error) {
 	}
 	//搜索验证 点击继续搜索
 	if strings.Contains(resp.String(), "搜索验证") {
-		println("搜索验证 reload", url)
+		s.log.Debug("搜索验证 reload", url)
 		return s.httpGet(url)
 	}
 	return resp.String(), nil

+ 4 - 1
sub_supplier/xunlei/xunlei.go

@@ -5,6 +5,7 @@ import (
 	"fmt"
 	"github.com/allanpk716/ChineseSubFinder/common"
 	"github.com/allanpk716/ChineseSubFinder/sub_supplier"
+	"github.com/sirupsen/logrus"
 	"math"
 	"os"
 	"path/filepath"
@@ -12,12 +13,14 @@ import (
 
 type Supplier struct {
 	reqParam common.ReqParam
+	log *logrus.Logger
 	topic int
 }
 
 func NewSupplier(_reqParam ... common.ReqParam) *Supplier {
 
 	sup := Supplier{}
+	sup.log = common.GetLogger()
 	sup.topic = common.DownloadSubsPerSite
 	if len(_reqParam) > 0 {
 		sup.reqParam = _reqParam[0]
@@ -76,7 +79,7 @@ func (s Supplier) GetSubListFromFile(filePath string) ([]sub_supplier.SubInfo, e
 		tmpLang := common.LangConverter(v.Language)
 		data, filename, err := common.DownFile(v.Surl)
 		if err != nil {
-			println(err.Error())
+			s.log.Error(err)
 			continue
 		}
 		ext := ""

+ 10 - 7
sub_supplier/zimuku/zimuku.go

@@ -5,6 +5,7 @@ import (
 	"github.com/PuerkitoBio/goquery"
 	"github.com/allanpk716/ChineseSubFinder/common"
 	"github.com/allanpk716/ChineseSubFinder/sub_supplier"
+	"github.com/sirupsen/logrus"
 	"path/filepath"
 	"regexp"
 	"sort"
@@ -13,12 +14,14 @@ import (
 
 type Supplier struct {
 	reqParam common.ReqParam
+	log *logrus.Logger
 	topic int
 }
 
 func NewSupplier(_reqParam ... common.ReqParam) *Supplier {
 
 	sup := Supplier{}
+	sup.log = common.GetLogger()
 	sup.topic = common.DownloadSubsPerSite
 	if len(_reqParam) > 0 {
 		sup.reqParam = _reqParam[0]
@@ -52,7 +55,7 @@ func (s Supplier) GetSubListFromFile(filePath string) ([]sub_supplier.SubInfo, e
 	if err != nil {
 		// 允许的错误,跳过,继续进行文件名的搜索
 		if err == common.CanNotFindIMDBID {
-			println(err.Error())
+			s.log.Error(err.Error())
 		} else {
 			return nil, err
 		}
@@ -101,7 +104,7 @@ func (s Supplier) GetSubListFromKeyword(keyword string) ([]sub_supplier.SubInfo,
 	for i := range subResult.SubInfos {
 		err = s.Step2(&subResult.SubInfos[i])
 		if err != nil {
-			println(err.Error())
+			s.log.Error(err.Error())
 			continue
 		}
 	}
@@ -132,7 +135,7 @@ func (s Supplier) GetSubListFromKeyword(keyword string) ([]sub_supplier.SubInfo,
 	for _, subInfo := range tmpSubInfo {
 		fileName, data, err := s.Step3(subInfo.SubDownloadPageUrl)
 		if err != nil {
-			println(err.Error())
+			s.log.Error(err.Error())
 			continue
 		}
 		// 默认都是包含中文字幕的,然后具体使用的时候再进行区分
@@ -265,7 +268,7 @@ func (s Supplier) Step2(subInfo *SubInfo) error {
 	re := regexp.MustCompile(`<a\s+id="down1"\s+href="([^"]*/dld/[\w]+\.html)"`)
 	matched := re.FindAllStringSubmatch(resp.String(), -1)
 	if matched == nil || len(matched) == 0 || len(matched[0]) == 0 {
-		println(detailUrl)
+		s.log.Debug(detailUrl)
 		return common.ZiMuKuDownloadUrlStep2NotFound
 	}
 	if strings.Contains(matched[0][1], "://") {
@@ -289,7 +292,7 @@ func (s Supplier) Step3(subDownloadPageUrl string) (string, []byte, error) {
 	re := regexp.MustCompile(`<li><a\s+rel="nofollow"\s+href="([^"]*/download/[^"]+)"`)
 	matched := re.FindAllStringSubmatch(resp.String(), -1)
 	if matched == nil || len(matched) == 0 || len(matched[0]) == 0 {
-		println(subDownloadPageUrl)
+		s.log.Debug(subDownloadPageUrl)
 		return "", nil, common.ZiMuKuDownloadUrlStep3NotFound
 	}
 	var filename string
@@ -299,12 +302,12 @@ func (s Supplier) Step3(subDownloadPageUrl string) (string, []byte, error) {
 	for i := 0; i < len(matched); i++ {
 		data, filename, err = common.DownFile(common.AddBaseUrl(common.SubZiMuKuRootUrl, matched[i][1]), s.reqParam)
 		if err != nil {
-			println("ZiMuKu Step3 DownloadFile", err)
+			s.log.Error("ZiMuKu Step3 DownloadFile", err)
 			continue
 		}
 		return filename, data, nil
 	}
-	println(subDownloadPageUrl)
+	s.log.Debug(subDownloadPageUrl)
 	return "", nil, common.ZiMuKuDownloadUrlStep3AllFailed
 }