diff --git a/design/56345-structured-logging.md b/design/56345-structured-logging.md
index 024afc5..98c8322 100644
--- a/design/56345-structured-logging.md
+++ b/design/56345-structured-logging.md
@@ -224,11 +224,11 @@
 	// A Handler should treat WithGroup as starting a Group of Attrs that ends
 	// at the end of the log event. That is,
 	//
-	//     logger.WithGroup("s").LogAttrs(slog.Int("a", 1), slog.Int("b", 2))
+	//     logger.WithGroup("s").LogAttrs(level, msg, slog.Int("a", 1), slog.Int("b", 2))
 	//
 	// should behave like
 	//
-	//     logger.LogAttrs(slog.Group("s", slog.Int("a", 1), slog.Int("b", 2)))
+	//     logger.LogAttrs(level, msg, slog.Group("s", slog.Int("a", 1), slog.Int("b", 2)))
 	WithGroup(name string) Handler
 }
 ```
@@ -539,10 +539,10 @@
 `Handler`, and the `Handler` method to retrieve it.
 
 ```
-func New(h Handler) Logger
+func New(h Handler) *Logger
     New creates a new Logger with the given Handler.
 
-func (l Logger) Handler() Handler
+func (l *Logger) Handler() Handler
     Handler returns l's Handler.
 ```
 
@@ -551,12 +551,12 @@
 `Default` functions.
 
 ```
-func SetDefault(l Logger)
+func SetDefault(l *Logger)
     SetDefault makes l the default Logger. After this call, output from the
     log package's default Logger (as with log.Print, etc.) will be logged at
     InfoLevel using l's Handler.
 
-func Default() Logger
+func Default() *Logger
     Default returns the default Logger.
 ```
 
@@ -584,7 +584,7 @@
 
 
 ```
-func (l Logger) Log(level Level, msg string, args ...any)
+func (l *Logger) Log(level Level, msg string, args ...any)
     Log emits a log record with the current time and the given level and
     message. The Record's Attrs consist of the Logger's attributes followed by
     the Attrs specified by args.
@@ -596,19 +596,19 @@
         an Attr.
       - Otherwise, the argument is treated as a value with key "!BADKEY".
 
-func (l Logger) LogAttrs(level Level, msg string, attrs ...Attr)
+func (l *Logger) LogAttrs(level Level, msg string, attrs ...Attr)
     LogAttrs is a more efficient version of Logger.Log that accepts only Attrs.
 
-func (l Logger) Debug(msg string, args ...any)
+func (l *Logger) Debug(msg string, args ...any)
     Debug logs at DebugLevel.
 
-func (l Logger) Info(msg string, args ...any)
+func (l *Logger) Info(msg string, args ...any)
     Info logs at InfoLevel.
 
-func (l Logger) Warn(msg string, args ...any)
+func (l *Logger) Warn(msg string, args ...any)
     Warn logs at WarnLevel.
 
-func (l Logger) Error(msg string, err error, args ...any)
+func (l *Logger) Error(msg string, err error, args ...any)
     Error logs at ErrorLevel. If err is non-nil, Error appends Any("err",
     err) to the list of attributes.
 ```
@@ -617,12 +617,12 @@
 functions can wrap them and adjust the source line information.
 
 ```
-func (l Logger) LogDepth(calldepth int, level Level, msg string, args ...any)
+func (l *Logger) LogDepth(calldepth int, level Level, msg string, args ...any)
     LogDepth is like Logger.Log, but accepts a call depth to adjust the file
     and line number in the log record. 0 refers to the caller of LogDepth;
     1 refers to the caller's caller; and so on.
 
-func (l Logger) LogAttrsDepth(calldepth int, level Level, msg string, attrs ...Attr)
+func (l *Logger) LogAttrsDepth(calldepth int, level Level, msg string, attrs ...Attr)
     LogAttrsDepth is like Logger.LogAttrs, but accepts a call depth argument
     which it interprets like Logger.LogDepth.
 ```
@@ -630,7 +630,7 @@
 Loggers can have attributes as well, added by the `With` method.
 
 ```
