搜尋此網誌

2011年12月29日 星期四

log4net的應用


   'log4net.Layout.PatternLayout 中的轉換模式(ConversionPattern)
    '
    '%m(message): 輸出的日誌消息,如ILog.Debug(…) 輸出的一條消息
    '%n(new line): 換行
    '%d(datetime): 輸出當前語句運行的時刻
    '%r(run time): 輸出程序從運行到執行到當前語句時消耗的毫秒數
    '%t(thread id): 當前語句所在的線程ID
    '%p(priority): 日誌的當前優先級別,即DEBUG 、INFO 、WARN… 等
    '%c(class): 當前日誌對象的名稱,例如:
    '       模式字符串為:%-10c -%m%n
    '       代碼為:
    '       ILog log=LogManager.GetLogger(“Exam.Log”);
    '       log.Debug(“Hello”);
    '       則輸出為下面的形式:
    '        Exam.Log        - Hello
    '%L :輸出語句所在的行號
    '%F :輸出語句所在的文件名
    '%- 數字:表示該項的最小長度,如果不夠,則用空格填充
    '例如,轉換模式為%r [%t]%-5p %c - %m%n 的PatternLayout 將生成類似於以下內容的輸出:
    '176 [main] INFO   org.foo.Bar - Located nearest gas station.


    1.下載並將log4net.dll加入參考
    
    2.在Global中Application_Start裡加入
       log4net.Config.XmlConfigurator.ConfigureAndWatch(New 
      System.IO.FileInfo(AppDomain.CurrentDomain.BaseDirectory & "log4net.config"))


   3.在根目錄增加log4net.config檔
  
   4.log4net.config中建立   
      <?xml version="1.0" encoding="utf-8" ?>
     <log4net>
     <!--設定監看等級必要一般而言會設DEBUG-->
     <!--訊息有五種等級由低而高為Debug、Info、Warn、Error、Fatal 設太低高的會無法使用-->
         <root>            
            <level value="DEBUG" />
            <appender-ref ref="RollingLogFileAppender" />
        </root>
     <!--自定義--> 
      <logger name="AAA.DBAccess" additivity="false">
            <level value="DEBUG" />
           <appender-ref ref="DBAccess_Info" />
      </logger>
    <!--DBAccess_Info自定義設定-->
     <appender name="DBAccess_Info" type="log4net.Appender.RollingFileAppender">
     <!--輸出檔案路徑-->
     <file value="Log/" />
     <appendToFile value="true" />
    <rollingStyle value="Date" />
    <!--關閉固定檔名-->
    <staticLogFileName value="false" />
    <!--檔名規則年月日+html-->
    <datePattern value="&quot;AAA_&quot;yyyyMMdd&quot;.html&quot;"  />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level - %logger - %L - [%property{NDC}] - %m %n" />
    </layout>
  </appender>




  <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
     <!--輸出檔案路徑-->
    <file value="Log/" />    
    <appendToFile value="true" />
    <!--大小約束-->
    <rollingStyle value="Date" />
    
    <!--關閉固定檔名-->
    <staticLogFileName value="false" />
    <!--檔名規則年月日+html-->
    <datePattern value="yyyyMMdd&quot;.html&quot;"  />
    
    <layout type="log4net.Layout.PatternLayout">     
      <conversionPattern value="%date - %F - [%thread] - %-5level - %logger - %L -  %c - %m %n" />
    </layout>
  </appender>
    </log4net>

 5.程式中
    '預設的宣告
    Private Shared ReadOnly _log As log4net.ILog =     
    log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)
   '自定義宣告 
   Private Shared ReadOnly _log2 As log4net.ILog = log4net.LogManager.GetLogger("AAA.DBAccess")
   'log產生
   _log2.Debug("TEST<br>")


   測試過的格式TXT,HTML,XML
   由於測試時的換行只有TXT能正常執行
   所以建議假如需要使用檔案格式
   TXT,HTML(需自行加<BR>但是可以使用網路直接觀看XML格式需另行編寫比較麻煩)






相關好文介紹
http://johoya.blogspot.com/2007/03/log4net.html
  

2011年12月27日 星期二

友善列印~


