log4net 发布到生产环境不写日志的解决方法--使用 NLog日志
1、升级到log4net的最新版
PM下执行
Install-Package log4net
还是无法解决的,使用下面的方法
2、使用Nlog替换之,详见https://github.com/NLog/NLog/wiki/Tutorial
安装
Install-Package NLog.Config
NLog使用方法比log4net更为简单,配置文件如下,如果成windows程序需将NLog.config自动复制到bin下面
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
autoReload="true"
throwExceptions="false"
internalLogLevel="Off" internalLogFile="F:\temp\20160907\NLog\log\nlog-internal.log"> <!-- optional, add some variables
https://github.com/nlog/NLog/wiki/Configuration-file#variables
-->
<variable name="myvar" value="myvalue"/> <!--
See https://github.com/nlog/nlog/wiki/Configuration-file
for information on customizing logging rules and outputs.
-->
<targets> <!--
add your targets here
See https://github.com/nlog/NLog/wiki/Targets for possible targets.
See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possible layout renderers.
--> <!--
Write events to a file with the date in the filename.
<target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
layout="${longdate} ${uppercase:${level}} ${message}" />
-->
<target name="logfile" xsi:type="File" fileName="${basedir}/logs/${shortdate}.log" />
<target name="console" xsi:type="ColoredConsole" />
</targets> <rules>
<!-- add your logging rules here --> <!--
Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace) to "f"
<logger name="*" minlevel="Debug" writeTo="f" />
-->
<logger name="*" minlevel="Debug" writeTo="logfile" />
<logger name="*" minlevel="Info" writeTo="console" />
</rules>
</nlog>
NLog.config
调用代码:
Logger logger = LogManager.GetCurrentClassLogger();
logger.Trace("Sample trace message");
logger.Debug("Sample debug message");
logger.Info("Sample informational message");
logger.Warn("Sample warning message");
logger.Error("Sample error message");
logger.Fatal("Sample fatal error message");
logger.Info("wilson测试 日志日期:{0}", DateTime.Now);
执行结果,非常漂亮的控制台输出:

web站点配置log写入到sql server数据库,需要安装NLog.Web
Install-Package NLog.Web
配置文件如下
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
autoReload="true"
throwExceptions="false"
internalLogLevel="Off" internalLogFile="F:\temp\20160907\NLog\log\nlog-internal.log"> <!-- optional, add some variables
https://github.com/nlog/NLog/wiki/Configuration-file#variables
-->
<variable name="myvar" value="myvalue"/> <!--
See https://github.com/nlog/nlog/wiki/Configuration-file
for information on customizing logging rules and outputs.
-->
<targets> <!--
add your targets here
See https://github.com/nlog/NLog/wiki/Targets for possible targets.
See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possible layout renderers.
--> <!--
Write events to a file with the date in the filename.
<target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
layout="${longdate} ${uppercase:${level}} ${message}" />
-->
<target name="logfile" xsi:type="File" fileName="${basedir}/logs/${shortdate}.log" />
<target name="console" xsi:type="ColoredConsole" /> <target name="db"
xsi:type="Database"
connectionStringName="NLogConn"
commandType="StoredProcedure"
commandText="[dbo].[NLog_AddEntry_p]"
>
<parameter name="@machineName" layout="${machinename}" />
<parameter name="@siteName" layout="${iis-site-name}" />
<parameter name="@logged" layout="${date}" />
<parameter name="@level" layout="${level}" />
<parameter name="@username" layout="${aspnet-user-identity}" />
<parameter name="@message" layout="${message}" />
<parameter name="@logger" layout="${logger}" />
<parameter name="@properties" layout="${all-event-properties:separator=|}" />
<parameter name="@serverName" layout="${aspnet-request:serverVariable=SERVER_NAME}" />
<parameter name="@port" layout="${aspnet-request:serverVariable=SERVER_PORT}" />
<parameter name="@url" layout="${aspnet-request:serverVariable=HTTP_URL}" />
<parameter name="@https" layout="${when:inner=1:when='${aspnet-request:serverVariable=HTTPS}' == 'on'}${when:inner=0:when='${aspnet-request:serverVariable=HTTPS}' != 'on'}" />
<parameter name="@serverAddress" layout="${aspnet-request:serverVariable=LOCAL_ADDR}" />
<parameter name="@remoteAddress" layout="${aspnet-request:serverVariable=REMOTE_ADDR}:${aspnet-request:serverVariable=REMOTE_PORT}" />
<parameter name="@callSite" layout="${callsite}" />
<parameter name="@exception" layout="${exception:tostring}" />
</target> </targets> <rules>
<!-- add your logging rules here --> <!--
Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace) to "f"
<logger name="*" minlevel="Debug" writeTo="f" />
-->
<logger name="*" minlevel="Debug" writeTo="logfile" />
<logger name="*" minlevel="Info" writeTo="console" /> <logger name="*" minlevel="Debug" writeTo="db" />
</rules>
</nlog>
Web NLog配置
Web.Config要加上对应数据库连接
<?xml version="1.0" encoding="utf-8"?> <!--
有关如何配置 ASP.NET 应用程序的详细信息,请访问
http://go.microsoft.com/fwlink/?LinkId=169433
--> <configuration>
<connectionStrings>
<add name="NLogConn" connectionString="Server=.;uid=sa;pwd=sa;Database=db;"/>
</connectionStrings>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web> </configuration>
保存数据库结果:

写入oracle的配置,使用System.Data.OracleClient,.net 4.0以上已经抛弃
<targets>
<target name="oraclelog" type="Database"> <dbProvider>System.Data.OracleClient.OracleConnection,System.Data.OracleClient, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</dbProvider> <connectionString>Data Source=JMDB_215;User ID=TYUM_UM; Password=DEV_TYUM_UM;</connectionString> <commandText>insert into RS_LOGTABLE (log_user,log_level,log_date,log_message) values(:log_user,:log_level,:log_date,:log_message)</commandText> <parameter name=":log_user" layout="${aspnet-user-identity}"/>
<parameter name=":log_level" layout="${level}"/>
<parameter name=":log_date" layout="${date}"/>
<parameter name=":log_message" layout="${message}"/> </target>
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="oraclelog" />
</rules>
写入oracle的配置,使用Oracle.DataAccess.Client,配置文件如下:
<targets>
<target name="oraclelog" type="Database"> <!--<dbProvider>Oracle.ManagedDataAccess.Client,Oracle.ManagedDataAccess</dbProvider>-->
<dbProvider>Oracle.DataAccess.Client.OracleConnection,Oracle.DataAccess</dbProvider>
<connectionString>Data Source=orcl;User ID=oracle_user; Password=password;</connectionString> <commandText>insert into RS_LOGTABLE (log_user,log_level,log_date,log_message) values(:log_user,:log_level,:log_date,:log_message)</commandText> <parameter name=":log_user" layout="${machinename}"/>
<parameter name=":log_level" layout="${level}"/>
<parameter name=":log_date" layout="${date}"/>
<parameter name=":log_message" layout="${message}"/> </target>
</targets> <rules>
<logger name="oracleDbLog" minlevel="Debug" writeTo="oraclelog" />
</rules>
Oracle.DataAccess.Client Log配置
C#调用代码:
Logger oracleLogger = LogManager.GetLogger("oracleDbLog");
oracleLogger.Error(new Exception("自定义异常oracle"), "错误信息 oracledb", string.Empty);
执行结果:

写入Mysql,需应用MySql.Data程序集,安装Install-Package MySql.Data -Version 6.9.9,配置文件如下:
<targets>
<target name="MySQLLog" type="Database">
<dbProvider>MySql.Data.MySqlClient.MySqlConnection,MySql.Data</dbProvider>
<connectionString>Server=192.168.0.2;Uid=root;Pwd=root;Database=mydb;</connectionString> <commandText>insert into t_nlog (log_user,log_level,log_date,log_message) values(@log_user,@log_level,@log_date,@log_message)</commandText> <parameter name="@log_user" layout="${machinename}"/>
<parameter name="@log_level" layout="${level}"/>
<parameter name="@log_date" layout="${date}"/>
<parameter name="@log_message" layout="${message}"/>
</target>
</targets> <rules>
<logger name="*" minlevel="Debug" writeTo="MySQLLog" />
</rules>
NLog Mysql
执行结果:

文件日志异常模板:
<target name="logfile" xsi:type="File" fileName="${basedir}/nlogs/${shortdate}.log" layout="${longdate}|${level}||${logger} ${message}| ${exception:format=tostring}" />
NLog日志写入到MongoDB,安装NLog.Mongo
PM> Install-Package NLog.Mongo
配置文件:
<extensions>
<add assembly="NLog.Mongo"/>
</extensions> <target xsi:type="Mongo"
name="mongoDefault"
connectionString="mongodb://192.168.0.226:6111/NLogging"
collectionName="DefaultLog"
cappedCollectionSize="26214400">
<property name="ThreadID" layout="${threadid}" bsonType="Int32" />
<property name="ThreadName" layout="${threadname}" />
<property name="ProcessID" layout="${processid}" bsonType="Int32" />
<property name="ProcessName" layout="${processname:fullName=true}" />
<property name="UserName" layout="${windows-identity}" />
</target> <rules> <logger name="*" level="Debug" writeTo="mongoDefault" />
</rules>
NLog.config
执行结果如下:

参考:https://github.com/loresoft/NLog.Mongo
log4net 发布到生产环境不写日志的解决方法--使用 NLog日志的更多相关文章
- [转]log4net 发布到生产环境不写日志的解决方法--使用 NLog日志
本文转自:http://www.cnblogs.com/weiweictgu/p/5848805.html 1.升级到log4net的最新版 PM下执行 Install-Package log4net ...
- Asp.Net 应用程序在IIS发布后无法连接oracle数据库问题的解决方法
asp.net程序编写完成后,发布到IIS,经常出现的一个问题是连接不上Oracle数据库,具体表现为Oracle的本地NET服务配置成功:用 pl/sql 等工具也可以连接上数据库,但是通过浏览器中 ...
- 多测师讲解自动化测试_rf运行无日志(解决方法)_高级讲肖sir
rf运行无日志(解决方法) 出现现象: 方法: 1.先在套件里面导入OperatingSystem库 2.在套件中新建一个关键字套件点击右键选择new user keyword关键 字的名称为:kil ...
- 利用ansible-playbook从测试环境获取tomcat中java项目新版本发布到生产环境
一.环境描述 安装有ansible的服务器:192.168.13.45 测试环境服务器:192.168.13.49 /home/app/api-tomcat/webapps/api.war为测试环境新 ...
- ORA-00257归档日志写满的解决方法
背景: 在前一篇博客中我们提到了如何启动或关闭oracle的归档(ARCHIVELOG)模式,在我成功设定数据库为归档模式以后, 第二天再次尝试连接数据库,报错:ORA-00257.在网上找到了一圈资 ...
- (转)ORA-00257归档日志写满的解决方法
转自:http://www.cnblogs.com/xwdreamer/p/3804509.html 背景: 在前一篇博客中我们提到了如何启动或关闭oracle的归档(ARCHIVELOG)模式,在我 ...
- Vue 生产环境(production) 打开 调试工具的方法
总所周知,在production生产环境下,点击vue插件会显示, 并且按F12是没办法使用调试工具的,这样非常不方便 其实是有一个办法的,那就是复制下面的js,然后在控制台执行 代码中已经写清楚执行 ...
- oracle归档日志写满错误解决方法
最近一年,手头上负责的项目要部署到很多个地方,由于项目组里没有人对oracle比较熟悉,只能给自己增加一个DBA的角色了.由于短时间内要部署很多单位,备份策略没有设置好,结果过了一个月,用户报告程序开 ...
- 修改vue的配置项支持生产环境下二级目录访问的方法
本文主要记录如何配置vue的打包文件配置项,使打包后的文件可以支持二级目录的访问. 1.常规打包 在实际的项目中,我们通常都使用 npm run build 直接打包文件后丢到服务器上访问 打包后的文 ...
随机推荐
- Shannon entropy
Shannon entropy is one of the most important metrics in information theory. Entropy measures the unc ...
- cocos2d-x 的两大基类
cocos2d-x 有两个重要的基类,一个管理引用计数的 Ref,别一个则定义许多基本属性的 Node. 在 cocos2d-x 中的基本概念 说到 create 函数的时候提到 cocos2d-x ...
- eval解析非标准json
以前一直在用,但是不知道原理,惭愧啊,今天把自己想法加上. eval("{a:1}"); eval("{a:,b:1}"); 第一眼的感觉是都会得到一个对象,其 ...
- 网站优化之Asp.Net篇<一>
一>禁用viewstate. 二>禁用动态编译.访问一个Aspx文件时 会编译为一个新的类放在C盘Asp.net临时文件夹下.下次请求不会再编译,会把先前的编译结果返回. 任何对Asp.n ...
- windows 7 下找不到 Chart控件问题
1.网上下载 Microsoft Chart Control, version 6.0 插件 2.注册.由于windows 7 的权限问题注册会失败,因为注册控件需要管理员的权限,在开始菜单的附件下面 ...
- Ubuntu中添加eclipse
环境:Ubuntu 14.04 步骤: 1.安装配置JDK,详见 http://my.oschina.net/u/1407116/blog/227084 2.下载eclipse 从官网http://w ...
- Zyxel Switch-How to block a fake DHCP server without enabling DHCP snooping?
How to block a fake DHCP server without enabling DHCP snooping? Scenario How to block a fake DHCP se ...
- Windows和Unix下的编码问题
今天测试shell脚本时,执行报错: ./report.sh: /tmp/tmp.E8ekx6r5Qq/report.sh: /bin/bash^M: bad interpreter: No such ...
- overflow 清除浮动
对overflow的理解还停留在“规定当内容溢出元素框时发生的事情”,这种简单的认识上,今天发现overflow还可以清除浮动. <style> .outside{ height:auto ...
- [转]使用 C 编写 Lua 模块
Lua 作为一种小巧的语言,一般都是嵌入到 C/C++ 中作为扩展语言,但是也可以作为独立的脚本语言使用,并且可以使用 C/C++ 编写扩展模块.在参考资料 [1] 中有怎样用 C/C++ 编写模块的 ...