-func (l Logger) With(args ...any) Logger
+func (l *Logger) With(args ...any) *Logger
     With returns a new Logger that includes the given arguments, converted to
     Attrs as in Logger.Log. The Attrs will be added to each output from the
     Logger.
@@ -713,7 +713,7 @@
 
 
 ```
-func (l Logger) WithGroup(name string) Logger
+func (l *Logger) WithGroup(name string) *Logger
     WithGroup returns a new Logger that starts a group. The keys of all
     attributes added to the Logger will be qualified by the given name.
 ```
@@ -728,7 +728,7 @@
 The `slog` package has two functions to support this pattern.
 
 ```
-func FromContext(ctx context.Context) Logger
+func FromContext(ctx context.Context) *Logger
     FromContext returns the Logger stored in ctx by NewContext, or the default
     Logger if there is none.
 
@@ -780,14 +780,14 @@
 We also provide a convenient shorthand, `slog.Ctx`.
 
 ```
-func (l Logger) WithContext(ctx context.Context) Logger
+func (l *Logger) WithContext(ctx context.Context) *Logger
     WithContext returns a new Logger with the same handler as the receiver and
     the given context.
 
-func (l Logger) Context() context.Context
+func (l *Logger) Context() context.Context
     Context returns l's context.
 
-func Ctx(ctx context.Context) Logger
+func Ctx(ctx context.Context) *Logger
     Ctx retrieves a Logger from the given context using FromContext. Then it
     adds the given context to the Logger using WithContext and returns the
     result.
@@ -1004,11 +1004,11 @@
 func LogAttrs(level Level, msg string, attrs ...Attr)
     LogAttrs calls Logger.LogAttrs on the default logger.
 
-func NewContext(ctx context.Context, l Logger) context.Context
+func NewContext(ctx context.Context, l *Logger) context.Context
     NewContext returns a context that contains the given Logger. Use FromContext
     to retrieve the Logger.
 
-func SetDefault(l Logger)
+func SetDefault(l *Logger)
     SetDefault makes l the default Logger. After this call, output from the
     log package's default Logger (as with log.Print, etc.) will be logged at
     InfoLevel using l's Handler.
@@ -1096,11 +1096,11 @@
 	// A Handler should treat WithGroup as starting a Group of Attrs that ends
 	// at the end of the log event. That is,
 	//
-	//     logger.WithGroup("s").LogAttrs(slog.Int("a", 1), slog.Int("b", 2))
+	//     logger.WithGroup("s").LogAttrs(level, msg, slog.Int("a", 1), slog.Int("b", 2))
 	//
 	// should behave like
 	//
-	//     logger.LogAttrs(slog.Group("s", slog.Int("a", 1), slog.Int("b", 2)))
+	//     logger.LogAttrs(level, msg, slog.Group("s", slog.Int("a", 1), slog.Int("b", 2)))
 	WithGroup(name string) Handler
 }
     A Handler handles log records produced by a Logger..
@@ -1223,16 +1223,11 @@
 	WarnLevel  Level = 4
 	ErrorLevel Level = 8
 )
-    The level numbers below don't really matter too much. Any system can map
-    them to another numbering scheme if it wishes. We picked them to satisfy
-    three constraints.
-
-    First, we wanted the default level to be Info, Since Levels are ints,
-    Info is the default value for int, zero.
-
-    Second, we wanted to make it easy to work with verbosities instead of
-    levels. Verbosities start at 0 corresponding to Info, and larger values are
-    less severe Negating a verbosity converts it into a Level.
+    Second, we wanted to make it easy to use levels to specify logger verbosity.
+    Since a larger level means a more severe event, a logger that accepts events
+    with smaller (or more negative) level means a more verbose logger. Logger
+    verbosity is thus the negation of event severity, and the default verbosity
+    of 0 accepts all events at least as severe as INFO.
 
     Third, we wanted some room between levels to accommodate schemes with
     named levels between ours. For example, Google Cloud Logging defines a
@@ -1302,44 +1297,44 @@
 
     To create a new Logger, call New or a Logger method that begins "With".
 
