diff --git a/Changelog.md b/Changelog.md
--- a/Changelog.md
+++ b/Changelog.md
@@ -1,3 +1,8 @@
+## 0.5.1
+
+- export `LogLevel` type to make `Config` actually customizable
+- add `--log` option to specify logging type
+
 ## 0.5.0
 
 - initial HTTP/3 (QUIC) support
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -54,7 +54,7 @@
 hprox -p 443 -s example.com:$HOME/.acme.sh/example.com/fullchain.cer:$HOME/.acme.sh/example.com/example.com.key
 ```
 
-Browsers can be configured with PAC file URL `https://example.com/.hprox/proxy.pac`.
+Browsers can be configured with PAC file URL `https://example.com/.hprox/config.pac`.
 
 * To work with `v2ray-plugin`, with fallback page to [ubuntu archive](http://archive.ubuntu.com/):
 
diff --git a/hprox.cabal b/hprox.cabal
--- a/hprox.cabal
+++ b/hprox.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           hprox
-version:        0.5.0
+version:        0.5.1
 synopsis:       a lightweight HTTP proxy server, and more
 description:    Please see the README on GitHub at <https://github.com/bjin/hprox#readme>
 category:       Web
diff --git a/src/Network/HProx.hs b/src/Network/HProx.hs
--- a/src/Network/HProx.hs
+++ b/src/Network/HProx.hs
@@ -12,6 +12,7 @@
 module Network.HProx
   ( CertFile (..)
   , Config (..)
+  , LogLevel (..)
   , defaultConfig
   , getConfig
   , run
@@ -72,6 +73,7 @@
   , _doh      :: Maybe String
   , _naive    :: Bool
   , _name     :: BS8.ByteString
+  , _log      :: String
   , _loglevel :: LogLevel
 #ifdef QUIC_ENABLED
   , _quic     :: Maybe Int
@@ -80,7 +82,7 @@
 
 -- | Default value of 'Config', same as running @hprox@ without arguments
 defaultConfig :: Config
-defaultConfig = Config Nothing 3000 [] Nothing Nothing Nothing Nothing Nothing False "hprox" INFO
+defaultConfig = Config Nothing 3000 [] Nothing Nothing Nothing Nothing Nothing False "hprox" "stdout" INFO
 #ifdef QUIC_ENABLED
     Nothing
 #endif
@@ -120,6 +122,7 @@
                     <*> doh
                     <*> naive
                     <*> name
+                    <*> logging
                     <*> loglevel
 #ifdef QUIC_ENABLED
                     <*> quic
@@ -183,6 +186,13 @@
        <> showDefault
        <> help "specify the server name for the 'Server' header")
 
+    logging = strOption
+        ( long "log"
+       <> metavar "<none|stdout|stderr|file>"
+       <> value "stdout"
+       <> showDefault
+       <> help "specify the logging type")
+
     loglevel = option (maybeReader logLevelReader)
         ( long "loglevel"
        <> metavar "<trace|debug|info|warn|error|none>"
@@ -200,6 +210,12 @@
 setuid :: String -> IO ()
 setuid user = getUserEntryForName user >>= setUserID . userID
 
+getLoggerType :: String -> LogType' LogStr
+getLoggerType "none"   = LogNone
+getLoggerType "stdout" = LogStdout 4096
+getLoggerType "stderr" = LogStderr 4096
+getLoggerType file     = LogFileNoRotate file 4096
+
 -- | Read 'Config' from command line arguments
 getConfig :: IO Config
 getConfig = execParser parser
@@ -208,7 +224,7 @@
 run :: Application -- ^ fallback application
     -> Config      -- ^ configuration
     -> IO ()
-run fallback Config{..} = withLogger (LogStdout 4096) _loglevel $ \logger -> do
+run fallback Config{..} = withLogger (getLoggerType _log) _loglevel $ \logger -> do
     logger INFO $ "hprox " <> toLogStr (showVersion version) <> " started"
     logger INFO $ "bind to TCP port " <> toLogStr (fromMaybe "[::]" _bind) <> ":" <> toLogStr _port
 
@@ -276,14 +292,12 @@
             , tlsSessionManager  = Just smgr
             }
 
-        logAndFail msg = logger WARN (toLogStr msg) >> fail msg
-
-        onSNI Nothing = logAndFail "SNI: unspecified"
+        onSNI Nothing = fail "SNI: unspecified"
         onSNI (Just host)
           | checkSNI host primaryHost = return mempty
           | otherwise                 = lookupSNI host otherCerts
 
-        lookupSNI host [] = logAndFail ("SNI: unknown hostname (" ++ show host ++ ")")
+        lookupSNI host [] = fail ("SNI: unknown hostname (" ++ show host ++ ")")
         lookupSNI host ((p, cert) : cs)
           | checkSNI host p = return (TLS.Credentials [cert])
           | otherwise       = lookupSNI host cs
diff --git a/src/Network/HProx/Log.hs b/src/Network/HProx/Log.hs
--- a/src/Network/HProx/Log.hs
+++ b/src/Network/HProx/Log.hs
@@ -17,6 +17,7 @@
 
 import System.Log.FastLogger
 
+-- | Logging level, default value is INFO
 data LogLevel = TRACE
               | DEBUG
               | INFO
