2017-04-06 20 views
0

私はVisual Studio 2015拡張機能を備えており、log4netを使用したいと考えています。 しかし、私はログメッセージを取得していないし、log4netからの内部デバッグメッセージも取得していません。log4netがVS 2015の拡張機能で動作しない

private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

以降、私が持っている初期化メソッドで:

<configuration> 
    <appSettings> 
    <add key="log4net.Internal.Debug" value="true"/> 
    </appSettings> 
    <system.diagnostics> 
    <trace autoflush="true"> 
     <listeners> 
     <add name="textWriterTraceListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="C:\Program Files\Sym\Logging\Log4Net_Trace_VSX.txt"/> 
     </listeners> 
    </trace> 
    </system.diagnostics> 
... 
</configuration> 
:VSXプロジェクトのapp.configをで

if (!log4net.LogManager.GetRepository().Configured) 
     { 
      log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo("C:\\Program Files\\Sym\\bin\\Log4NetSettingsGlobal.xml")); 
     } 
     log.Debug("Package Initialize"); 

私はこれを持っている私が持っているパッケージのクラスで

上記のテキストファイルには何も書き込まれません。 VSで拡張機能をデバッグすると、出力ウィンドウに何も書き込まれません。つまり、VSの2番目のインスタンスが開かれて拡張機能をテストできます。

DebugAppenderも追加しましたfrom this SO questionです。出力ウィンドウには何も表示されません。

私は間違っていますか?

答えて

1

説明に基づいて、app.configファイルを変更せずに、log4netを使用して簡単なカスタムコマンドvsixプロジェクトを作成します。

Log4Net.config

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 
    </configSections> 
    <log4net> 
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <!--log Path--> 
     <param name= "File" value= "F:\App_Log\"/> 
     <!--append log to file--> 
     <param name= "AppendToFile" value= "true"/> 
     <!--log keep days--> 
     <param name= "MaxSizeRollBackups" value= "10"/> 
     <param name= "StaticLogFileName" value= "false"/> 
     <!--log farmat:2008-08-31.log--> 
     <param name= "DatePattern" value= "yyyy-MM-dd&quot;.log&quot;"/> 
     <param name= "RollingStyle" value= "Date"/> 
     <layout type="log4net.Layout.PatternLayout"> 
     <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" /> 
     </layout> 
    </appender> 
    <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender"> 
     <mapping> 
     <level value="ERROR" /> 
     <foreColor value="Red, HighIntensity" /> 
     </mapping> 
     <mapping> 
     <level value="Info" /> 
     <foreColor value="Green" /> 
     </mapping> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%n%date{HH:mm:ss,fff} [%-5level] %m" /> 
     </layout> 
     <filter type="log4net.Filter.LevelRangeFilter"> 
     <param name="LevelMin" value="Info" /> 
     <param name="LevelMax" value="Fatal" /> 
     </filter> 
    </appender> 
    <root> 
     <!--(high) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (low) --> 
     <level value="all" /> 
     <appender-ref ref="ColoredConsoleAppender"/> 
     <appender-ref ref="RollingLogFileAppender"/> 
    </root> 
    </log4net> 
</configuration> 

log4netの

using System; 
using System.ComponentModel.Design; 
using System.Globalization; 
using Microsoft.VisualStudio.Shell; 
using Microsoft.VisualStudio.Shell.Interop; 
using log4net.Config; 
using System.IO; 
using log4net; 

namespace CommandDemo 
{ 
    /// <summary> 
    /// Command handler 
    /// </summary> 
    internal sealed class FirstCommand 
    { 
     /// <summary> 
     /// Command ID. 
     /// </summary> 
     public const int CommandId = 0x0100; 

     /// <summary> 
     /// Command menu group (command set GUID). 
     /// </summary> 
     public static readonly Guid CommandSet = new Guid("30f5b2c4-9c7f-4748-a1de-d6d03fe40eda"); 

     /// <summary> 
     /// VS Package that provides this command, not null. 
     /// </summary> 
     private readonly Package package; 

     private ILog logger; 

     /// <summary> 
     /// Initializes a new instance of the <see cref="FirstCommand"/> class. 
     /// Adds our command handlers for menu (commands must exist in the command table file) 
     /// </summary> 
     /// <param name="package">Owner package, not null.</param> 
     private FirstCommand(Package package) 
     { 
      InitLog4Net(); 
      logger = LogManager.GetLogger(typeof(FirstCommand)); 

      if (package == null) 
      { 
       throw new ArgumentNullException("package"); 
      } 

      this.package = package; 

      OleMenuCommandService commandService = this.ServiceProvider.GetService(typeof(IMenuCommandService)) as OleMenuCommandService; 
      if (commandService != null) 
      { 
       var menuCommandID = new CommandID(CommandSet, CommandId); 
       var menuItem = new MenuCommand(this.MenuItemCallback, menuCommandID); 
       commandService.AddCommand(menuItem); 
      } 
     } 

     /// <summary> 
     /// Gets the instance of the command. 
     /// </summary> 
     public static FirstCommand Instance 
     { 
      get; 
      private set; 
     } 

     /// <summary> 
     /// Gets the service provider from the owner package. 
     /// </summary> 
     private IServiceProvider ServiceProvider 
     { 
      get 
      { 
       return this.package; 
      } 
     } 

     /// <summary> 
     /// Initializes the singleton instance of the command. 
     /// </summary> 
     /// <param name="package">Owner package, not null.</param> 
     public static void Initialize(Package package) 
     { 
      Instance = new FirstCommand(package); 
     } 

     /// <summary> 
     /// This function is the callback used to execute the command when the menu item is clicked. 
     /// See the constructor to see how the menu item is associated with this function using 
     /// OleMenuCommandService service and MenuCommand class. 
     /// </summary> 
     /// <param name="sender">Event sender.</param> 
     /// <param name="e">Event args.</param> 
     private void MenuItemCallback(object sender, EventArgs e) 
     { 
      string message = string.Format(CultureInfo.CurrentCulture, "Inside {0}.MenuItemCallback()", this.GetType().FullName); 
      string title = "FirstCommand"; 

      logger.Debug("DebugInfo"); 
      //logger.Info("TestInfo"); 
      //logger.Warn("Testwarning"); 
      //logger.Error("Testexception"); 
      //logger.Fatal("Testerror"); 
      // Show a message box to prove we were here 
      VsShellUtilities.ShowMessageBox(
       this.ServiceProvider, 
       message, 
       title, 
       OLEMSGICON.OLEMSGICON_INFO, 
       OLEMSGBUTTON.OLEMSGBUTTON_OK, 
       OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST); 
     } 


     private void InitLog4Net() 
     { 
      var logCfg = new FileInfo(@"C:\log4netconfigpath\log4net.config"); 
      XmlConfigurator.Configure(logCfg); 
     } 
    } 
} 
+0

とカスタムコマンド私は新しいインストーラを書いて、それを追加するのを忘れたので、私は、binディレクトリにある設定ファイルを持っていなかったことがわかりました。とにかく、あなたがそれを働かせることができることを知って、私はすべてを再びチェックしました。ありがとう、あなたは私を助けた! – Igavshne

関連する問題