<script type="text/javascript">
  function previewScreen(block)
  {
        var value = block.innerHTML;
        var printPage = window.open("","printPage","");
        printPage.document.open();
        printPage.document.write("<OBJECT classid='CLSID:8856F961-340A-11D0-A96B-00C04FD705A2' 
        height=0 id=wc name=wc width=0>友善列印</OBJECT>");
        printPage.document.write("<HTML><head></head><BODY onload='javascript:window.print();window.close();'>");
        printPage.document.write("<PRE>");
        printPage.document.write(value);
        printPage.document.write("</PRE>");
        printPage.document.close("</BODY></HTML>");
  }
</script> 






<a onkeypress="previewScreen(PrintDiv1)" onclick="previewScreen(PrintDiv1)" style="text-decoration:none" target="_blank"> 
   <img src="images/icon_13_1.gif"  width="90" height="49" alt="友善列印">
</a>




//需要列印的內容包在div中
<div id="PrintDiv1">
     <table>
           <tr><td class="TFont12" align ="left" >
           <asp:Literal id="Lite1" runat ="server" ></asp:Literal>
          </td>
           </tr>
     </table>
</div>

關於google search

由於最近案子開發有用到所以在此紀錄一下
程式方面

function google_serch()
{
   
    var wq=document.getElementsByName("q")[0].value;
    var link="http://www.google.com/search?sitesearch=網域.info&q="+wq;
    window.open(link); 
}


//輸入欄位

<input type="text" name="q"  size="26" 
style="border: 1px solid #FFFFFF; margin: 0px; padding: 0;  background-color:#FFFFFF"
 value="請輸入關鍵字"/>

//按鈕
<a onkeypress="google_serch()" onclick="google_serch()" 
style="text-decoration:none" target="_blank">
按鈕或文字或圖隨你~
</a>


程式方面這樣就OK了~但別以為這樣就結束了~~~
假如你是網站
那麼你需要先申請網域
然後到以下網址去註冊
https://www.google.com/webmasters/tools/submit-url?continue=http://www.google.com/addurl/?hl%3Dzh-TW%26continue%3D/addurl
這樣google才搜尋的到google serch是認網域的這時間應該不用一天
不過申請完後應該也只抓的到首頁而已
接下來請去申請webmaster tools
並加入你的網站
然後
診斷-->Googlebot 模擬器
我是選擇首頁(這裡建議最好選擇網站導覽類的作者是因為要建立的首頁都連的到)
然後提交GOOGLE建立索引
選擇第二個網址和所有連結的網頁
在來就是等了
雖然有人是說要等爬蟲~但是個人感覺有設應該會快一些~









2011年12月21日 星期三

C# 寄信語法(System.Net.Mail)


using System.Net.Mail;
public void  Send2(string szTo, string szSubject, string szBody, string szFrom, FileUpload Attachmentsurl)
 {
     //szTo 收件者 szSubject主旨  szBody內容 szFrom 寄件者 Attachmentsurl 附件 
      object[] mailtoadd = szTo.Split(',');
      for (int i = 0; i <= mailtoadd.Length - 1; i++)
      {
           MailAddress from = new MailAddress("寄件者", "收到後要顯示的名稱", System.Text.Encoding.UTF8);
           MailAddress to = new MailAddress(mailtoadd[i].ToString());
           MailMessage em = new MailMessage(from, to);
           em.SubjectEncoding = System.Text.Encoding.UTF8;
           em.BodyEncoding = Encoding.UTF8;
           //信件主題 
          em.Subject = szSubject;
          //內容 
          em.Body = szBody;
          if (Attachmentsurl.FileName != "")
          {
                    string path = @"" + 路徑 + Attachmentsurl.FileName.ToString();
                    Attachment data = new Attachment(path);
                    em.Attachments.Add(data);
          }
          em.IsBodyHtml = true;
          System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();
          //登入帳號認證  
          client.Credentials = new System.Net.NetworkCredential("帳號", "密碼");
          // port 跟 host 是用gmail做例子其他非一樣
          client.Port = 587;
          client.Host = "smtp.gmail.com";
          //啟動SSL 
         client.EnableSsl = true;
          try
          {
               client.Send(em);


            }
            catch (Exception e)
           {
                  
            }
       }
  }

2011年12月13日 星期二

.NET Framework ASP.NET Padding Oracle

這個月由於要忙於系統上線的關係~
所以程式要進機房~當然基於開放的前提下要做資安掃描
結果就發生了 .NET Framework ASP.NET Padding Oracle 重大缺失
要解決這個重大缺失的方法可以參考
http://cert.shnet.edu.cn/anquangonggao/.net-framework-asp.net-padding
算是比較完整的當然對方應該也會給你一個錯誤報告上方應該也會有寫
主要也就是
.NET Framework 3.5 Service Pack 1之後版本

Web.config下
<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/ErrorPage.aspx" />
然後新增一個一個存ASPX的網頁取名ErrorPage.aspx(名字自己訂就好跟上方呼應即可)
然後網頁內容
C#
<%@ Page Language="C#" AutoEventWireup="true" %>
<%@ Import Namespace="System.Security.Cryptography" %>
<%@ Import Namespace="System.Threading" %>

<script runat="server">
        void Page_Load() {
        byte[] delay = new byte[1];
        RandomNumberGenerator prng = new RNGCryptoServiceProvider();

        prng.GetBytes(delay);
        Thread.Sleep((int)delay[0]);
       
        IDisposable disposable = prng as IDisposable;
        if (disposable != null) { disposable.Dispose(); }
    }
</script>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <div>
        An error occurred while processing your request.
    </div>
</body>
</html>

VB
<%@ Page Language="VB" AutoEventWireup="true" %>
<%@ Import Namespace="System.Security.Cryptography" %>
<%@ Import Namespace="System.Threading" %>

<script runat="server">
    Sub Page_Load()
        Dim delay As Byte() = New Byte(0) {}
        Dim prng As RandomNumberGenerator = New RNGCryptoServiceProvider()
       
        prng.GetBytes(delay)
        Thread.Sleep(CType(delay(0), Integer))
       
        Dim disposable As IDisposable = TryCast(prng, IDisposable)
        If Not disposable Is Nothing Then
            disposable.Dispose()
        End If
    End Sub
</script>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <div>
        An error occurred while processing your request.
    </div>
</body>
</html>

iis重啟
當然假如你以上都做完還是沒過的話
那就是window update的問題了
基本上我會建議先做完window update
會比較沒問題以上是我的慘痛經驗