Vas*_*lva 0 .net c# log4net class-library
我想在类库项目中配置 log4net 并在 mvc 项目上使用它。
重点是有一些项目(Web api、mvc 应用程序等)引用了 Common 项目(类库),并配置了 log4net 进行写入。
我已经这样做了,但是 log4net 没有写任何东西。
类库:
public class Log
{
private readonly ILog _log;
public Log()
{
_log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
}
public void write(string value)
{
_log.Info(value);
}
}
Run Code Online (Sandbox Code Playgroud)
mvc控制器例如:
public ActionResult Index()
{
Log oLog = new Log();
oLog.write("ABABABAB");
return View();
}
Run Code Online (Sandbox Code Playgroud)
类库中的配置:(App.config)
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<param name="File" value="MyLogg.txt" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="Header" value="" />
<param name="Footer" value="" />
<param name="ConversionPattern" value="%d [%t] %-5p %m%n" />
</layout>
</appender>
<root>
<!--LogLevel: OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL -->
<level value="ALL" />
<appender-ref ref="LogFileAppender" />
</root>
</log4net>
</configuration>
Run Code Online (Sandbox Code Playgroud)
类库配置文件并不重要,启动项目配置文件才被考虑。因此,如果您将此配置写入启动项目配置文件,它可能会按预期工作。
如果你想从一个配置文件管理配置,你可以生成 log4net.config 文件,然后像这样加载它:
注意:如果您在公共项目中创建单独的配置文件,请将 CopyToOutputDirectory 属性更改为always或if newer。
配置文件:
<?xml version="1.0" encoding="utf-8"?>
<log4net>
<logger name="log4netFileLogger">
<appender name="log4netFileAppender" type="log4net.Appender.FileAppender">
<file type="log4net.Util.PatternString">
<conversionPattern value="C:\Logger\%date{yyyy-MM-dd}.log" />
</file>
<param name="RollingStyle" value="Date" />
<param name="StaticLogFileName" value="false" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%newline%newline%date [%thread] %-5level - %message%newline" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="log4netFileAppender" />
</root>
</logger>
</log4net>
Run Code Online (Sandbox Code Playgroud)
日志类:
public class CustomLogger
{
private readonly ILog _log;
public CustomLogger()
{
var baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
var configFileDirectory = Path.Combine(baseDirectory, "log4net.config");
FileInfo configFileInfo = new FileInfo(configFileDirectory);
log4net.Config.XmlConfigurator.ConfigureAndWatch(configFileInfo);
_log = log4net.LogManager.GetLogger("log4netFileLogger");
}
public void Info(string value)
{
_log.Info(value);
}
}
Run Code Online (Sandbox Code Playgroud)
配置文件属性:
日志档案:
Web 应用程序需要预构建事件:
xcopy /E /Y /R "$(ProjectDir)..\CommonNetFrameworkLibrary\log4net.config" "$(ProjectDir)"
Run Code Online (Sandbox Code Playgroud)
注意:在 Logger 类中,以下代码很重要。如果您不搜索基目录,则日志记录仅适用于控制台应用程序。原因是:控制台应用程序搜索文件为bin目录,但Web应用程序搜索文件为C:\ProgramFiles\IIS.
var baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
var configFileDirectory = Path.Combine(baseDirectory, "log4net.config");
Run Code Online (Sandbox Code Playgroud)