log4net で最も多い問題は、おそらく指定したはずの config が読み込まれないことに起因する。基本は app.config に指定する。

AssemblyInfo.cs - 多くの資料ではこの使い方が例示されているが、この使い方は log4net への参照が必要となるしソースコードへの記述となるので app.config への記述が良いと思う。
[assembly: log4net.Config.XmlConfigurator(ConfigFile=@"log4net.config", Watch=true)]
//Watch = true は変更した内容を再起動しなくても適用するための指定。
app.configへの記述
Apache log4net – Apache log4net Manual: Configuration - Apache log4net
<appSettings>
  <add key="log4net.Config" value="log4net.config"/>
  <add key="log4net.Config.Watch" value="True"/>
</appSettings>
config - 独自の別ファイルでもよいし app.config でもよい。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <!-- log4netログトレース -->
  <log4net>
    <!-- 使用するアペンダを名前で宣言 -->
    <root>
      <level value="DEBUG" />
      <appender-ref ref="Console" />
      <appender-ref ref="FileLog" />
    </root>
    <!-- コンソールアペンダ -->
    <appender name="Console" type="log4net.Appender.TraceAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%d [%t] %-5p %c{1} - %m%n" />
      </layout>
    </appender>
    <!-- ファイルアペンダ -->
    <appender name="FileLog" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="Logging_" />
      <param name="DatePattern" value='yyyyMMdd".log"' />
      <param name="MaximumFileSize" value="50MB" />
      <param name="MaxSizeRollBackups" value="100" />
      <param name="RollingStyle" value="Composite" />
      <param name="AppendToFile" value="true" />
      <param name="StaticLogFileName" value="false" />
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMax" value="FATAL" />
        <param name="LevelMin" value="DEBUG" />
      </filter>
      <layout type="log4net.Layout.PatternLayout">
        <ConversionPattern value="%date{yyyy/MM/dd_HH:mm:ss,fff} [%thread]] %-5level - %message%newline" />
      </layout>
    </appender>
  </log4net>
</configuration>
app.config に記述する場合 - 解析ハンドラの指定も忘れないように。
<configSections>
  <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
Program.cs - 出力用コード。
GetLogger に指定する文字列はログを区別するための任意の文字列。Type を指定した場合は、ログを出力したクラスを識別する意図がある。C/C++ における __FILE__ の代用。
using log4net;

ILog logger = LogManager.GetLogger ( System.Reflection.MethodBase.GetCurrentMethod ().DeclaringType );
if( logger.IsInfoEnabled ) 
{
	trace.InfoFormat ( "{0} {1}", DateTime.Now, Thread.CurrentThread.ManagedThreadId );
}
debug 指定 - 動作ログを出力する。
<appSettings>
  <add key="log4net.Internal.Debug" value="true" />
</appSettings>
次のようなログが出力されるが、あまり有益とは思わない。
log4net: log4net assembly [log4net, Version=1.2.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a]. Loaded from [C:\dev\log4net.dll]. (.NET Runtime [4.0.30319.42000] on Microsoft Windows NT 6.3.9600.0)
log4net: defaultRepositoryType [log4net.Repository.Hierarchy.Hierarchy]
log4net: Creating repository for assembly [MyAppp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]
log4net: Assembly [MyApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] Loaded From [C:\dev\MyApp.exe]
log4net: Assembly [MyApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] does not have a RepositoryAttribute specified.
log4net: Assembly [MyApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] using repository [log4net-default-repository] and repository type [log4net.Repository.Hierarchy.Hierarchy]
log4net: Creating repository [log4net-default-repository] using type [log4net.Repository.Hierarchy.Hierarchy]

log4net: Loading configuration for default repository from AppSettings specified Config URI [file:///C:/dev/MyApp.exe.config]
log4net: configuring repository [log4net-default-repository] using URI [file:///C:/dev/MyApp.exe.config]
log4net: configuring repository [log4net-default-repository] using file [C:\dev\MyApp.exe.config]
log4net: configuring repository [log4net-default-repository] using stream
log4net: loading XML configuration
config がどうしても読み込まれない場合 - コードで指定する。
using log4net.Config;
var cfg = ConfigurationManager.OpenExeConfiguration ( ConfigurationUserLevel.None );
XmlConfigurator.Configure ( new System.IO.FileInfo ( cfg.FilePath ) );

Appender
- アペンダの多彩さが log4net を使いたい理由。
Apache log4net – Apache log4net: Config Examples - Apache log4net
log4net.Appender Namespace - Apache log4net™ SDK Documentation

パターンフォーマット - Layout にも何種類かあります。
PatternLayout Class - Apache log4net™ SDK Documentation

以下、要約
Each conversion specifier starts with a percent sign (%) and is followed by optional format modifiers and a conversion pattern name.
それぞれの指定は%から開始し、それに続くオプション指示、パターン名と続きます。

The conversion pattern name specifies the type of data, e.g. logger, level, date, thread name.
パターン名は出力するデータの種別を指定します。logger, level, date, thread nameなど。

The format modifiers control such things as field width, padding, left and right justification.
オプション指示には、フィールドの長さ、余白、左右調整があります。

例えば
%d %-5level %logger - %message%newline
%-5 は Right Pad spaces if less than size

pattern namedescriptionexsample
c/loggerGetLoggerに指定された名前
class/type/C出力したクラス名%type{1} ピリオド区切りで右から一つを出力する
date/utcdate/d時刻%date{HH:mm:ss,fff}
%date{dd MMM yyyy HH:mm:ss,fff}
%date{ISO8601}
%date{ABSOLUTE}
location/lメソッド名(ソース名と行)MyApp.Func(c:\dev\MyApp.cs:152)
line/L行位置
level/p出力レベル%-5level 
message/m指定されたメッセージ文字列
method/M出力位置のメソッド名。
mdc/XThreadContext.Properties/property に集約。Identity、UserName、HostName
newline/n改行
ndc/xnested diagnostic context
properties/property/P様々な値を提供するための仕組み。%property{user}
stacktrace/stacktracedetail呼び出し階層%stacktrace{4}なら四階層
timestamp/relappsed milliseconds
thread/tThreadId

2021/10/30 記
log4net でログ自動削除は RollingStyle=Size の時しか有効でない。この時、ファイル名から DatePatternは消えてログファイル名は日付で整理できない。ログは時系列で管理したい要望が大部分であると思うが、開発者たちはある制限を設けてでもそのような機能を提供するより、誤動作を恐れ機能凍結を決断したようである。軟弱もの!