code: func (c *Context) Log() *log.Entry {
  	fields := log.Fields{"service": c.ServiceName}
  
  	if Config.Debug {
  		pc := make([]uintptr, 10)
  		runtime.Callers(2, pc)
  		f := runtime.FuncForPC(pc[0])
  		fields["file"], fields["line"] = f.FileLine(pc[0])
  		fields["func"] = f.Name()
  	}
  
  	if c.User.ID > 0 {
  		fields["user"] = c.User.ID
  	}
  	if c.Chat.ID != 0 {
  		fields["chat"] = c.Chat.ID
  	}
  	if c.Message != nil {
  		fields["msg"] = c.Message.GetTextHash()
  	}
  
  	if c.ChosenInlineResult != nil {
  		fields["chosenresult"] = c.ChosenInlineResult
  	}
  
  	if c.InlineQuery != nil {
  		fields["inlinequery"] = c.InlineQuery
  	}
  
  	if c.Callback != nil {
  		fields["callback"] = c.Callback.Data
  		fields["callback_id"] = c.Callback.ID
  
  		if c.Callback.Message.MsgID > 0 {
  			fields["callback_msgid"] = c.Callback.Message.MsgID
  		} else {
  			fields["callback_inlinemsgid"] = c.Callback.Message.InlineMsgID
  		}
  
  	}
  
  	if c.gin != nil {
  		fields["url"] = c.gin.Request.Method + " " + c.gin.Request.URL.String()
  		fields["ip"] = c.gin.Request.RemoteAddr
  	}
  
  	fields["domain"] = c.ServiceBaseURL.Host
  
  	return log.WithFields(fields)
  }
docs: // Log creates the logrus entry and attach corresponding info from the context