Logging from powershell-script to csharp-program (log4net - logfile)

后端 未结 3 1752
萌比男神i
萌比男神i 2021-01-06 09:53

I have written a program with C#, that creates a logfile and fills this by using log4net. This program starts powershell-scripts. The scripts should use log4net, too. I want

3条回答
  •  悲&欢浪女
    2021-01-06 10:21

    As an alternative you could reroute the streams and use the standard Write-Error, Write-Verbose, etc. CMDlets in your Script.

    In your C# app attach methods to the streams events, like so:

    PowerShell ps = PowerShell.Create();
    // ... code to add your script, etc.
    ps.Streams.Warning.DataAdded += new EventHandler(Warning_DataAdded);
    // ... attach more streams for other log levels
    ps.Invoke();
    

    Create your methods like so:

    static void Warning_DataAdded(object sender, DataAddedEventArgs e)
    {
        PSDataCollection warningStream = (PSDataCollection)sender;
        log.Warn(warningStream[e.Index].Message);
    }
    

    This should write everything you output in your PowerShell Script via

    Write-Warning "This is a warning message"
    

    to the Warn level in log4net.

提交回复
热议问题