diff --git a/HISTORY.md b/HISTORY.md
index fcccde5f..5de66125 100644
--- a/HISTORY.md
+++ b/HISTORY.md
@@ -29,7 +29,7 @@ The codebase for Dependency Injection, Internationalization and localization and
## Fixes and Improvements
- A generic User interface, see the `Context.SetUser/User` methods in the New Context Methods section for more. In-short, the basicauth middleware's stored user can now be retrieved through `Context.User()` which provides more information than the native `ctx.Request().BasicAuth()` method one. Third-party authentication middleware creators can benefit of these two methods, plus the Logout below.
-- A `Context.Logout` method is added, can be used to invalidate [basicauth](https://github.com/kataras/iris/blob/master/_examples/auth/basicauth/main.go) or [jwt](https://github.com/kataras/iris/blob/master/_examples/auth/jwt/overview/main.go) client credentials.
+- A `Context.Logout` method is added, can be used to invalidate [basicauth](https://github.com/kataras/iris/blob/master/_examples/auth/basicauth/main.go) or [jwt](https://github.com/kataras/iris/blob/master/_examples/auth/jwt/blocklist/main.go) client credentials.
- Add the ability to [share functions](https://github.com/kataras/iris/tree/master/_examples/routing/writing-a-middleware/share-funcs) between handlers chain and add an [example](https://github.com/kataras/iris/tree/master/_examples/routing/writing-a-middleware/share-services) on sharing Go structures (aka services).
- Add the new `Party.UseOnce` method to the `*Route`
diff --git a/README.md b/README.md
index 0631facc..444e5ea9 100644
--- a/README.md
+++ b/README.md
@@ -10,7 +10,7 @@
# Iris Web Framework
-[](https://travis-ci.org/kataras/iris) [](https://github.com/kataras/iris/tree/master/_examples) [](https://gitter.im/iris_go/community) [](https://iris-go.com/donate)
+[](https://travis-ci.org/kataras/iris) [](https://github.com/kataras/iris/tree/master/_examples) [](https://gitter.im/iris_go/community) [](https://iris-go.com/donate)
@@ -31,6 +31,7 @@ With your help, we can improve Open Source web development for everyone!
> Donations from **China** are now accepted!
+
@@ -110,9 +111,11 @@ For a more detailed technical documentation you can head over to our [godocs](ht
+[](https://twitter.com/intent/follow?screen_name=makismaropoulos)
+
[](https://twitter.com/intent/follow?screen_name=iris_framework)
-[](https://www.facebook.com/iris.framework)
+[](https://www.facebook.com/iris.framework)
You can [request](https://www.iris-go.com/#ebookDonateForm) a PDF and online access of the **Iris E-Book** (New Edition, **future v12.2.0+**) today and be participated in the development of Iris.
diff --git a/README_ZH.md b/README_ZH.md
index 8a9ba794..5318d0f2 100644
--- a/README_ZH.md
+++ b/README_ZH.md
@@ -10,7 +10,7 @@
# Iris Web Framework
-[](https://travis-ci.org/kataras/iris) [](https://github.com/kataras/iris/tree/master/_examples) [](https://gitter.im/iris_go/community) [](https://iris-go.com/donate)
+[](https://travis-ci.org/kataras/iris) [](https://github.com/kataras/iris/tree/master/_examples) [](https://gitter.im/iris_go/community) [](https://iris-go.com/donate)
diff --git a/_examples/README.md b/_examples/README.md
index f744c8d1..7764b9b1 100644
--- a/_examples/README.md
+++ b/_examples/README.md
@@ -86,7 +86,6 @@
* [The CSV Formatter](logging/request-logger/accesslog-csv/main.go)
* [Create your own Formatter](logging/request-logger/accesslog-formatter/main.go)
* [Root and Proxy AccessLog instances](logging/request-logger/accesslog-proxy/main.go)
-
* API Documentation
* [Yaag](apidoc/yaag/main.go)
* [Swagger](https://github.com/iris-contrib/swagger/tree/master/example)
diff --git a/_examples/logging/request-logger/accesslog-simple/main.go b/_examples/logging/request-logger/accesslog-simple/main.go
index 77880c8b..b2d677d3 100644
--- a/_examples/logging/request-logger/accesslog-simple/main.go
+++ b/_examples/logging/request-logger/accesslog-simple/main.go
@@ -5,9 +5,6 @@ import (
"github.com/kataras/iris/v12/middleware/accesslog"
)
-// Default line format:
-// Time|Latency|Code|Method|Path|IP|Path Params Query Fields|Bytes Received|Bytes Sent|Request|Response|
-//
// Read the example and its comments carefully.
func makeAccessLog() *accesslog.AccessLog {
// Initialize a new access log middleware.
@@ -28,6 +25,9 @@ func makeAccessLog() *accesslog.AccessLog {
ac.KeepMultiLineError = true
ac.PanicLog = accesslog.LogHandler
+ // Default line format if formatter is missing:
+ // Time|Latency|Code|Method|Path|IP|Path Params Query Fields|Bytes Received|Bytes Sent|Request|Response|
+ //
// Set Custom Formatter:
ac.SetFormatter(&accesslog.JSON{
Indent: " ",
diff --git a/_examples/logging/request-logger/main.go b/_examples/logging/request-logger/main.go
deleted file mode 100644
index bf66726c..00000000
--- a/_examples/logging/request-logger/main.go
+++ /dev/null
@@ -1,90 +0,0 @@
-package main
-
-import (
- "github.com/kataras/iris/v12"
- "github.com/kataras/iris/v12/middleware/logger"
-)
-
-func main() {
- app := iris.New()
-
- customLogger := logger.New(logger.Config{
- // Status displays status code
- Status: true,
- // IP displays request's remote address
- IP: true,
- // Method displays the http method
- Method: true,
- // Path displays the request path
- Path: true,
- // Query appends the url query to the Path.
- Query: true,
- // Shows information about the executed route.
- TraceRoute: true,
-
- // if !empty then its contents derives from `ctx.Values().Get("logger_message")
- // will be added to the logs.
- MessageContextKeys: []string{"logger_message"},
-
- // if !empty then its contents derives from `ctx.GetHeader("User-Agent")
- MessageHeaderKeys: []string{"User-Agent"},
- })
-
- // Runs first on every request: parties & subdomains, route match or not and all http errors.
- app.UseRouter(customLogger)
-
- // Runs first on each matched route of this Party and its children on every request.
- app.Use(routesMiddleware)
-
- app.Get("/", indexMiddleware, index)
- app.Get("/list", listMiddleware, list)
-
- app.Get("/1", hello)
- app.Get("/2", hello)
-
- app.OnAnyErrorCode(customLogger, func(ctx iris.Context) {
- // this should be added to the logs, at the end because of the `logger.Config#MessageContextKey`
- ctx.Values().Set("logger_message",
- "a dynamic message passed to the logs")
- ctx.Writef("My Custom error page")
- })
-
- // http://localhost:8080
- // http://localhost:8080/list
- // http://localhost:8080/list?stop=true
- // http://localhost:8080/1
- // http://localhost:8080/2
- // http://lcoalhost:8080/notfoundhere
- // see the output on the console.
- app.Listen(":8080")
-}
-
-func routesMiddleware(ctx iris.Context) {
- ctx.Writef("Executing Route: %s\n", ctx.GetCurrentRoute().MainHandlerName())
- ctx.Next()
-}
-
-func indexMiddleware(ctx iris.Context) {
- ctx.WriteString("Index Middleware\n")
- ctx.Next()
-}
-
-func index(ctx iris.Context) {
- ctx.WriteString("Index Handler")
-}
-
-func listMiddleware(ctx iris.Context) {
- ctx.WriteString("List Middleware\n")
-
- if simulateStop, _ := ctx.URLParamBool("stop"); !simulateStop {
- ctx.Next()
- }
-}
-
-func list(ctx iris.Context) {
- ctx.WriteString("List Handler")
-}
-
-func hello(ctx iris.Context) {
- ctx.Writef("Hello from %s", ctx.Path())
-}
diff --git a/_examples/logging/request-logger/request-logger-file-json/main.go b/_examples/logging/request-logger/request-logger-file-json/main.go
deleted file mode 100644
index 67480502..00000000
--- a/_examples/logging/request-logger/request-logger-file-json/main.go
+++ /dev/null
@@ -1,110 +0,0 @@
-package main
-
-import (
- "fmt"
- "io"
- "os"
- "strings"
- "time"
-
- "github.com/kataras/iris/v12"
- "github.com/kataras/iris/v12/middleware/logger"
-)
-
-const deleteFileOnExit = false
-
-func newRequestLogger(newWriter io.Writer) iris.Handler {
- c := logger.Config{}
- c.AddSkipper(func(ctx iris.Context) bool {
- path := ctx.Path()
- for _, ext := range excludeExtensions {
- if strings.HasSuffix(path, ext) {
- return true
- }
- }
- return false
- })
-
- c.LogFuncCtx = func(ctx iris.Context, latency time.Duration) {
- datetime := time.Now().Format(ctx.Application().ConfigurationReadOnly().GetTimeFormat())
- customHandlerMessage := ctx.Values().GetString("log_message")
-
- file, line := ctx.HandlerFileLine()
- source := fmt.Sprintf("%s:%d", file, line)
-
- // this will just append a line without an array of javascript objects, readers of this file should read one line per log javascript object,
- // however, you can improve it even more, this is just a simple example on how to use the `LogFuncCtx`.
- jsonStr := fmt.Sprintf(`{"datetime":"%s","level":"%s","source":"%s","latency": "%s","status": %d,"method":"%s","path":"%s","message":"%s"}`,
- datetime, "INFO", source, latency.String(), ctx.GetStatusCode(), ctx.Method(), ctx.Path(), customHandlerMessage)
-
- fmt.Fprintln(newWriter, jsonStr)
- }
-
- return logger.New(c)
-}
-
-func h(ctx iris.Context) {
- ctx.Values().Set("log_message", "something to give more info to the request logger")
-
- ctx.Writef("Hello from %s", ctx.Path())
-}
-
-func main() {
- app := iris.New()
-
- logFile := newLogFile()
- defer func() {
- logFile.Close()
- if deleteFileOnExit {
- os.Remove(logFile.Name())
- }
- }()
-
- r := newRequestLogger(logFile)
- app.Use(r)
-
- app.OnAnyErrorCode(r, func(ctx iris.Context) {
- ctx.HTML("