-func Ctx(ctx context.Context) Logger
+func Ctx(ctx context.Context) *Logger
     Ctx retrieves a Logger from the given context using FromContext. Then it
     adds the given context to the Logger using WithContext and returns the
     result.
 
-func Default() Logger
+func Default() *Logger
     Default returns the default Logger.
 
-func FromContext(ctx context.Context) Logger
+func FromContext(ctx context.Context) *Logger
     FromContext returns the Logger stored in ctx by NewContext, or the default
     Logger if there is none.
 
-func New(h Handler) Logger
+func New(h Handler) *Logger
     New creates a new Logger with the given Handler.
 
-func With(args ...any) Logger
+func With(args ...any) *Logger
     With calls Logger.With on the default logger.
 
-func (l Logger) Context() context.Context
+func (l *Logger) Context() context.Context
     Context returns l's context.
 
-func (l Logger) Debug(msg string, args ...any)
+func (l *Logger) Debug(msg string, args ...any)
     Debug logs at DebugLevel.
 
-func (l Logger) Enabled(level Level) bool
+func (l *Logger) Enabled(level Level) bool
     Enabled reports whether l emits log records at the given level.
 
-func (l Logger) Error(msg string, err error, args ...any)
+func (l *Logger) Error(msg string, err error, args ...any)
     Error logs at ErrorLevel. If err is non-nil, Error appends Any("err",
     err) to the list of attributes.
 
-func (l Logger) Handler() Handler
+func (l *Logger) Handler() Handler
     Handler returns l's Handler.
 
-func (l Logger) Info(msg string, args ...any)
+func (l *Logger) Info(msg string, args ...any)
     Info logs at InfoLevel.
 
-func (l Logger) Log(level Level, msg string, args ...any)
+func (l *Logger) Log(level Level, msg string, args ...any)
     Log emits a log record with the current time and the given level and
     message. The Record's Attrs consist of the Logger's attributes followed by
     the Attrs specified by args.
@@ -1351,22 +1346,22 @@
         an Attr.
       - Otherwise, the argument is treated as a value with key "!BADKEY".
 
-func (l Logger) LogAttrs(level Level, msg string, attrs ...Attr)
+func (l *Logger) LogAttrs(level Level, msg string, attrs ...Attr)
     LogAttrs is a more efficient version of Logger.Log that accepts only Attrs.
 
-func (l Logger) LogAttrsDepth(calldepth int, level Level, msg string, attrs ...Attr)
+func (l *Logger) LogAttrsDepth(calldepth int, level Level, msg string, attrs ...Attr)
     LogAttrsDepth is like Logger.LogAttrs, but accepts a call depth argument
     which it interprets like Logger.LogDepth.
 
-func (l Logger) LogDepth(calldepth int, level Level, msg string, args ...any)
+func (l *Logger) LogDepth(calldepth int, level Level, msg string, args ...any)
     LogDepth is like Logger.Log, but accepts a call depth to adjust the file
     and line number in the log record. 0 refers to the caller of LogDepth;
     1 refers to the caller's caller; and so on.
 
-func (l Logger) Warn(msg string, args ...any)
+func (l *Logger) Warn(msg string, args ...any)
     Warn logs at WarnLevel.
 
-func (l Logger) With(args ...any) Logger
+func (l *Logger) With(args ...any) *Logger
     With returns a new Logger that includes the given arguments, converted to
     Attrs as in Logger.Log. The Attrs will be added to each output from the
     Logger.
@@ -1374,11 +1369,11 @@
     The new Logger's handler is the result of calling WithAttrs on the
     receiver's handler.
 
-func (l Logger) WithContext(ctx context.Context) Logger
+func (l *Logger) WithContext(ctx context.Context) *Logger
     WithContext returns a new Logger with the same handler as the receiver and
     the given context.
 
-func (l Logger) WithGroup(name string) Logger
+func (l *Logger) WithGroup(name string) *Logger
     WithGroup returns a new Logger that starts a group. The keys of all
     attributes added to the Logger will be qualified by the given name.
 
@@ -1575,4 +1570,5 @@
 func (v Value) Uint64() uint64
     Uint64 returns v's value as a uint64. It panics if v is not an unsigned
     integer.
+
 ```
